「再マージ」は、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」と並び替えをしています。
ちょっと説明が分かりづらいかもしれないけど、
この仕組みは便利なので、今後活用法を小出ししていこうと思います。
再マージ、あまり深く考えたことなかったですが、確かに独特ですね。
返信削除続きが楽しみです!
今年も本当にお世話になりました、勉強させていただきました。有難うございます!
よいお年を。
こちらこそ、お世話になりました!
削除毎日ブログみて沢山勉強させていただきました。
ちなみにロゴ作ったんですね!なんかいいですね、こんな将棋の駒があったら欲しいです。
よいお年を!