V9から拡張されたSORTプロシジャのオプションを紹介します。
下記のようなSASデータセット『temp.sas7bdat』があるとします。
このデータを変数「key1」でユニークにする場合、
* ①元のデータを残す場合 ;
proc sort data = temp out = temp2 nodupkeys ;
by key1 ;
run ;
* ②元のデータから重複レコードを削除する場合 ;
proc sort data = temp nodupkeys ;
by key1 ;
run ;
のような記述になるかと思います。
出力イメージは
な感じですね。
では、重複削除されたレコードだけのデータを作る場合はどうでしょうか。
出力イメージは
な感じです。
今までですと、変数「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 ;
実行結果のログは以下の通りです。
7OBSのデータが、3OBSと4OBSのデータに分かれて出力されます。
もしも、入力元のデータ(この場合は「temp.sas7bdat」)をそのまま残したければ
proc sort data = temp out = temp_uniq dupout = temp_dup nodupkeys ;
by key1 ;
run ;
のように、「OUT=」オプションも併記します。
ちなみに、V8で同じ記述で実行すると
のように、完全なシンタックスエラーになります。
利用できるシチュエーションをいろいろと模索してみましたが、
ん~、デバッグ作業ぐらいですかね。
任意のキーでユニークの状態が前提のデータを対象に処理をかけてみて、
重複レコードがあった場合に、その内容が可視化できるといったような…。
いずれにせよ、知識として覚えておいて損はないと思いますので、
利用機会があれば試してみて下さい。
0 件のコメント:
コメントを投稿