文字型(数値型)変数が全て欠損だった場合のフラグ立て

あるデータセットに含まれる文字型変数が全て欠損値だった場合に0,1フラグの1を立てるにはどうしたらいいですかという質問をいただきました。

多分、やり方は多くあると思いますが、僕が一番に思いついたものを書きます。
ひねりのない方法です。
ついでに今回は数値型、文字型両方についてやってみます。

まず、以下のようなデータセットがあったとします

data Q1;
A=1;B='い';C=3;D='A';output;
A=.;B='ろ';C=.;D='B';output;
A=2;B='';C=4;D='';output;
A=.;B='';C=.;D='';output;
run;










数字変数が全てnullの場合はFL1に、文字変数が全てnullの場合はFL2に0,1を入れるとするならば

data A1;
set Q1;
 FL1=missing(sum(of _numeric_));
 FL2=missing(cats(of _character_));
run;










OK。

missing関数は指定した引数がnullなら1,違うなら0を返す関数です。
ただし、引数は1つしか指定できないので、少しだけ工夫します。

数字なら、全部足したものがnullなら、すなわち全数値変数がnullということで、
文字なら、空白を含めずに連結したものがnullであればすなわち全文字変数がnullということです。


ちなみにcmiss関数という型を問わずに、しかも引数に複数変数の指定が可能で、欠損値の数をカウントしてくれる便利関数があるので、それと配列を組み合わせれば同様のことが可能です。

SAS忘備録に関連する記事があるので、これを見ればすぐに応用できます。
「欠損値のチェックを簡単に行う。」
http://sas-boubi.blogspot.jp/search/label/%E9%96%A2%E6%95%B0%3A%20CMISS








0 件のコメント:

コメントを投稿