SQLプロシジャで複数のデータセットを縦結合する方法の紹介です。
サンプルデータ
data DT1; input A$ B$ ; cards; 001 aa 002 bb 002 bb ; data DT2; input A$ C$; cards; 002 bb 003 cc ; DT1
DT2
|
① 「UNION」 と 「UNUION ALL」
proc sql; create table DT3 as select * from DT1 union select * from DT2; quit; DT3
基本構文 SELECT文 union SELECT文 解説 ・SELECT文の結果を縦に結合します。 ・変数名ではなく変数の順番で結合されます。 (今回の例では、DT1の変数BとDT2の変数Cは同じ2列目にある変数なので、無理矢理BとCを縦にくっつけちゃいます。) ・出力データで値が重複してるレコードは、重複分が削除されます。 (たとえば、 DT1の 「A="002" and B="bb"」 と、 DT2の 「A="002" and C="bb"」 の3レコードは重複してるので、1レコードだけ残してあとは削除されます。) 重複を削除したくない場合は、「union all」と指定すればok。 |
② 「UNION CORR」 と 「UNUION CORR ALL」
proc sql; create table DT4 as select * from DT1 union corr select * from DT2; quit; DT4
基本構文 SELECT文 union corr SELECT文 解説 ・SELECT文の結果を縦に結合します。 ・結合時に共通する変数名のみを残します。 (今回の例では、DT1とDT2で共通する変数名はAのみなので、これだけ残る。) ・出力データで値が重複してるレコードは、重複分が削除されます。 (たとえば、 DT1とDT2の 「A="002"」 の3レコードは重複なので、1レコードだけ残してあとは削除されます。) 重複を削除したくない場合は、「union corr all」と指定すればok。 |
③ 「OUTER UNION CORR」
proc sql; create table DT5 as select * from DT1 outer union corr select * from DT2; quit; DT5
基本構文 SELECT文 outer union corr SELECT文 解説 ・SELECT文の結果を縦に結合します。 ・データセット間で共通する変数名同士を結合し、片方にしかない変数も残してくれてます。
・重複レコードも削除されません
|
14.データセットを縦結合する【UNION】
15.NULLの扱いに関する注意点
こんにちは!いつも記事を楽しみにしています。
返信削除matsu a さんの記事がきっかけでSQLを使うようになりました。
データステップでは面倒な操作が、SQLを使うとシンプルになるケースがあるので
便利ですね。
これからも、楽しみにしています。
コメントありがとうございます!
削除そう言って頂けると、とても嬉しいです!
そうなんです、すごい便利なんです。
しかもアイディア次第で、色々できて面白いです。
これからもSQLプロシジャやSASの色々な記事を更新していく予定ですので、
また何か気付いたこと、感想、アイディアなど、なんでもお待ちしています!