當前,我有幾組業務單位數據要放入標準模板格式中。某些業務單位數據包含其他人沒有的列。我想檢查是否存在某些列,然後創建它們,如果它們不存在。我知道實現類似功能的技術已經在前面討論過了,here和here。但是,我想知道是否存在更好的方法。從具有不同列的多個數據集創建模板數據集
我當前的代碼是:
data Source_Data4;
set Interm.Source_Data3;
if 0 then do;
a="";
b="";
end;
run;
當前,我有幾組業務單位數據要放入標準模板格式中。某些業務單位數據包含其他人沒有的列。我想檢查是否存在某些列,然後創建它們,如果它們不存在。我知道實現類似功能的技術已經在前面討論過了,here和here。但是,我想知道是否存在更好的方法。從具有不同列的多個數據集創建模板數據集
我當前的代碼是:
data Source_Data4;
set Interm.Source_Data3;
if 0 then do;
a="";
b="";
end;
run;
如果您有您要使用的模板,一個很好的辦法做到這一點是這樣的不同列中多個數據集:
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語句。
使用RETAIN語句應該是這樣做的最快和最簡單的方式。如果你正在檢查的字段是數字,然後把一個。代替 」」。
data Source_Data4;
set Interm.Source_Data3;
retain a b "";
run;
['RETAIN'](http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000214163.htm)將是最快的,因爲它可以防止SAS甚至麻煩在每次迭代時將變量設置爲空。應該對效率產生近淨效應0。 – JDB
我編輯了你的問題,使其不那麼主觀。如果您覺得我實質上改變了帖子的含義,請隨時回滾或應用您自己的修改。 – JDB
我想指出的是,爲了做出任何明顯的區別,您需要一臺令人難以置信的慢電腦,或者一個非常大的數據集。而且,令人難以置信的是,我猜測有數萬億條記錄。我猜這個數字,但我確定有人可以證實這一點。你的時間在別處優化可能會更好。 –
輝煌,好多了。現在清理評論。 – Joe