The Nameless City

何故か製薬やSAS関連のブログ、の予定。

独自のエラーをログに書く際に考える事。

SASが標準で作成するログのパターンに合わせるかどうか

「ERROR:...」「WARNING:」「NOTE:」みたいなのに合わせるかどうか。
あと、SYSERR等を取り扱うかどうか。


SAS DMSの中で色が違うだけでいい、というのであれば、ログにputステートメント等で「ERROR:...」と書くだけでいいです。
システム的にエラーコードを吐かせたいのであれば、abortステートメントでretern入れるとかが必要になってきます。この辺りは、SASをバッチ実行的に組み込む時には必要な知識になるのですが、普段遣いであれば、abortとかを使わない方が幸せかも。


で、よくよく考えると、「システムが出しているERRORやWARNINGと合わせるのは有用か?」という事は考えておいた方がいいかとも思います。
目立たせる方法は一通りではないので。

ABORTステートメントは、SAS.EXEのプロセスに影響を及ぼします。

何も引数をつけないABORTなら、単にデータステップを止めSASエラーを発生させるだけだったかなと。
ただ、RETURNであるとかABENDであるとかをつけると、SAS DMSだとプロセスが終了する憂き目を味わう事になります。


バッチモードとSAS DMSのモードでは挙動が異なる事もあって、開発もかなり面倒です。
サーバSASとかSAS Studioとかでは避けた方がいいと思います。ログが表示される事なく死んだりします。
そうでなくとも、SASはエラーを上手くハンドリングする事が出来ません。SYNTAXCHECK、DMSSYNCHK等のオプションで、SASエラーにあった場合の挙動を変更する事は出来るのですが。
代わりと言ってはなんですが、データ操作中の例えば0除算だったりしても、結果が0除算で欠損値になるというだけで、エラーは発生しづらいです。

実行プログラムの中で「ERROR:」を直接書かないでログに「ERROR:」を出す話。

小ネタですが。

data _NULL_ ;
  putlog 'ERROR' ':' 'エラーです' ;
run ;

と、「ERROR」と「:」をプログラム内では分割しておくと、検索とかで変に引っかからずに済みます。DI StudioだったかCSTだったかのマクロでこんな事やってるの見かけた記憶があります。