2つのデータセットのマージで両方にキーがあるときだけデータを出力する

[OS] ALL
[リリース] ALL
[キーワード] Base, DATA, MERGE, IN OPTION

[質問]

MERGEステートメントを使用して2つのデータセットを結合する際、両方のデータセットにキーがあるときだけデータを出力するようにできますか?

[回答]

両方のデータセットにキーが存在するときだけデータを出力するには、MERGEステートメントでIN=オプションを指定します。

「IN=変数名」はブーリアンフラグで、BYグループが替わるたびにリセットされます。 両方のデータセットにデータが存在するデータだけを出力する場合は、BYグループをチェックします。
下記の例を参考にしてください。

プログラム例:


   DATA file1;
     INPUT var name $;
   CARDS;
   100 john
   200 joe
   400 bill
   600 bob
   ;
   RUN;

   PROC SORT data=file1;
     BY var;
   RUN;

   DATA file2;
     INFILE cards dsd truncover;
     INPUT var address $ 13.;
   CARDS;
   100,34 Smith Road
   200,67 Burt Ave
   300,12 You St
   400,45 Younge St
   500,79 Wellington
   600,23 Done Road
   ;
   RUN;

   PROC SORT data= file2;
     BY var;
   RUN;

   DATA three;
     MERGE file1 (in=a) file2 (in=b);
     BY var;
     IF a and b;
   RUN;

   PROC PRINT;
   RUN;

結果:


   Obs    var    name       address

    1     100    john    34 Smith Road
    2     200    joe     67 Burt Ave
    3     400    bill    45 Younge St
    4     600    bob     23 Done Road