欠損値の大小関係

マニアックな小ネタ。

if ○○<. then FL="Y";else Fl="N";

という条件が真になる○○の値はなんでしょう?

はい、正解は

data a;
x=._;
if x<. then FL="Y";else FL="N";
run;







特殊欠損値の「._」でした。

SASではユーザーが自由に欠損値を区別できるために、.A~.Zと._の特殊欠損値を使えるようになっています。例えば、未観測の欠損と、計算不能の欠損を区別したいとか。
正直、知らない人が多いので欠損のカテゴリを分けたいなら別途カテゴリ変数作って分けた方がいい気もしますが…。
putとかすると[.A]は普通に文字型のAとかになるので、特殊欠損知らないで混乱している人をよく見ます。

ちなみに最初の話に戻りますが、「.」より小さいのは「._」だけです。特殊欠損の大小関係を確認してみましょう

data a;
do x=.,._,.A,.B,.C,.D,.E,.F,.G,.H,.I,.J,.K,.L,.M,.N,
      .O,.P,.Q,.R,.S,.T,.U,.V,.W,.X,.Y,.Z,-9999,0,1;
 output;
end;
run;

大きい順に並べてみると

proc sort data=A out=B;
 by descending x;
run;







































となります。

公式が説明している順番とも一致してますね

欠損値の大小って言われてもねって感じですね