SAS喜歡繼續警告和錯誤後處理好,所以我經常需要回到通過日誌的頁面滾動查找的問題。有沒有更好的辦法?我希望在出現第一個錯誤或警告時立即停止,以便我可以修復它並重試。有沒有辦法在發生第一次警告或錯誤時停止SAS?
回答
錯誤= 1個選項被先前建議,但只有停止他從寫日誌的錯誤消息。我會建議另一個系統選項ERRORABEND,它會阻止程序進一步處理大多數錯誤。我不知道由於警告而終止處理的選項,但我認爲您可以添加如下的宏來停止處理。
%macro check_for_errors;
%if &syserr > 0 %then %do;
endsas;
%end;
%mend check_for_errors;
data test1;
<data step code>
run;
%check_for_errors;
你可以在你的程序的每一步後重復宏調用,它應該在的錯誤代碼是什麼,但0
應該詳細瞭解ERRORS =選項...刪除了我的答案並更新了您的答案 –
有沒有像ERRORABEND選項那樣不會導致與SAS服務器斷開連接?我使用連接到外部unix服務器的EG,雖然在第一個錯誤時停止處理會很好,但ERRORABEND會關閉到服務器的連接,這需要一段時間才能在下次運行時重新建立連接。 – orh
您可能還會檢查'&syserrortext'是否爲非空。我發現這個變量比'&syserr'更可靠。 –
我經常做類似的東西RWill點結束,但我用宏包裝我的整個程序。每個DATA步驟之後,PROC SQL,PROC SORT等我檢查錯誤代碼(& SYSERR或& SQLRC)。如果它不是零,我會跳到最後。
更多細節及代碼在這裏:https://heuristically.wordpress.com/2012/02/09/return-codes-errors-sas/
我不能使用,因爲我們組織的批處理系統如何運行在一個SAS會話獨立的程序RWill的endsas。
這太棒了!只需閱讀博客條目並試用即可。多年來,我一直傻傻地認爲SAS不能自動工作。 快速提問:在檢查PROC SQL錯誤時,我是否必須使用SQLRC變量,還是僅當我關心恢復SQL錯誤代碼時才使用SQLRC變量?它看起來像SYSERR與PROC SQL一起工作,但我想仔細檢查。再次感謝! –
@sparc_spread:如果您不在意處理PROC SQL中的錯誤,那麼請不要檢查錯誤代碼。我認爲這可能有用的一種情況是使用'drop table foo;'並且不關心表是否存在。 – Andrew
太棒了,再次感謝。 –
一種選擇是將run
全部替換爲run &g_cancel
,將proc sql;
替換爲proc sql &g_noexec;
。最初&g_cancel
和&g_noexec
被設置爲無,所以一切運行。
在擊中的錯誤(或者%sys_rc
,%sql_rc
或使用參照業務邏輯)設置&g_cancel
取消並&g_noexec
爲noexec。
這應該停止任何後續步驟運行 - 顯然宏觀變量可以爲具有或檢查執行純粹宏步驟之前,無論運行(一收拾爲例)步驟可以省略。
企業指南用戶注意事項:唯一的警告提示是,如果您在同一個會話中運行多個代碼項目,則需要在每個代碼項目開始時重置錯誤條件,以免無關的錯誤停止任何工作。
我想你的意思是'替換'運行「與第一句 –
我一直在使用最近%runquit
宏。適用於批處理作業和交互式會話(不關閉會話,停止運行代碼)。
來源:http://www.cpc.unc.edu/research/tools/data_analysis/sas_to_stata/sas-macros/runquit.html
要使用它,你基本上是在任何數據步驟結束鍵入%runquit;
或PROC而不是鍵入你的正常run
或quit
聲明。
代碼:
%macro runquit;
; run; quit;
%if &syserr. ne 0 %then %do;
%abort cancel;
%end;
%mend runquit;
Datastep用法:
data something;
* do some stuff;
%runquit;
PROC用法:
proc sql;
* do some stuff;
%runquit;
它不是很漂亮時,通過讀碼,但它確實使調試了很多更輕鬆。
以補充Rwill的回答是:
如果使用存儲過程(STP),它也是不錯的,當出現錯誤時不顯示登錄到您的用戶,並刪除「顯示SAS日誌」按鈕。
可與本
%macro checkcc;
options obs=max no$syntaxcheck;
%if (&syscc gt 4) %then
%do;
data _null_;
file _webout;
put "<h3>Sorry, your request was not processed successfully.<h3>";
rc = stpsrvset('program error', 0);
run;
%end;
%let syscc=0;
%mend checkcc;
%checkcc;
源來實現:http://support.sas.com/kb/16/225.html
這裏是我做出依然顯示JSON格式錯誤的增強版本。
%macro checkErrors;
options obs=max no$syntaxcheck;
%let old = %sysfunc(stpsrv_header(Content-type, application/json%str(;) charset=utf-8));
%put &=syscc; %put &=syserr; %put &=sysrc; %put &=syswarningtext; %put &=syserrortext;
%if (&syscc gt 4) %then %do;
data _null_;
file _webout;
put '{';
put ' "success":"false"';
put ' ,"message":"' "&syserrortext" '"';
put ' ,"syscc":"' "&syscc" '"';
put '}';
rc = stpsrvset('program error', 0);
run;
%end;
%let syscc=0;
%mend checkErrors;
%checkErrors;
和HTML版本:
%macro checkErrors_HTML;
options obs=max no$syntaxcheck;
%if (&syscc gt 4) %then %do;
data _null_;
file _webout;
put '<!doctype html> ';
put '<html> ';
put ' <head> ';
put ' <title>Error</title> ';
put ' </head> ';
put ' <body> ';
put ' <h1>An Error Occured</h1>';
put ' <p>' "&syserrortext" '</>';
put ' </body>';
put '</html>';
rc = stpsrvset('program error', 0);
run;
%end;
%let syscc=0;
%mend checkErrors_HTML;
%checkErrors_HTML;
」run&cancel「'非常好!大概你還想在那裏放一個'%abort'或'endsas;',這樣程序的其餘部分不會不必要地運行? –
@AllanBowe這不需要在程序中經常使用'%checkErrors'嗎?我只是在STP的最後放置了'%checkErrors',所以我不確定這會有什麼用處。你怎麼看? –
正確,如果在程序結束時不需要中止。我只是考慮一些我自己的用例(長時間運行的STP),如果能夠在程序中間放棄而不會將錯誤發送給客戶端,那麼這很方便。 –
- 1. Excel VBA調試程序停止時沒有錯誤或警告
- 2. 有沒有辦法阻止html警告?
- 3. 有沒有辦法阻止Valgrind發現第一個錯誤?
- 4. 第一次發生後停止警告消息?
- 5. Mule FTP輪詢停止沒有錯誤或警告
- 6. 有沒有辦法停止腳本,如果發現錯誤?
- 7. SAS宏不起作用,但沒有錯誤或警告
- 8. ReSharper有沒有辦法在一個文件中隱藏所有錯誤/警告?
- 9. 有沒有辦法在錯誤處停止執行點?
- 10. 有沒有辦法讓Django報告單元測試錯誤發生時和錯誤發生?
- 11. 有沒有辦法禁用xml警告?
- 12. 調試沒有錯誤或警告
- 13. 調試沒有錯誤或警告
- 14. Linux Kernel有沒有第一次發生?
- 15. 有沒有辦法從Xcode 4複製/粘貼錯誤或警告消息?
- 16. 在發生警告或錯誤時JBoss無法顯示戰名
- 17. 第一次失敗後有什麼辦法停止DataAnnotation驗證?
- 18. 項目沒有編譯沒有警告或錯誤在Code :: Blocks
- 19. Tomcat9停留在這一步沒有任何錯誤和警告
- 20. C++程序停止時沒有錯誤打印矩陣時出現警告
- 21. Xamarin - android的空白應用程序停止啓動,沒有錯誤或警告
- 22. 有沒有辦法讓gcc或clang警告顯式演員?
- 23. 有沒有辦法在DefaultHandler中停止或退出分析?
- 24. 有沒有辦法停止OnItemSaving事件?
- 25. 有沒有辦法來防止:懸停?
- 26. 有沒有辦法停止MouseListener?
- 27. 有沒有辦法停止QGraphicsScene?
- 28. 有沒有辦法在訪問特定屬性時生成編譯器警告?
- 29. 有沒有辦法停止接收DMARC報告
- 30. 有沒有辦法在translate3d上懸停時發生一個平滑的動畫?
我看到SO域問題有關編程SAS:遷移那裏。 – whuber