2017-03-04 23 views
1

我寫的的if/then/else語句,還有什麼地方最後是:打印報警記錄,如果再else語句SAS

if variable2 = 'foo' then variable = 'bar' 
else variable = . 

我可以打印自定義「警告」到具有日誌文件variable2名稱的列表或數組,其中

variable = . 

回答

4

您可以使用PUTLOG語句將消息寫入日誌。

if variable2 = 'foo' then variable = 'bar' ; 
else do; 
    variable = . ; 
    putlog "WARNING: bad value " variable2 = ; 
end ; 
+1

,以確保它轉到日誌(而不是fileref)最好是明確和使用' putlog'語句 –

+1

謝謝@Allan。舊習難改。更新。 – Quentin

0

它看起來像OP想要一個消息列出所有相關的變量名稱。有多種方法可以做到這一點......最簡單的將是對輸出數據在該步驟後設置一個快捷PROC SQL完成:

proc sql noprint; 
    select distinct variable2 into :bad_vals separated by ' ' 
    from my_data 
    where variable = . 
    ; 
quit; 

%put WARNING: Bad values of VARIABLE: &bad_vals; 

這將是罰款,相對較小的數據集;對於大數據集,可以通過在初始數據步驟運行時維護相關值列表來避免額外的數據傳遞,並且只需在數據步驟結束時打印一次消息。

data mydata; 
    length bad_vals $ 10000; 
    drop bad_vals; 
    set in end=end; 
    ...blah... 
    ...else do; 
    variable = .; 
    bad_vals = strip(bad_vals) || ' ' || variable2; 
    end; 
    if end then do; 
    putlog 'WARNING: Bad values of VARIABLE:' bad_vals; 
    end; 
run; 

,或者您可以使用宏變種,而不是數據跳躍VAR bad_vals