欠損値と無効な数値データを区別したい

[OS] ALL
[リリース] ALL
[キーワード] Base, INVALIDDATA

[質問]

欠損値(.)や無効なデータ(たとえば「#」)が含まれているデータを、数値変数としてSASデータセットにしています。
SASでは、欠損値、無効なデータともに、欠損値として認識されます。これを区別したいのですが、可能でしょうか。

[回答]

INVALIDDATA=システムオプションを利用すると、無効な数値データが現れた際に、任意の変数に値を割り当てることができます。
INVALIDDATA=システムオプションには、アルファベット(大文字または小文字)、ピリオド(.)、またはアンダーバー(_)のいずれか1文字を指定します。なお、デフォルト値はピリオドです。
以下のサンプルプログラムをご確認ください。

OPTIONS INVALIDDATA='E';

DATA data1;
  INPUT num1 num2;
CARDS;
. 2
3 4
# 5
;
RUN;

PROC PRINT DATA=data1;
RUN;
上記のプログラムの実行結果は、下記のとおりです。
OBS    num1    num2
  1     .         2
  2     3         4
  3     E         5
なお、無効な数値データのみを抽出する場合は、以下のようにWHEREステートメントを記述します。
DATA result;
  SET data1;
  WHERE num1=.E;
  * IF num1=.E;
RUN;