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

コメント

このブログの人気の投稿

日付フォーマットでない文字項目をSAS日付に変換するときにログ出力されるメッセージを抑制したい - SAS

Linuxコマンド: date で◯か月前 / ◯か月後を取得するときの注意

データセット(.sas7bdatファイル)の文字コードを取得したい - SAS