2016年9月21日水曜日

SETやMERGEをした時、オブザベーション毎に結合元のデータセットがどれなのか判別する方法 【IN=オプション】


SETやMERGEで使えるIN=オプションについて解説をしたいと思います。



構文

 SET
        データセット1  ( IN = 一時変数1 )
        データセット2  ( IN = 一時変数2 )
        ・・・
 ;

・ データセット1 から持ってきたオブザベーションの場合 一時変数1 に「1」が入り、それ以外「0」が入る
・ データセット2 から持ってきたオブザベーションの場合 一時変数2 に「1」が入り、それ以外「0」が入る

・ 一時変数名は適当な名前でOK。またこの一時変数は最終的に消されるのでデータセットには残らない。





サンプルデータ作成
data DT1;
   A=1; B="aa"; output;
   A=2; B="bb"; output;
run;
  A  
  B  
  1 aa
  2 bb

data DT2;
   A=2; C="cc"; output;
   A=3; C="dd"; output;
run;
  A  
  C  
  2 cc
  3 dd


例① SETステートメントでの例
data OUT1;
  set  DT1 (in=FLG1)   DT2 (in=FLG2) ;

  if FLG1=1 then X=1;
  if FLG2=1 then Y=1;
run;
  A  
  B  
  C  
  X  
  Y  
  1 aa  1
  2 bb
  1
  2 cc  1
  3 dd  1



例② MERGEステートメントでの例
data OUT2;
  merge  DT1 (in=FLG1)   DT2 (in=FLG2) ;
  by A;

  if FLG1=1 then X=1;
  if FLG2=1 then Y=1;
run;
  A  
  B  
  C  
  X  
  Y  
  1 aa  1
  2 bb cc  1  1
  3 dd  1


実践例

上の例②で、DT1とDT2の両方に存在するオブザベーションを抽出したい場合、以下の抽出条件を書けばいい事が分かりますね。

if FLG1=1 and FLG2=1;


更に、DT1になくて、DT2にのみ存在するオブザベーションを抽出したい場合、以下の抽出条件を書けばいけます。

if FLG1=0 and FLG2=1;


0 件のコメント:

コメントを投稿