2014-10-30 66 views
2

我有幾個數據庫,每個地理變量一個,我想在最後追加。我正在做一些數據步驟。由於我有大型數據庫,因此在第一次調用每個表時,我只選擇需要的變量。但是在一個變量總是等於0的表上,該變量不在表中。SAS:保存是否存在

因此,當我在for循環中選擇我的(keep = var)時,如果該變量存在,它會正常工作,但在另一種情況下會產生錯誤,以便忽略這些表。

%do i=1 to 10 ; 

data temp; 
    set area_i(keep= var1 var2); 
run; 

proc append base=want data=temp force; 
run; 

%end; 

有沒有簡單的方法來解決這個問題?

回答

1

事實上,我已經發現瞭解決方案:DKRICOND(或DKROCOND)選項指定錯誤檢測的電平報告,當變量是從分別輸入缺失(或輸出)的數據的處理過程中設置DROP =,KEEP =或RENAME =數據集選項。

選項是DKRICOND =錯誤|警告|警告| NOWARN | NOWARNING,所以你只需揮手設置

dkricond=warn 

/*your program, in my case :*/ 
%do i=1 to 10 ; 
data temp; 
    set area_i(keep= var1 var2); 
run; 
proc append base=want data=temp force; 
run; 
%end; 

dkricond=error /* the standard value, probably better to set it back after/ */ 
+0

你認爲'do i = 1 to 10;'在做什麼? – Joe 2014-10-30 15:07:16

+0

我在我的程序中有一個宏循環,我在這裏簡化了它,它可能根本不起作用。但是,我猜想你已經想出了是否應該爲每個area_i運行。 – 2014-10-30 15:40:57

+0

'%do'可以在宏循環中工作。 – Joe 2014-10-30 16:06:00

1

如果將其添加到表中,如果它尚不存在,那麼該怎麼辦?

/*look at dictionary.columns to see if the column already exists*/ 
proc sql; 
    select name into :flag separated by ' ' from dictionary.columns where libname = 'WORK' and memname = 'AREA_I' and name = 'VAR1'; 
run; 

/*if it doesn't, then created it as empty*/ 
%if &flag. ne VAR1 %then %do; 
    data area_i; 
     set area_i; 
     call missing(var1); 
    run;  
%end; 
+0

你能解釋一下你在做什麼嗎?就像標誌一樣,如果它在區域中缺失1 – 2014-10-30 11:30:35

+0

@AnonyMartin dictionary.columns包含有關所有數據集中所有列的信息。您可以查詢它以確定給定數據集上是否存在'var1'。 – dwjohnston 2014-10-30 20:29:56