重複データをユニークなものとそうでないものに分割する方法

[OS] ALL
[リリース] ALL, SAS System 9以降(DUPOUTオプション)
[キーワード] Base, unique, duplicate, SORT, First.By, DUPOUT option

[質問]

重複データの最初のオブザベーション(ユニーク)とそれ以外を2つのデータセットに分割したいのですが、どのような処理を行なえばよいでしょうか。

[回答]

SORTプロシジャでオブザベーションの並べ替えを行なった後、FIRST.BY変数をご利用ください。 下記のサンプルをご参照ください。


   DATA DATA1;
      INPUT char $ num;
   CARDS;
   A 1
   A 2
   A 3
   B 1
   C 1
   C 2
   ;
   RUN;

   PROC SORT DATA=data1 OUT=sdata1;                /* 並べ替え */
      BY char;
   RUN;

   DATA uni8 dup8;
      SET sdata1;
      BY char;
      IF FIRST.char THEN OUTPUT uni8;    /* FIRST.BY変数を利用 */
      ELSE OUTPUT dup8;
   RUN;

SAS9を使用している場合は、SORTプロシジャに追加されたDUPOUT=オプションを利用することで、SORTプロシジャのみで、同様の処理を行なうことが可能です。


   PROC SORT DATA=data1 OUT=uni9
      DUPOUT=dup9 NODUPKEY;    /* SAS9のDUPOUTオプションを利用 */
      BY char;
   RUN;