2016-03-28 24 views
1

如果滿足此過程中的任何程序中的某些條件,是否可以停止該流程?終止整個流程而不是單個程序

我有一個由5個SAS程序組成的進程。這個過程計劃在每天早上8點運行。但是,有時數據庫不會刷新,這個過程會發出奇怪的數字。

我需要有「異常控制」。在第二個程序中,我用一些標準檢查數據庫。如果沒有錯誤,那麼繼續運行其餘的代碼。否則,發出通知郵件並停止運行第二個程序和所有後續程序。

我嘗試%中止取消但它只是終止當前的程序。後續的程序不受影響..我可以檢查每一個程序,但這使得代碼冗餘......

我也嘗試谷歌「終止SAS過程」,但他們大多數是指abort聲明不幫助...

+0

你看過停止聲明嗎? – InfiniteFlashChess

+0

你試過'%abort abend'或'%abort return'嗎? –

+0

@DominicComtois這兩個只停止當前會話..不爲以下幾個...是的我試過..他們不工作.. – Lovnlust

回答

1

如果您使用的是Enterprise Guide,它通過邏輯門構建到程序中。

首先,在確定數據庫文件是否通過(「門程序」)的程序中,根據該測試爲宏變量賦值。據推測,這個程序只會做你感到高興的事情,即使它失敗了。

在進程流程頁面上,右鍵單擊確定數據庫文件是否通過/失敗的程序,然後選擇「條件 - >添加」。

然後添加一個基於宏變量的條件,並使用'equals'和您正在查找的值(或'大於'或任何有意義的值)。然後在「然後運行此任務」之後選擇下一個任務;並在Else運行此任務後放置其他選項。

然後,無論哪一個向前移動,都應該鏈接到您想要運行的程序的其餘部分;不應該結束這個過程。

SAS給出了一個示例,說明如何在KB Sample 39995中執行該操作,包括您可以下載的示例項目。


其次,如果達到錯誤條件,則可以設置OBS=0。這將讓SAS繼續工作,但它在大多數情況下將無法做任何事情(因爲OBS=0,那麼它只能影響任何數據集的0條記錄)。我不確定這是保證它不會做任何事情,但是在我做的所有事情中已經足夠了。我也使用了OPTIONS ERRORABEND,如果你使用外部libnames進行所有的處理,那麼當SAS重新連接時不會自動重新連接。