BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
scdent
Obsidian | Level 7

ずいぶん前に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;

 

1 ACCEPTED SOLUTION

Accepted Solutions
scdent
Obsidian | Level 7
sasoneさん

私の抱えている問題に対しての十分な回答です。
本当にありがとうございました!

View solution in original post

7 REPLIES 7
yu_sas
SAS Employee

こんにちは。

 

SASに同等の機能はないですね。

 

エラー発生時に終了するだけならERRORABENDオプションが使えます。

ウィンドウ環境でSASを起動している場合、DMSSYNCHKオプションを有効にすればエラー発生時に

構文チェックモードに移行できます。これはバッチ実行時と同様の挙動になります。

 

構文チェックモードが何かなどは、エラー処理とデバッグ が参考になるかと思います。

scdent
Obsidian | Level 7

yu_sasさん

 

いつもありがとうございます。

 

errorabendおよびdmssynchkオプションの有用な使用方法を検討してみます。

scdent
Obsidian | Level 7

まだ検討はできていませんが、errorabendオプションでSASを自動的に終了したときの日時がわかれば、Process Monitorにでてくる時間と照らし合わせて異常終了した原因となるアプリを推定できると考えています。

このerrorabendオプションで、SASが終了した時間はわかるでしょうか?

sasone
Quartz | Level 8

scdentさま

 

こんにちは。

 

マクロを使われているのでしたら、
マクロの先頭に

data _null_;
  date=date(); time=time();
  datetime=put(date,yymmdd10.)||'T'||put(time,tod.);
  put datetime;
run;

と書いておけば、異常終了しているマクロの回転付近の日時が
ログの中に取得できるのではないかと思います。
もちろんSASログを外部ファイルに残しておく必要がありますが。

 

scdent
Obsidian | Level 7

sasoneさん

 

やはり、要所々々に日時を表示するしかないですね。

 

%put %sysfunc(datetime( ),datetime19.);

を入れることにします。ありがとうございました。

 

sasone
Quartz | Level 8

scdentさま

 

度々ですみません。

 

プログラムの全工程を外部ログに出力しておき、errorabendで異常終了したとき
ログの記録がそこで途切れてログファイルが保存されるので、そのログファイル自体の
更新日時(作成日時)を見れば異常発生時刻が判るのではないでしょうか。

options errorabend;
proc printto log=".\ログ.lst" new;


proc printto; run;
scdent
Obsidian | Level 7
sasoneさん

私の抱えている問題に対しての十分な回答です。
本当にありがとうございました!

sas-innovate-2024.png

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.

 

Register now!

Discussion stats
  • 7 replies
  • 3266 views
  • 1 like
  • 3 in conversation