将指定文件夹下的所有.xlsx文件导入SAS

将指定文件夹下的所有的excel文件导入到sas中

注:这种方法不止可以用来批量导入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.);

 

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值