マージ・パージ

Last-modified: 2008-11-27 (木) 14:48:34

DATAステップのMERGEステートメントを使って,1対Nのマージをする時,BYステートメントで指定するキー変数以外の共通変数には注意が必要です.
以下のように,共通する変数の値は,期待通りの結果にはたぶんならないでしょうから,共通変数はもたせないで処理するのが安全です.

data tran;
 input no item;
cards;
1 1001
2 1001
3 2101
4 2101
5 5503
;
proc sort;by item;run;

data master;
 input item group;
cards;
1001 10
2101 21
2102 21
;
proc sort;by item;run;

data tran;
  merge tran(in=in1) master;
  by item;
  if in1;
run;
proc print;run;

/*
OBS    no    item    group

 1      1    1001      10
 2      2    1001      10
 3      3    2101      21
 4      4    2101      21
 5      5    5503       .
 */


data tran;
 input no item;
 group=9999;/*欠損を9999とするつもりが..*/
cards;
1 1001
2 1001
3 2101
4 2101
5 5503
;
proc sort;by item;run;

data master;
 input item group;
cards;
1001 10
2101 21
2102 21
;
proc sort;by item;run;

data tran;
  merge tran(in=in1) master;
  by item;
  if in1;
run;
proc print;run;

/*
OBS    no    item    group

 1      1    1001       10
 2      2    1001     9999 <-10のつもりが,9999に
 3      3    2101       21
 4      4    2101     9999 <-21のつもりが,9999に
 5      5    5503     9999 <-これだけ期待通り


 merge master tran(in=in1);
とすると,すべてのobsがgroup=9999のままになる
 */