複数の変数に欠損値をセット(初期化)する

[OS] ALL
[リリース] SAS 9.1以降
[キーワード] Base, DATA, function, CALL MISSING

[質問]

複数の変数に欠損値をセットするときに、ひとつずつセットしたり、DOループを使用したりしていますが、簡略化する方法はありますか。

[回答]

SAS9以降では、CALL MISSINGルーチンを使用して、複数の変数に欠損値をセットすることができます。
CALL MISSINGルーチンの書式は、以下のとおりです。


  CALL MISSING(変数名1<,変数名2, ...>);

引数には文字変数と数値変数を同時に指定できます。数値変数には欠損値、文字変数にはスペースがセットされます。
「OF 変数名1 - 変数名n」という簡略表記もできます。

使用例


  DATA sample;                    /* サンプルデータセット作成 */
    INPUT id $ var1-var3;
  CARDS;
  A001 10 0.1 100
  A001 20 0.1 100
  A002 20 0.2 200
  A002 30 0.1 100
  A003 40 0.3 300
  A003 15 0.3 300
  ;
  RUN;

  DATA sum(DROP=var1-var3 i);
    SET sample;
    BY id;
    RETAIN s_var1-s_var3 0;
    ARRAY s_var(3);
    ARRAY var_(3) var1-var3;
    SET sample;
    BY id;
    DO i=1 TO DIM(s_var);
      s_var(i) + var_(i);
    END;
    IF last.id THEN DO;
      OUTPUT;
      CALL MISSING(OF s_var1-s_var3); /* CALL MISSINGルーチン */
    END;
  RUN;