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のままになる
*/