2015年4月14日火曜日

「変数○○は初期化されていません」のメッセージは侮れない。



以下をご覧ください。

data DT1;
   length A 8.;
run;

ログ


ログにNOTEとして 「変数Aは初期化されていません」 と出ます。

これは「変数が作成されたのになにも値が与えられていない」ときに出てくるログです。
上の例では「変数Aを定義して作成したのに、なにも値が与えられていない」ということですね。


このように初期化されていない変数は、変数の枠だけ作られて、中身は欠損値になります。
ERRORとかWARNINGじゃないし放っとくか、となるかもしれませんが、このメッセージが役に立つ場合もあります。



たとえば、以下のプログラムを実行して、ログを見てみると、、

data DT2;
   length AAABBB 8.;
   AAABB = 1;
run;

ログ
NOTE: 変数AAABBBは初期化されていません。


初期化されていません」と出てしまいました。
あれ?「length AAABBB 8.」で属性定義した後、ちゃんと「AAABB = 1」で値をセットしてるのに、、、



しかしプログラムをよく見ると、

length AAABBB 8.;
AAABB = 1;


Bの数を1個間違えて書いてたことに気づきます。
このように変数名のタイプミスをしてしまった時などに、この初期化メッセージが気づかせてくれる事があるので、侮れません。
ていうか、私自身、結構やってしまうミスなので、いつも助けられてます。



ちなみに「属性定義だけして、中身は欠損値でいいんだけど、、初期化メッセージが出るのはヤダ。。」といった場合は、欠損値を与える事の出来る CALL MISSING が便利です。

data DT3;
   length A 8. B C $10.;
   call missing( A, B, C );
run;




続く(VARINITCHKオプションで、「変数○○は初期化されていません」をWARNINGやERRORにする。


0 件のコメント:

コメントを投稿