我在一个SAS项目中有几个程序,即程序A - >程序B - > ....我想使用宏变量在程序之间建立依赖关系.
程序A将处理少量数据步骤和过程.如果程序A中的任何过程执行时出错,我想运行程序C.否则运行程序B.
这似乎很棘手,因为syserr在每个步骤边界处重置.如果程序A中的第一个数据步骤执行错误而其余步骤没有执行,则在程序A结束时syserr仍然是0.一旦发生错误,我需要宏变量值为0以外的值,并且值可以保持到程序结束.
如果程序依赖性基于其他标准(比如值),则用户定义的宏变量可以处理它.对于与系统错误相关的事情,我认为SAS已经有了可以做到的诀窍.但除了之外我找不到任何其他东西syserr,这似乎没什么帮助.
注意:我发现此SAS在第一次出错时停止.但基本上是在每个数据步骤后检查错误状态.如果程序A包含50多个数据步骤,这听起来很疯狂.
简单 - 只需使用syscc!
SYSCC是一个读/写自动宏变量,使您可以重置作业条件代码并从阻止后续步骤运行的条件中恢复.
请参阅文档,但我想你会找到类似的东西:
%if &syscc > 4 %then %do;
%inc "/mypath/pgmB.sas";
%end;
%else %do;
%inc "/mypath/pgmA.sas";
%end;
Run Code Online (Sandbox Code Playgroud)
的最高值syscc被跨越步骤边界保留,始终以一个整数来表示错误级别.示例值:
SYSCC的值是:
请注意,有一些东西它不会捕获,但为了提高它的有效性,您可以使用:
options errorcheck=strict;
Run Code Online (Sandbox Code Playgroud)
最后 - 你提到"sas项目",如果这意味着你使用的是Enterprise Guide,那么请注意本使用说明中的建议.