「再マージ」は、SAS特有の機能っぽい。
AccessやMySQLで試してみたけど、ダメだった。
以下まとめてみてみました。
①サンプルデータ作成
| data DT1; input A B; cards; 1 10 1 20 1 30 2 40 2 50 ; run; |
②まずは通常のSQL文
| * Aのグループ毎に、Bの最大値を求める ; proc sql; create table DT2 as select A, max(B) as B2 from DT1 group by A; quit; |
③「再マージ」を利用したSQL文
| proc sql; create table DT3 as select A, max(B) as B2, B from DT1 group by A order by A, B; quit; ※ 赤字が②から追記した文。 |
解説
(1) まず②と同様、Aのグループ毎に、Bの最大値を求めにいきます。
(2) がしかし、select文にはBも指定されています。
そのため以下の元データ「DT1」からBを取ってきて、上記(1)とマージします。
出来上がりは、DATAステップの「merge (1)(2); by A」とした時みたいな感じ。(内部処理の動きは違うと思うけど。)
ちなみに、この「再マージ」が行われると、並び順が狂うので、「order by A、B」と並び替えをしています。
ちょっと説明が分かりづらいかもしれないけど、
この仕組みは便利なので、今後活用法を小出ししていこうと思います。