2014年12月2日火曜日

SQLプロシジャ入門13:データセットを横結合する【FULL JOIN】




横結合時に両方のデータセットの全てのレコードを残す方法を紹介。




サンプルデータ
data DT1;
  A=1; B="AA"; output;
  A=2; B="BB"; output;
run;

data DT2;
  A=2; C=10; output;
  A=3; C=20; output;
run;

DT1
 A 
B
  1  
  AA   
  2
  BB  

DT2
 A 
C
  2  
  10   
  3
  20  





FULL JOIN
proc sql;
   create table  DT3 as
   select    coalesce( DT1.A, DT2.A ) as A ,
                B ,
                C
   from      DT1  full join  DT2  on  DT1.A = DT2.A ;
quit;

  A  
 B 
  C  
  1
  AA 
 .
  2
  BB 
 10
  3
   
 20


基本構文
  from  データセット1  full join  データセット2  on  結合条件


解説
結合時、2つのデータセットの全てのレコードを残します。
 (結合条件に合うレコードだけでなく、片方のデータセットにしかないレコードも残す)


② 結合する2つのデータセットで同じ変数名を持っている場合、「データセット名.変数名」と書きます。
(今回の例では、DT1とDT2で同じ変数名Aを持っているので、どっちのAを使うのか明確にするため、「DT1.A」とか「DT2.A」と書いています)


③ SELECTでcoalesceという関数を使ってます。
この関数は、指定した引数の値を順番に見ていって、最初の非欠損値の値を返します。

つまりSELECTの「coalesce( DT1.A, DT2.A )」は、
・DT1にしか存在しないレコードだったら、DT1.Aの値を持ってくる
・DT2にしか存在しないレコードだったら、DT2.Aの値を持ってくる

という事をやっています。






13.データセットを横結合する【FULL JOIN】

0 件のコメント:

コメントを投稿