2014年3月6日木曜日

SORTプロシジャで重複レコードを削除・抽出する。



SORTプロシジャで重複レコードを削除・抽出するオプション「NODUPKEY」と「NOUNIQUEKEY」を紹介したいと思います。




サンプルデータ

data DT1;
input A B C$ @@;
cards;
1 1 a 1 2 a 2 1 c 2 1 b
;
 A 
 B  
 C  
  1     1     a  
  1    2  a 
  2    1  c   
  2    1  b   



例①

proc sort data=DT1 nodupkey out=DT2 dupout=DT3;
  by A B;
run;

DT2
 A 
 B  
 C  
  1     1     a  
  1    2  a 
  2    1  c 


DT3
 A 
 B  
 C  
  2     1  b   


解説

  • NODUPKEY」を指定すると、BY変数が重複してるレコードがあった場合に、最初のレコードのみ残して、以降の重複レコードを削除してくれる。
  • OUT=」のデータセットには削除後のレコードが入る。
  • DUPOUT=」のデータセットには削除したレコードが入る。
  • OUT=」を省略すると、「DATA=」のデータセットに上書きしてしまうので、注意!




例② (SAS9.3からの機能)

proc sort data=DT1 nouniquekey out=DT4 uniqueout=DT5;
  by A B;
run;

DT4
 A 
  B  
 C  
  2    1   c  
  2  1  b 


DT5
 A 
  B  
 C  
  1    1   a  
  1  2  a


解説

  • NOUNIQUEKEY」を指定すると、BY変数が重複してるレコードと、重複していないレコードを分割することが出来る。
  • OUT=」のデータセットには重複してるレコードが入る。
  • UNIQUEOUT=」のデータセットには重複してないレコードが入る。
  • OUT=」を省略すると、「DATA=」のデータセットに上書きしてしまうので、注意!



「NOUNIQUEKEY」 は結構助かる機能ですね。

0 件のコメント:

コメントを投稿