ラベル 関数: CMISS の投稿を表示しています。 すべての投稿を表示
ラベル 関数: CMISS の投稿を表示しています。 すべての投稿を表示

2017年7月12日水曜日

My Favorite SAS Functions (7) CMISS関数



第7回目は、CMISS関数。
指定した変数のうち、欠損値の数を返してくれます。
おススメポイントが、数値変数・文字変数どちらも指定可能という点です。


基本的な使用例は以下記事で紹介済みなので、そちらをご覧ください。
欠損値のチェックを簡単に行う。



では、CMISSを使わない場合と、使う場合とでプログラムを比較してみましょう。





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

data DT1;
   X1=1;
   X2=.;
   X3="aaa";
run;

 X1 
 X2 
X3
   1    .  aaa 


この変数 X1~X3 のうち、いずれかが欠損値の場合、変数Yにフラグ「1」を立てたいとします。
まずはCMISSを使わない場合。

Before
data DT2;
   set DT1;
   if X1=. or X2=. or X3="" then Y=1;
run;
 X1 
 X2 
X3
 Y 
   1    .  aaa   1  


そしてCMISSを使う場合。

After
data DT2;
   set DT1;
   if cmiss(X1,X2,X3)>0 then Y=1;
run;
 X1 
 X2 
X3
 Y 
   1    .  aaa   1  


今回の例だとCMISSを使った成果が見えづらいですが、変数の数が多いと非常にスッキリとした文になります。


CMISSは便利なのに知名度が低いので、すごい勿体ない。




記事一覧

1.CATS関数
7.CMISS関数

2013年12月10日火曜日

欠損値のチェックを簡単に行う。


CMISS関数」は、欠損値の数をカウントしてくれます。
数値変数・文字変数、どちらも指定可能です。

ロジカルチェックやデータクリーニングの際に重宝します。
以下に使用例をまとめてみた。


サンプルデータ

data DT1;
input X1 X2 X3$;
cards;
1 2 aa
3 . bb
5 . .
. . .
;
run;


使用例

/* 欠損値の数を取得 */
data DT2;
  set DT1;
  Y = cmiss(X1,X2,X3);
run;


/* いずれかが欠損値のOBSを特定 */
data DT3;
  set DT1;
  if cmiss(X1,X2,X3) > 0 then FLG=1;
run;


/* すべて欠損値のOBSを特定 */
data DT3;
  set DT1;
  if cmiss(X1,X2,X3) = 3 then FLG=1;
run;