2007年3月1日木曜日

SORTプロシジャのV9での拡張




V9から拡張されたSORTプロシジャのオプションを紹介します。




下記のようなSASデータセット『temp.sas7bdat』があるとします。


 f:id:n-insight:20070228141232g:image



このデータを変数「key1」でユニークにする場合、



 * ①元のデータを残す場合 ;


 proc sort data = temp out = temp2 nodupkeys ;


  by key1 ;


 run ;



 * ②元のデータから重複レコードを削除する場合 ;


 proc sort data = temp nodupkeys ;


  by key1 ;


 run ;



のような記述になるかと思います。


出力イメージは


 f:id:n-insight:20070228141259g:image


な感じですね。



では、重複削除されたレコードだけのデータを作る場合はどうでしょうか。


出力イメージは


 f:id:n-insight:20070228141321g:image


な感じです。



今までですと、変数「key1」でSORTをした後で、



 data temp_dup ;


  set temp ;


  by key1 ;


  if ^first.key1 and ^last.key1 ;


 run ;



な感じで記述するのが一般的な手法です。




これを、V9で拡張されたオプション「DUPOUT=」を使うと以下のように記述できます。



 proc sort data = temp dupout = temp_dup nodupkeys ;


  by key1 ;


 run ;



実行結果のログは以下の通りです。


 f:id:n-insight:20070228182829g:image


7OBSのデータが、3OBSと4OBSのデータに分かれて出力されます。



もしも、入力元のデータ(この場合は「temp.sas7bdat」)をそのまま残したければ



 proc sort data = temp out = temp_uniq dupout = temp_dup nodupkeys ;


  by key1 ;


 run ;



のように、「OUT=」オプションも併記します。


 f:id:n-insight:20070228183801g:image





ちなみに、V8で同じ記述で実行すると


 f:id:n-insight:20070228190258g:image


のように、完全なシンタックスエラーになります。





利用できるシチュエーションをいろいろと模索してみましたが、


ん~、デバッグ作業ぐらいですかね。



任意のキーでユニークの状態が前提のデータを対象に処理をかけてみて、


重複レコードがあった場合に、その内容が可視化できるといったような…。




いずれにせよ、知識として覚えておいて損はないと思いますので、


利用機会があれば試してみて下さい。


0 件のコメント:

コメントを投稿

ネイチャーインサイト サイトリニューアル&NIBLOGの引っ越し

ご連絡が遅くなりましたが、 ネイチャーインサイトの際とがリニューアルしました。 https://www.n-insight.co.jp/ それに伴い、NIBLOGも引っ越しすることになりました。 https://www.n-insight.co.jp/niblog/ ...