2013-07-17 39 views
2

當前,我有幾組業務單位數據要放入標準模板格式中。某些業務單位數據包含其他人沒有的列。我想檢查是否存在某些列,然後創建它們,如果它們不存在。我知道實現類似功能的技術已經在前面討論過了,herehere。但是,我想知道是否存在更好的方法。從具有不同列的多個數據集創建模板數據集

我當前的代碼是:

data Source_Data4; 
set Interm.Source_Data3; 
if 0 then do; 
    a=""; 
    b=""; 
end; 
run; 
+0

我編輯了你的問題,使其不那麼主觀。如果您覺得我實質上改變了帖子的含義,請隨時回滾或應用您自己的修改。 – JDB

+0

我想指出的是,爲了做出任何明顯的區別,您需要一臺令人難以置信的慢電腦,或者一個非常大的數據集。而且,令人難以置信的是,我猜測有數萬億條記錄。我猜這個數字,但我確定有人可以證實這一點。你的時間在別處優化可能會更好。 –

+0

輝煌,好多了。現在清理評論。 – Joe

回答

2

如果您有您要使用的模板,一個很好的辦法做到這一點是這樣的不同列中多個數據集:

data want; 
if 0 then set template; 
set have2; 
run; 

這遠遠比更容易代碼一堆保留/長度陳述。它完成與保留解決方案(它定義PDV)相同的結果,但有一個例外;它將根據template定義變量的長度和格式(保留不影響長度或格式)。這可能是需要的,也可能不是,這取決於您的使用情況。組合多個數據集時非常有用,因爲它提供了可以測試長度/格式差異的單個點;一旦這一步驟發生,您可以確信您的各種數據集在可變長度/格式中都是相同的。

創建此數據集可以通過多種方式完成。一個簡單的方法是:

data template; 
if 0 then set have; 
if 0 then set have2; 
stop; 
run; 

這將創建have1爲了跟任何新變量來自have2空白數據集。如果不需要,您可能希望在從數據字典中繪製的if 0之前添加RETAIN語句。

4

使用RETAIN語句應該是這樣做的最快和最簡單的方式。如果你正在檢查的字段是數字,然後把一個。代替 」」。

data Source_Data4; 
set Interm.Source_Data3; 
retain a b ""; 
run; 
+0

['RETAIN'](http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000214163.htm)將是最快的,因爲它可以防止SAS甚至麻煩在每次迭代時將變量設置爲空。應該對效率產生近淨效應0。 – JDB

相關問題