「MERGEステートメントにBY値を繰り返すデータセットが複数あります。」

[OS] ALL
[リリース] ALL
[キーワード] Base, DATA, MERGE, message, BY, repeat

[質問]

データセットのマージを行なったところ、データセットは出力されましたが、ログに下記のメッセージが出力されました。


   MERGEステートメントにBY値を繰り返すデータセットが複数あります。

このメッセージはどのようなときに表示されますか。
結果が正しくないのでしょうか。

[回答]

上記のメッセージは、2つ以上のデータセットが、BYグループの中に重複する値を持っているときに表示されます。
必ずしも問題があるわけではありませんが、重複する値によって、期待する結果と異なる結果になる可能性がありますので、注意を促すメッセージです。

下記の例では、BYグループ変数IDの値が”c”であるオブザベーションが2つのデータセットで重複していることにより、変数COLORの値が期待する結果と異なる可能性があります。
このため、下記のプログラムを実行すると、表題のメッセージがログに出力されます。

プログラム例:


   /* ID='a'とID='c'が重複 */

   DATA one;
     INPUT id $ fruit $;
   CARDS;
   a apple
   a apple
   b banana
   c coconut
   c coconut
   c coconut
   ;
   RUN;

   PROC SORT data=one;
     BY id;
   RUN;

   /* ID='b'とID='c'が重複 */

   DATA two;
     INPUT id $ color $;
   CARDS;
   a amber
   b brown
   b black
   c cocoa
   c cream
   ;
   RUN;

   PROC SORT data=two;
     BY id;
   RUN;


   DATA test;
     MERGE one two;
     BY id;
   RUN; 

   PROC PRINT;
   RUN;

実行結果:


   Obs id fruit   color
   1   a  apple   amber
   2   a  apple   amber
   3   b  banana  brown
   4   b  banana  black
   5   c  coconut cocoa
   6   c  coconut cream
   7   c  coconut cream