2015-02-11 61 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