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); |