欠損値を任意の値に置き換える

[OS]ALL
[リリース] 8.1, 8.2
[キーワード] MISSING, MISSING VALUE, ARRAY

[質問]

処理の都合で、欠損値の変数に対して別の値を入れたいと考えています。何か方法はあるでしょうか。

[回答]

SAS System 8eでは欠損値を判定するためのMISSING関数が追加されました。これにより文字変数、数値変数を問わず、容易に欠損値を判定できます。

MISSING(変数名)
※戻り値が「1」ならその変数は欠損値

このMISSING関数とARRAYステートメントを使って、欠損値の変数を任意の値に置き換えるプログラム例は、次のとおりです。

/* データ内に存在する数値変数の欠損値に対しては「0」で穴埋めし、*/
/* 文字変数に対しては「欠損」という文字で穴埋めをします。*/

 DATA work.dat2;
   SET work.dat1;

/* DOループを使うための配列を定義する */
   ARRAY nvar _numeric_;
   ARRAY cvar _character_;

   /* 数値変数の欠損値を調べる */
   DO i=1 TO DIM(nvar);
      IF MISSING(nvar[i]) THEN DO;
         nvar[i]=0;
      END;
   END;

   /* 文字変数の欠損値を調べる */
   DO i=1 TO DIM(cvar);
      IF MISSING(cvar[i]) THEN DO;
         cvar[i]='欠損値';
      END;
   END;
   DROP i;
 RUN;

なお、V6の場合はMISSING関数が利用できませんので、「欠損値を0に置き換える」を参考に対応してください。