這是一個常見的需求,但它需要多個SAS功能相當罕見的知識來執行。
我想用兩個步驟解決處理這個問題:
- 獲取文件名列表
- 方法在迴路
每個文件名雖然您可以處理每個文件名作爲你閱讀它,調試和維護分離這些步驟的代碼會容易得多。
第1步:閱讀文件名
我想獲得的文件名列表的最佳方法是使用dread()
閱讀 目錄條目到DataSet如下:
filename myfiles 'c:\myfolder';
data filenames (keep=filename);
dir = dopen('myfiles');
do file = 1 to dnum(dir);
filename = dread(dir,file);
output;
end;
rc = dclose(dir);
run;
在此之後步驟,您可以驗證是否正在讀取正確的文件名正在打印數據集。您也可以修改代碼以僅輸出某些類型的文件。我將這作爲練習給讀者。
第2步:使用文件
鑑於數據集的名稱列表,我更喜歡使用call execute()
數據步內來處理每個文件。
data _null_;
set filenames;
call execute('%import('||filename||')');
run;
我還沒有包括宏在Excel文件讀取並連接所有的數據集(部分原因是因爲我沒有的Excel文件合適的列表進行測試,而且還因爲它是一個情景題)。下面只是存根宏輸出文件名到日誌,以驗證它的運行:
%macro import(filename);
/* This is a dummy macro. Here is where you would do something with the file */
%put &filename;
%mend;
注:
可以說有很多是如何做到這一點在對多個地方的例子很多網頁,例如:
然而,大多依賴於使用的pipe
運行dir
或ls
命令,我感覺是錯誤的方法,因爲它依賴於平臺,並且在許多現代環境中,管道shell命令的功能將被禁用。
我基於Daniel Santos在communities.sas.com的回答,但是,考慮到stackoverflow的優越功能,我寧願在這裏看到一個好的答案。
您的問題不符合SO指導原則,請顯示您到目前爲止所嘗試的內容。 https://stackoverflow.com/help/how-to-ask – Reeza
你有代碼工作(或企圖)導入一個Excel文件?如果是這樣,那就證明。你有沒有試過一個宏,它會把&jcname作爲參數並讀入一個excel文件中?如果是這樣,那就證明。一旦你有了這些,就不必再讓這個宏循環遍歷63個名字的列表。顯示你的代碼將幫助其他人幫助你。 – Quentin
儘管我同意上述評論,儘管這是一個廣泛的問題,但我認爲答案仍然有用。在這個網站上似乎沒有任何好的答案,並且類似問題的搜索結果出現了一些粗略的答案。這不是SAS中的日常問題,即使對於開始SAS程序員來說,基本方法也不熟悉。它仍然讓我停下來思考。 – david25272