2017-08-30 43 views
2

當讀取包含零記錄的數據集時,數據步驟不會運行任何put語句。在SAS中,如何在SET具有零記錄時在數據步驟中至少輸出一行?

data test; 
    set SASHELP.class end=eof; 
    where 1=0; 
    *output; 
    if _N_=1 then put '['; 
    put '"' name '",'; 
    if eof then put name ']'; 
    *output; 
    run; 

是否有可能強制其中一些?

之所以我這樣做,這是我要創建與放陳述
(我使用SAS9.3並沒有獲得proc json呢。)

的JSON文件JSON文件當數據集爲空時,它們是完全空的。我會需要他們至少包含一個空陣列[]

這意味着我至少需要這兩條線運行:

if _N_=1 then put '['; 
if eof then put name ']'; 

對於我被迫在3個數據的步驟,一個蒙山頭(_N_=1),一個與拆分此時刻記錄,最後一個尾巴(eof=1)。也許有一個更短的解決方案?

+0

在SET語句之前檢查EOF和相關操作。 –

回答

4

這裏發生的是那一刻SAS擊中setinput沒有記錄在讀,它終止在該數據跳躍。因爲set位於循環的頂部,所以它立即終止。

如果你將要頂部的兩個條件,這將工作,例如:

data test; 
    if _n_=1 then put '['; 
    if eof then put ']'; 
    set SASHELP.class end=eof; 
    where 1=0; 
    *output; 
    put '"' name '",'; 
    *output; 
run; 

然後他們會操作是否有相應的數據。

我喜歡的另一種選擇是循環讀取數據集,但在這種情況下,它可能比有用的工作更多。

相關問題