2015-02-11 30 views
2

我试图停止SAS程序的处理,如果某个条件已被满足。我有一个宏变量创建,如果该变量是> 0.5,那么我想要一个硬停止的程序。有条件终止SAS

当前程序看起来像

data a1; 
set Server.a2; 
run; 

%macro1(a1); 

%macro2(_t1); /* _t1 generated from %macro1. 

data _null_; 
if %stopit(_t2) > 0.5 then `?????`; /* _t2 generated from %macro2. 

run; 

%macro3; 

%macro4; 

如果%macro(_t2) > 0.5,我想阻止整个程序不运行,其余(%macro3和%macro4)

+0

只是为了澄清,你在批处理模式或交互模式下运行? – Joe 2015-02-11 15:32:44

回答

1

我个人倾向于始终使用abort cancel;(或%abort cancel;),因为它在交互模式和批处理模式下运行时提供了灵活性。

以交互方式取消提交的代码(但保留会话打开状态)。

在批处理模式下,它将停止整个作业。

还有其他选项。您可以在文档here中找到完整列表。

还有endsas命令,但我不喜欢这样做,因为它关闭了当前的交互式会话(并且它更加有条件地执行)。

下面是一个例子:

%let x = 1; 

data _null_; 
    if &x then abort cancel; 
    put "This won't print"; 
run; 

%put This won't print either; 

日志中的结果将显示:

ERROR: Execution terminated by an ABORT CANCEL statement at line 4 column 14. 
_ERROR_=1 _N_=1 
+0

对于我的情况'abort abend'比较好? “中止取消”只会清除当前提交的程序。但其他后续提交的程序不受影响。 – Lovnlust 2015-02-12 05:59:40

+0

@rbet嗯,如果你手动提交更多的代码和交互式会话,唯一的办法就是随后提交任何东西。使用abend将关闭SAS会话。我无法想象当你在交互模式下运行时你想要的。但是测试他们两个,看看什么最适合你的情况。 – 2015-02-12 15:53:58

2

使用下面的语句:

abort abend; 
+0

这个答案是一个好的答案,但是对于这个答案会有更多的细节会更好 - 链接到文档,另外一两个句子就足够了。 – Joe 2015-02-11 15:34:20