2014-10-28 54 views
2

我在SAS 9.1.3(在服務器上),並且具有一個宏循環一個數組喂計算密集型的集合,其被附加出到建模步驟一張桌子。我想知道是否可以爲陣列的每個元素設置最大運行時間。這樣,任何運行時間超過3分鐘的元素都將被跳過,並且下一個項目被輸入。使在SAS的宏超時甲步驟設定的間隔後

例如,我使用proc nlin和by語句爲每個類構建單獨的模型數據集和一個類未能收斂;我怎麼跳過那個班?

位小衆的要求,希望有人能夠協助!

回答

2

我能想到的這裏唯一的辦法是使之按組分別從靜止運行的每個,在一個或多個SAS/CONNECT會話重寫代碼,有家長會殺死對方一個集超時後,然後重新組合倖存的輸出。

以DOM和喬指出,這不是一個簡單的任務,但如果你足夠熱衷於學習SAS的這一方面有可能。一個好地方,開始爲這樣的事情會是這個頁面:

http://support.sas.com/rnd/scalability/tricks/connect.html

我能夠使用的例子有和其他地方作爲一個簡單的並行處理框架的基礎(在SAS 9.1.3 ,巧合!),但有很多細節需要考慮。爲了讓您的各種商店冒險的想法,如果你走這條路線:

  • 學習如何你使用(將常用的自動執行文件中的任何基礎設施,以登錄到通過SAS/CONNECT服務器工作嗎?你需要什麼調用選項使用?)
  • 解釋給你的系統管理員/爲什麼你需要並行
  • 管理異步會議
  • 進行同步之間的宏變量,宏定義,圖書館和格式運行多個進程同事會議
  • 模糊不清gs(我無法使用通常的選項來同步庫,必須通過call execute來滾動我自己的...)

人們可以在這個主題上寫一篇(冗長的)SUGI論文,我相信如果你環顧四周,那裏會有很多這樣的論文。

+0

這是一個很好的答案,儘管它可能超出了我的能力。感謝所有相同的幫助! – analystic 2014-10-30 23:14:47

2

通常,SAS以線性方式運行。所以你不能編寫一個步驟來監視同一個程序中的另一個步驟。你可以做的是在SAS/CONNECT會話中運行你的代碼,並用啓動會話的進程監視它。這不是微不足道的,以及如何超出Stack Overflow的範圍。

對於數據的步驟,使用datetime()函數來獲取當前系統日期和時間。這是以秒爲單位測量的。您可以檢查數據步驟中的時間。用stop;聲明停止數據步驟。

現在您特意詢問了關於打破PROC內的特定步驟的問題。這必須由SAS開發人員在PROC中實施。如果可能的話,它將記錄在程序的文件中。在http://support.sas.com/documentation/處查看SAS文檔。

對於PROC NLIN,我不認爲這是一個「破X後」參數。您可以使用跟蹤參數來跟蹤模型執行以查看掛起的內容。然後,您可以嘗試改變收斂參數,以嘗試加速緩慢且收斂嚴重的模型。

+0

您也可以使用SAS以外的程序來監視進程監視器並殺死SAS進程,雖然這可能是過度的。也在本網站的範圍之外。 – Joe 2014-10-28 14:24:38

+0

我跟蹤參數存在的問題是沒有任何東西被proc步驟返回。這一步驟持續了很長時間,我必須殺死sas進程。 – analystic 2014-10-28 23:02:20

+0

嘗試縮小問題的範圍,找出問題所在。如果你可以說,這些數據運行和這些數據不會,然後搞清楚爲什麼不應該太難。如果您認爲這是一個SAS錯誤,那麼請提交一張票到SAS TS。 – DomPazz 2014-10-29 02:54:58

相關問題