下處理在SAS插座連接到外部數據源上有一個文件名陳述specifed插座:錯誤的OpenVMS
filename extsrc SOCKET "extserver:port" recfm=v;
data foo;
infile extsrc;
input;
.... some statements to read stuff ...;
run;
這工作(因爲它應該)99 % 的時間。但是,有一段時間,應該在遠程端口上監聽的程序不是。目前這導致程序退出時出現錯誤:
Error: Connection refused.
之後我們再試一次,它通常工作。然而,這變得乏味,所以我想在程序中檢測到這個錯誤並在那裏處理它。有沒有人知道在SAS中檢測這種類型的錯誤的方法?
我試着用fileref()函數檢查fileref extsrc的有效性,但是這只是返回-20005,這意味着fileref被賦值但不指向本地文件(這是真的)。該錯誤只當我使用fileref在datastep變得明顯,所以我想一起做東西線:
data _null_;
rc=infile extsrc;
if rc=0 then do;
//whatever I want to do;
end;
else do;
//throw some error and try again later;
end;
run;
[UPDATE1] 我試着做下面的建議,但在真正的heisenbug在過去的幾天裏,這個問題並沒有出現,所以我不確定最終的解決方案是什麼。 [/ update1]
[update2] 錯誤終於再次出現。根據cmjohns的回答,發生此錯誤後,syserr的值爲1012。現在我將觀察syserr的價值,如果失敗,請重試固定次數。 [/ update2]
[update3] 我已經有一些代碼運行了幾天,現在工作。另外的問題是(當然)如果&syserr
的值高於6,則會出現錯誤情況,因此根據您的errorabend/noerrorabend
設置,這會導致程序完全結束,或者導致程序以syntaxchek模式繼續使用obs=0
。兩者都是不可取的。解決方法是在產生此錯誤的datastep之前設置options noerrorabend nosyntaxcheck
。此外,如果發生錯誤,我必須清除文件名extsrc並重新分配它。最後,一旦這段代碼完成,我會恢復錯誤。如果我恢復nosyntaxcheck,這會導致SAS檢測到以前的錯誤情況,並在該點切換到語法檢查模式,這也是不理想的。 [/ update3]
你有沒有問過這個在SAS新聞組http://groups.google.com/group /comp.soft-sys.sas/topics – 2009-04-27 12:28:58