2011-04-14 78 views
5

我想測試變量是否存在,如果不存在,請創建它。測試變量是否存在

+0

您無法在DATA步驟中真正有條件地創建變量。也許你想編寫代碼來檢查一個數據集是否有一個特定的變量,如果不使用DATA步驟來創建一個新的數據集版本來添加所需的列並給它一些合理的默認值? – 2011-04-19 16:12:03

+0

如果輸入數據不符合規格,更好的解決方案可能是「中止」。 – StasK 2015-10-23 15:34:33

回答

8

open() & varnum()功能可以使用。來自varnum()的非零輸出指示變量存在。

data try; 
    input var1 var2 var3; 
    datalines; 
    7 2 2 
    5 5 3 
    7 2 7 
; 

data try2; 
    set try; 
    if _n_ = 1 then do; 
     dsid=open('try'); 
     if varnum(dsid,'var4') = 0 then var4 = .; 
     rc=close(dsid); 
    end; 
    drop rc dsid;  
run; 
+2

使用open()函數打開數據集後,請不要忘記關閉()你的數據集。 – cmjohns 2011-04-16 15:53:53

+2

這裏沒有必要打開varnum和varnum嗎?難道你不能說「數據try2; var4 = .; set try;」。在給出的例子中,它會在每次迭代時做開放和varnum,而不是很不情願,所以它們至少應該被「if _N_ = 1 then」所保護。 – 2011-04-19 16:09:19

+2

我需要測試var4是否存在,以便保存它的內容。擬議的數據try2; VAR4 = .;設置嘗試;'會覆蓋預先存在的變量中的任何數據。 – Murray 2011-06-01 05:23:09

5
data try2; 
    set try; 
    var4 = coalesce(var4,.); 
run; 

(假設VAR4是數字)

1

var4分配到其自身。如果該分配不存在,該分配將創建該變量,如果該分配存在,則將該內容留在原地。

data try; 
    input var1 var2 var3; 
    datalines; 
    7 2 2 
    5 5 3 
    7 2 7 
; 

data try2; 
    set try; 
    var4 = var4; 
run; 

請記住,創造var4這樣,當它不存在將使用默認的屬性變量,所以你可能需要,如果你需要特定的格式/長度等使用顯式聲明attrib

0

這是一個非常晚的答案/評論,但是這種方法適用於我,而且非常簡單(SAS 9.4)。在下面的例子中,我使用了缺失的數字和字符變量,併爲缺少的字符變量賦值。

data try; 
input var1 var2 var3; 
datalines; 
7 2 2 
5 5 3 
7 2 7 
; 

    data try2; 
length var4 $20; 
length var5 8; 
set try; 
var4 = var4; 
if var4 = ' ' then var4 = 'Not on Source File'; 
run; 
+0

這與AndyBean的回答相同。 – Snorex 2016-08-30 23:24:24

+0

如果Muray希望得到輸入變量的變量不存在的信息,那麼不應該這樣做! – 2017-04-19 08:46:55