KEY変数に同一の値がある場合のマージ方法

[OS]ALL
[リリース]
[キーワード]

[質問]

次の要領で、マージ処理を行いました。

data aaa;
   input cnt msk $;
   cards;
1 10101A
2 10101B
3 10101C
;

data bbb;
   input cnt msk $;
   cards;
1 10101A
1 a
2 10101B
2 b
3 10101C
3 c
;

data ccc;
   merge bbb(in=a) aaa(in=b);
   by cnt;
   if a=1 & b=1;
proc print;
run;

実行結果は、次のようになります。

1 10101A
1 a
2 10101B
2 b
3 10101C
3 c

次のようにはならないのでしょうか。

1 10101A
1 10101A
2 10101B
2 10101B
3 10101C
3 10101C

[回答]

MERGEステートメントでは、1つのマージキーに対して同一の値が存在する場合、最初のオブザベーションだけを処理するようになっています。 したがって、1つのオブザベーションに対してマージ処理が行われたあと、引き続く同一の値を持つオブザベーションでは、マージ処理が行われず、 マージされる側の値がそのまま設定されます。

質問にあるようなデータセットは、次のように、データセットBBBから変数MSKを削除してからマージすれば作成できます。

merge bbb(drop=msk in=a) aaa(in=b);