2017年7月13日木曜日

欠損値の判定とテクニック【IS NULL】【IS MISSING】【MISSING関数】




WHEREステートメントに、「変数が欠損値」という条件を入れたい場合、以下のように書く方が多いと思います。

・数値変数の場合
  where X = .;

・文字変数の場合
  where X = ””;





別の書き方として、以下のように書くことも出来ます。
  where X is null;        /* is null */
  where X is missing;  /* is missing */
  where missing(X);    /* missing関数 */


変数が欠損値”以外”の場合はnotをつけます。
  where X is not null;        /* is null */
  where X is not missing;  /* is missing */
  where not missing(X);    /* missing関数 */


・この3つの書き方は変数が数値型だろうが文字型だろうが、関係なく通るので便利です。
・ただし、「is null」と「is missing」は、WHEREステートメントでした使えない書き方です。

IF文とかで使いたい場合は、missing関数が使えます。
  if missing(X) then Y=1;




この書き方が役に立つ例として、以下のようなマクロを組む場合です。
%macro TEST( DS, VAR );

   data DT1;
      set &DS;
      where &VAR is null;
   run;

%mend;

上記のマクロ、なんてことはないマクロですが、「is null」という書き方を使わないと、プログラム書くのがすごい面倒です。

というのも、マクロ変数 VAR に指定した変数が、
・数値変数の場合は 「where &VAR =.;」
・文字変数の場合は 「where &VAR ="";」
というように、指定された変数の型によって、実行するWHEREステートメントを分岐するように書かなきゃいけないからです。


状況によって使い分けると便利です。

0 件のコメント:

コメントを投稿