NOTE: 変数◯は初期化されていません。~SASログ入門 #1~
SASのログの中には、バグになるかもしれない / バグかもしれないメッセージが、ERROR や WARNING ではなく、通常メッセージの NOTE で出力することがあります。そのメッセージを見逃してしまうと、後々、バグになる・・・かもしれません。
では、チェックすべき NOTE: メッセージとはどんなものなのか。「きっと役立つ、バグになりそうなNOTE:のチェック | SAS Utility」にて、そういったNOTE: メッセージの一覧がご紹介されています。これらのメッセージについて、ひとつずつ、メッセージを出力させるためのSASプログラムと簡単な解説を添えてご紹介していきたいと思います。
今回、ご紹介しますのは、「NOTE: 変数◯は初期化されていません。」です。
59 data TEST ;
60 A = B ;
61 run ;
NOTE: 変数Bは初期化されていません。
NOTE: データセットWORK.TESTは1オブザベーション、2変数です。
NOTE: DATAステートメント処理(合計処理時間):
処理時間 0.00 秒
CPU時間 0.01 秒
変数として、まだ作成されていない B を変数 A に代入しようとしているため、該当のメッセージが出力されています。このとき、dataステップの実行は止まらず、後続の処理が実行され、データセット TEST は作られてしまいます。変数 A, B には欠損値が格納されて出力されます。
上記の動作はデフォルトでの動作で、初期化されていない変数があったときの動作は、オプションで設定することができます。そのオプションが、varinitchk オプションです。nonote, note(デフォルト), warning, error の4種類が設定できます。
| varinitchk 設定値 | ログメッセージ | dataステップ |
|---|---|---|
| nonote | なし | 続行 |
| note (デフォルト) | NOTE: | 続行 |
| warning (省略: warn) | WARNING: | 続行 |
| error | ERROR: | 中断 |
59 %macro VAR_NO_INIT ;
60 data TEST ;
61 A = B ;
62 putlog "dataステップとまっていない。" ;
63 run ;
64 %mend VAR_NO_INIT ;
65
66 /* 処理は続行。ログ出力なし */
67 options varinitchk=nonote ;
68 %VAR_NO_INIT ;
dataステップとまっていない。
NOTE: データセットWORK.TESTは1オブザベーション、2変数です。
NOTE: DATAステートメント処理(合計処理時間):
処理時間 0.00 秒
CPU時間 0.00 秒
69 /* 処理は続行。NOTEメッセージ出力 (デフォルト) */
70 options varinitchk=note ;
71 %VAR_NO_INIT ;
NOTE: 変数Bは初期化されていません。
dataステップとまっていない。
NOTE: データセットWORK.TESTは1オブザベーション、2変数です。
NOTE: DATAステートメント処理(合計処理時間):
処理時間 0.01 秒
CPU時間 0.02 秒
72 /* 処理は続行。WARNINGメッセージ出力 */
73 options varinitchk=warning ;
74 %VAR_NO_INIT ;
WARNING: 変数Bは初期化されていません。
dataステップとまっていない。
NOTE: データセットWORK.TESTは1オブザベーション、2変数です。
NOTE: DATAステートメント処理(合計処理時間):
処理時間 0.00 秒
CPU時間 0.00 秒
75 /* 処理は中断。ERRORメッセージ出力 */
76 options varinitchk=error ;
77 %VAR_NO_INIT ;
ERROR: 変数Bは初期化されていません。
NOTE: エラーが発生したため、このステップの処理を中止しました。
WARNING: データセットWORK.TESTは未完成です。このステップは、0オブザベーション、
2変数で停止しました。
WARNING: このステップを中止したため、データセットWORK.TESTを置き換えていません。
NOTE: DATAステートメント処理(合計処理時間):
処理時間 0.00 秒
CPU時間 0.01 秒
「NOTE: 変数◯は初期化されていません。」に関しては、オプションで動作も変えられるので、発見しやすいメッセージですね。
コメント
コメントを投稿