2014年3月20日木曜日

欠損値の置き換え。



SASのFAQや色々なサイトですでに紹介されていますが、
面白いなぁと思ったので、こちらでも紹介したいと思います。


指定した数値変数について、欠損値をゼロや任意の値に置き換えてくれる小技です。

*** サンプルデータ ;
data DT1;
input A B C;
cards;
1 . 2
3 4 .
. . 5
;

データセットDT1
A   B   C
1    .    2
3   4    .
.     .    5




上記に対して、指定した数値変数が欠損値だったら「0」に置き換えたい場合、
以下のようにARRAYを使って書くのがスタンダードだと思います。

data DT2;
  set DT1;
  array AR(*) A B C;
  do i = 1 to dim(AR);
     if AR(i) =. then AR(i) = 0;
  end;
run;

データセットDT2
A   B   C
1    0    2
3    4    0
0    0    5

このプログラムで何をやってるかは以下記事を見ていただくと理解が深まると思います。
配列(ARRAYステートメント)入門





そしてここから本題。面白いと思ったのが、以下のやり方。

proc stdize data=DT1 reponly missing=0 out=DT3;
   var A B C;
run;

STDIZEプロシジャは、データの標準化をするSTANDARDプロシジャの進化版みたいなもの。
「reponly」と「missing=」オプションを指定することで、欠損値の置き換えのみを行ってくれる。


こういうプロシジャの面白い使い方をどんどん発掘していきたいです。


0 件のコメント:

コメントを投稿