注:這種方法不止可以用來批量匯入excel檔案,也可以匯入其它型別的檔案,重要的是這裡面的邏輯思想。
1. 指定需要匯入的folder的路徑,即需要匯入檔案的字尾
filename folder pipe "dir d:\home\data\files\*.xlsx /b";
2. 將指定資料夾下的所有的檔名(帶檔案字尾如:.xlsx)放入到data files中
data files;
length filename $100.;
infile folder truncover;
input filename $100.;
call symput("rows", _n_); * 匯入了多少個檔案,即data files中的行號;
run;
3. 後面如果需要合併資料集,這裡需要先建立乙個空的資料集
data all_data;
length var1 $30. var2 $5. var3 5. var4 6. var5 6.;
run;
4. 匯入乙個folder中所有的.xlsx檔案
/* path 需要匯入的.xlsx檔案所在的資料夾路徑;data 即上文中生成的資料集:file;rows 即:cll symput(「rows」, _n_);這裡的巨集變數 rows。 */
%macro importfiles(path, data, rows);
%do i=1 %to &rows.;
data _null_;
set &data.;
if _n_ = &i.;
* 將取出的檔名,賦值到macro變數file;
call symput("file", trim(filename));
* 因為sas data set不能使用中文命名,所以這裡根據檔名的實際進行了重新命名,需要根據實際需求更新;
call symput("outname", catt(substr(filename, 1,7), &i.));
run;
proc import datafile="&path.&file."
dbms = xlsx
out = &outname.
replace;
getnames = yes;
run;
* 以上是將資料夾中的所有.xlsx檔案匯入到sas中,如果同時還需要將所有的資料合併到乙個資料集中,可以使用以下方法;
* 如果是可以直接連線的資料;
data all_data; * all_data 在使用前一定是存在的,這個可以用乙個data step建立乙個空資料集;
set all_data &outname.; * 如果有where,這裡where的作用範圍只在最靠近的那個資料集,這裡需要注意;
run;
*如果是需要合併的資料;
proc sort data=all_data out=sorted_all_data;
by var1 var2 var3;
run;
proc sort data=&outname. out=sorted_outname_data;
by var1 var2 var3;
run;
data all;
merge sorted_all_data sorted_outname_data;
by var1 var2 var3;
run;
%end;
%mend;
5. 使用
%importfiles(d:\home\data\files, file, &rows.);
讀取指定資料夾下的所有檔案
c 怎樣讀取windows資料夾名和該資料夾中的excel表中的資料,並把讀到的資料夾名和excel表中的資料作為資料向插入到sql sever2000的資料表中 private void button1 click 2 object sender,system.eventargs e privat...
C 批量刪除指定資料夾下指定檔名的所有資料夾
private void deletedirbyname string rootpath,string name int indexsplit rootpath.lastindexof if indexsplit 0 if indexsplit 0 if dirname.tolower name.t...
python 複製指定資料夾下所有檔案
get all file by type 根據接收到的path 和type,獲得該path下所有以type型別結尾的檔案 get all file by string 根據接收到的path 和 list,獲得該path下所有的,包含list 裡字串的檔案 copy file by type 根據接收...