ずいぶん前にBASIC言語を使っていて、「ON ERROR GOTO XXX」と最初に書いておけば、エラーが起こればXXXに飛んでくれました。
それで、SASで不規則なエラーが出る場合に、「ON ERROR GOTO XXX」的なことができれば、エラーの原因を特定しやすいと考えています。
BASICはインタプリタ言語なのでそれができるのではないかと思っていましたが、先ほどVBAでも「ON ERROR GOTO XXX」があると聞き、
もしかしたらSASでもそれに相当する機能があっても良いのではないかと思うようになりました。
つきましては、SASでも「ON ERROR GOTO XXX」に相当する方法がありましたらお教えください。よろしくお願いします。
追記:&syserrが0でなければプログラムを終了する次のようなマクロ%Errを作ってみました。
しかし、この方法だと、要所要所に%Errを書いておかなければならないのが残念です。
%macro Err( abort=1 )
%if 0<&syserr %then %do;
%put ### %str(E)RROR &syserr: &syserrortext. ###;
%if &Abort=1 %then %do;
%abort cancel; *以降のプログラムを実行しないで終了します;
%end;
%end;
%mend;
こんにちは。
SASに同等の機能はないですね。
エラー発生時に終了するだけならERRORABENDオプションが使えます。
ウィンドウ環境でSASを起動している場合、DMSSYNCHKオプションを有効にすればエラー発生時に
構文チェックモードに移行できます。これはバッチ実行時と同様の挙動になります。
構文チェックモードが何かなどは、エラー処理とデバッグ が参考になるかと思います。
yu_sasさん
いつもありがとうございます。
errorabendおよびdmssynchkオプションの有用な使用方法を検討してみます。
まだ検討はできていませんが、errorabendオプションでSASを自動的に終了したときの日時がわかれば、Process Monitorにでてくる時間と照らし合わせて異常終了した原因となるアプリを推定できると考えています。
このerrorabendオプションで、SASが終了した時間はわかるでしょうか?
scdentさま
こんにちは。
マクロを使われているのでしたら、
マクロの先頭に
data _null_;
date=date(); time=time();
datetime=put(date,yymmdd10.)||'T'||put(time,tod.);
put datetime;
run;
と書いておけば、異常終了しているマクロの回転付近の日時が
ログの中に取得できるのではないかと思います。
もちろんSASログを外部ファイルに残しておく必要がありますが。
sasoneさん
やはり、要所々々に日時を表示するしかないですね。
%put %sysfunc(datetime( ),datetime19.);
を入れることにします。ありがとうございました。
scdentさま
度々ですみません。
プログラムの全工程を外部ログに出力しておき、errorabendで異常終了したとき
ログの記録がそこで途切れてログファイルが保存されるので、そのログファイル自体の
更新日時(作成日時)を見れば異常発生時刻が判るのではないでしょうか。
options errorabend;
proc printto log=".\ログ.lst" new;
proc printto; run;
Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.
Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.