我們目前使用的宏函數爲%runquit
,詳情請見此處(http://analytics.ncsu.edu/sesug/2010/CC07.Blanchette.pdf)。下面顯示了%runquit
宏。它基本上停止運行時錯誤是encounterd更多的SAS代碼,並可以作爲兩個run
和quit
語句替換:proc sql outobs =觸發器SAS警告
%macro runquit;
; run; quit;
%if &syserr %then %abort cancel;
%mend;
由於proc sql
使用outobs語句觸發系統錯誤(即使指定了nowarn
選項),這意味着當我們需要使用outobs=
選項時,我們無法使用%runquit
宏。
下面的例子將產生以下警告消息:
proc sql noprint outobs=3 /*nowarn*/;
create table tmp as
select age, count(*) as freq
from sashelp.class
group by 1
order by 2 desc
;
%runquit;
警告:聲明由於OUTOBS = 3選項提前終止。
謝謝SAS完全不必要的警告。行爲顯然是預料之中的,因爲我明確地寫了代碼來要求它。當我們在set
聲明中指定inobs=
和outobs=
時,我看不到警告。爲什麼proc sql會得到特殊待遇?
有沒有什麼辦法可以禁止中outobs=
選項的警告問題?另外,是否有另一種方法來限制從不會產生錯誤的proc sql輸出行?
你可以添加更多的if/then邏輯基於水平的runquit宏記錄在這裏:http://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer的.htm#a000208995.htm。 – JimL
我猜proc sql是不同的,因爲inobs和outobs是非標準的SQL。大多數SQL風格使用「限制」語句,這在proc sql中不受支持。 – JimL
@JimL好主意,但不幸的是,這是一個相當大的錯誤我會讓它選擇退出。返回的代碼是syserr = 4,它對應於「執行成功,但帶有警告消息」。這可以是任何從自動類型轉換到未初始化的變量,即。首先我試圖抓住的東西。 –