2014年3月6日木曜日

SORTプロシジャの「NODUP」と「NODUPKEY」の違い。


昔、「NODUP」を「NODUPKEY」の省略形だと勘違いして使ったら、思ったとおりの動きをしてくれなくて困ったことがありました。 

今回は「NODUP」と「NODUPKEY」を混同しないようにするための注意喚起になります。
「NODUP」は、最新のリファレンスから記載が削除されていたので詳しい挙動は不明。利用は非推奨。





* Sample data ;
data DT1;
input A B$;
cards;
1 a
1 b
1 a
;

A B 
  1  
  a  
  1  
b  
  1
a  

* 「NODUP」を使ってみる ;
proc sort data=DT1 out=DT2 nodup;
  by A;
run;

期待した結果
A B 
  1  
  a  



実際の結果
A B 
  1  
  a  
  1  
b  
  1
a  


解説

①「NODUP」は「NODUPRECS」を省略した書き方です。

これは、
BY変数で並べ替えた後、1つ前のレコードが全変数同じ値だったら、現レコードを削除する。
という動きをします。

②ここで注意するのは、
全変数同じ値のレコード(サンプルデータでは1行目と3行目)が存在していても、
BY変数で並べ替えた後、前後にレコードが隣り合っていないと削除していない点です。




似たオプション「NODUPKEY」の詳細は以下のリンクを参照下さい。
SORTプロシジャで重複レコードを削除・抽出する。


0 件のコメント:

コメントを投稿