SYSERR自动宏变量

Lov*_*ust 3 sas

我在一个SAS项目中有几个程序,即程序A - >程序B - > ....我想使用宏变量在程序之间建立依赖关系.

程序A将处理少量数据步骤和过程.如果程序A中的任何过程执行时出错,我想运行程序C.否则运行程序B.

这似乎很棘手,因为syserr在每个步骤边界处重置.如果程序A中的第一个数据步骤执行错误而其余步骤没有执行,则在程序A结束时syserr仍然是0.一旦发生错误,我需要宏变量值为0以外的值,并且值可以保持到程序结束.

如果程序依赖性基于其他标准(比如值),则用户定义的宏变量可以处理它.对于与系统错误相关的事情,我认为SAS已经有了可以做到的诀窍.但除了之外我找不到任何其他东西syserr,这似乎没什么帮助.

注意:我发现此SAS在第一次出错时停止.但基本上是在每个数据步骤后检查错误状态.如果程序A包含50多个数据步骤,这听起来很疯狂.

All*_*owe 5

简单 - 只需使用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的值是:

  • 0没有错误没有警告
  • 4是警告
  • 大于4表示发生错误

请注意,有一些东西它不会捕获,但为了提高它的有效性,您可以使用:

options errorcheck=strict;
Run Code Online (Sandbox Code Playgroud)

最后 - 你提到"sas项目",如果这意味着你使用的是Enterprise Guide,那么请注意本使用说明中的建议.