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: 変数◯は初期化されていません。」に関しては、オプションで動作も変えられるので、発見しやすいメッセージですね。
コメント
コメントを投稿