有没有办法让SAS在第一次警告或错误时停止?

Two*_*ter 21 sas

SAS喜欢在发出警告和错误后继续处理,因此我经常需要在日志中向后滚动页面以查找问题.有没有更好的办法?我希望它在第一个错误或警告出现后立即停止,以便我可以修复它并再试一次.

RWi*_*ill 16

之前建议使用ERRORS = 1选项,但这只会阻止E​​RROR消息写入日志.我建议另一个系统选项ERRORABEND,它将阻止程序进一步处理大多数错误.我不知道由于警告而终止处理的选项,但我认为您可以添加如下的宏来停止处理.

%macro check_for_errors;
   %if &syserr > 0 %then %do;
      endsas;
   %end;
%mend check_for_errors;

data test1;
    <data step code>
run;
%check_for_errors;
Run Code Online (Sandbox Code Playgroud)

您可以在程序的每个步骤之后重复宏调用,并且应该在错误代码为0以外的任何位置终止.

  • 是否有诸如ERRORABEND选项之类的东西不会引起与SAS服务器的断开连接?我使用EG连接到外部unix服务器,虽然最好在出现第一个错误时停止处理,但是ERRORABEND关闭与服务器的连接,这需要一段时间才能在下次运行时重新建立。 (3认同)

Rob*_*dge 5

我最近一直在使用%runquit宏。对于批处理作业和交互式会话都很好地工作(不会关闭会话,只是停止运行代码)。

资料来源:http : //www.cpc.unc.edu/research/tools/data_analysis/sas_to_stata/sas-macros/runquit.html

要使用它,您基本上%runquit;在任何数据步骤或PROC的末尾键入,而不是键入常规runquit语句。

码:

%macro runquit;
  ; run; quit;
  %if &syserr. ne 0 %then %do;
     %abort cancel;
  %end;
%mend runquit;
Run Code Online (Sandbox Code Playgroud)

数据步用法:

data something; 
 * do some stuff;
%runquit;
Run Code Online (Sandbox Code Playgroud)

PROC用法:

proc sql; 
  * do some stuff;
%runquit;
Run Code Online (Sandbox Code Playgroud)

在阅读代码时,它并不是很漂亮,但确实使调试变得容易得多。