2015-10-19 43 views
0

這是遵循高效後串連許多SAS數據集:Efficiently concatenate many sas datasets串連許多表中SAS

嗯,我有一個類似的任務,即以連接相同結構的超過10000個SAS表。每個表由2行和13列組成,並按順序命名(data,data1,data 2,...)。我所有的表格都保存在外部驅動器中:「D:\ MySASf​​older \」。在datastep中使用SET的連接似乎內存不足,proc append可能是解決方案。但是,我對理解BellevueBob所做的代碼有些困難,特別是我不確定宏如何撤銷10000個數據表。任何人都可以請幫助我通過代碼行請。非常感謝,Mai

+0

Bob的答案使用一個簡單的宏'%do'循環遍歷所有表。在SAS宏中做一些背景閱讀,然後發佈另一個問題,如果有一部分仍然不明白。 – user667489

+0

[有效連接多個sas數據集]的可能重複(http://stackoverflow.com/questions/13442882/efficiently-concatenate-many-sas-datasets) – user667489

+1

您是否嘗試在SET語句中使用成員列表? '數據要;設置數據data1-data9999;運行;'它與單個SET語句中引用的許多數據集一起工作嗎? – Tom

回答

0

其他問題實際上與您的不完全相同;它存在一個問題,即數據集是按需創建的,然後,然後追加。

如果數據集已經存在,則您的問題更加容易。例如,讓我們先製作data1-data3(你已經在之前的步驟中完成了),然後使用單個短劃線運算符(它將創建一個新的名稱列表,其中包含第一個和第二個之間的所有名稱)追加它們,姓氏,按數字順序)。

data data1; 
    x=1; 
run; 

data data2; 
    x=2; 
run; 

data data3; 
    x=3; 
run; 

data want; 
    set data1-data3; 
run; 

當然,如果你有data你必須還要補充一點。

data want; 
    set data data1-data3; 
run; 

你也可以在這個上放一個libname。

data want; 
    set mylib.data1-mylib.data3; 
run; 
+0

而且 - 作爲一個方面說明 - 這是一個糟糕的編程習慣。不要創建一堆有效的無名數據集。相反,創建具有有用名稱的名稱 - 如果可能的話,將它們一起追加到它們創建的步驟中,而不是製作一組將放在其中的數據集。這樣可以避免很多問題。 – Joe

+0

是的,user667489你是對的。我的工作與Bob的工作有點不同。所以我現在可以使用代碼: –

+0

Tom&Joe,擁有超過10000個表格,由於內存問題,SET至少在我的電腦上不可行。系統必須通讀基數和新數據集的所有觀測數據,而proc附加數據不需要通讀觀測數據。 –