SAS喜欢在发出警告和错误后继续处理,因此我经常需要在日志中向后滚动页面以查找问题.有没有更好的办法?我希望它在第一个错误或警告出现后立即停止,以便我可以修复它并再试一次.
RWi*_*ill 16
之前建议使用ERRORS = 1选项,但这只会阻止ERROR消息写入日志.我建议另一个系统选项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以外的任何位置终止.
我最近一直在使用%runquit宏。对于批处理作业和交互式会话都很好地工作(不会关闭会话,只是停止运行代码)。
资料来源:http : //www.cpc.unc.edu/research/tools/data_analysis/sas_to_stata/sas-macros/runquit.html
要使用它,您基本上%runquit;在任何数据步骤或PROC的末尾键入,而不是键入常规run或quit语句。
码:
%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)
在阅读代码时,它并不是很漂亮,但确实使调试变得容易得多。