请选择 进入手机版 | 继续访问电脑版
楼主: webgu
27898 72

[学习分享] 关于SAS批量导入EXCEL问题的总结   [推广有奖]

Enid_ 发表于 2021-11-9 17:20:29 |显示全部楼层 |坛友微信交流群
我把图片的代码copy下来了。
但同时有一个问题,我的电脑显示错误。我最后是用如下宏进行运算

        %ExcelFiles2sas(folder=E:\11.9\sas\data, subfd=N , exclfd=N, startrow=1);


但是SAS报错了,如下所示:

1056      %ExcelFiles2sas(folder=E:\11.9\sas\data, subfd=N , exclfd=N, startrow=1);
          -
          180
WARNING: 没有解析宏 EXCELFILES2SAS 的调用。

ERROR 180-322: 语句无效或未按正确顺序使用。

使用道具

Enid_ 发表于 2021-11-9 17:21:22 |显示全部楼层 |坛友微信交流群
这是我copy的代码
%macro ExcelFiles2sas(folder= , subfd= , exclfd= , startrow= );
*;
        %local _j _cnt _dsid _i _num _s_ext _s_name _filename _rc;
        %let _rc=%qsysfunc(filename(filrf,&folder));

         %if &_rc=0 %then
         %do;
                %let dsid=%sysfunc(dopen(&filrf));
                %if &_dsid>0 %then
                %do;
                   %let num=%sysfunc(dnum(&_dsid));
                 %if & num>0 %then
                                 %do _i=1 %to &_num;
                                %let _filename=%sysfunc(dread(&_dsid,&_i));
                                %let _s_name=%scan(&_filename,1,.);
                                %let s ext=%scan(& filename,2,.);
                        %if %upcase(&_s_ext)=XLS or%upcase(&_s_ext)=XLSX %then
                        %do;

                                        Libname excellib excel "&folder\&_filename";
                                        data null;
                                         set sashelp.vstabvw end=last;
                                         where libname="EXCELLIB";
                                        memname=upcase(scan(memname,1,'$'));
                                         call symputx(cats('sheet',n),memname,'L');
                                          if last then call symputx('_cnt',_n_,'L');
                                         run;
                                Libname excellib clear;
                                       
                                                %do _j=1 %to &_cnt;
                                                    proc import datafile="&folder\& filename"
                                                             out=%cmpres(&_s_name._&&sheet&_j)
                                                                   dbms=excel replace;
                                                                        range="&&sheet&_j..$&startrow.:65000";
                                                                                mixed=yes;
                                                                                getnames=yes;
                                                                  run;
                                                                %end;
                                        %end;

                                        %else %if %upcase(& s ext)= and &subfd=Y
                                                  and %qsysfunc(indexw(&exclfd,&_filename))=0 %then
                                        %do;
                                        %let rc=%sysfunc(dclose(& dsid));
                                          %xlx2sas(folder=&folder\&_filename,subfd=&subfd,
                                          exclfd=&exclfd, startrow=&startrow)
                                        %end;
                                %end;
                        %end;
                %end;
        %let rc=%sysfunc(dclose(&_dsid));

        %mend ExcelFiles2sas;
%macro ExcelFiles2sas(folder= , subfd= , exclfd= , startrow= );
*;
        %local _j _cnt _dsid _i _num _s_ext _s_name _filename _rc;
        %let _rc=%qsysfunc(filename(filrf,&folder));

         %if &_rc=0 %then
         %do;
                %let dsid=%sysfunc(dopen(&filrf));
                %if &_dsid>0 %then
                %do;
                   %let num=%sysfunc(dnum(&_dsid));
                 %if & num>0 %then
                                 %do _i=1 %to &_num;
                                %let _filename=%sysfunc(dread(&_dsid,&_i));
                                %let _s_name=%scan(&_filename,1,.);
                                %let s ext=%scan(& filename,2,.);
                        %if %upcase(&_s_ext)=XLS or%upcase(&_s_ext)=XLSX %then
                        %do;

                                        Libname excellib excel "&folder\&_filename";
                                        data null;
                                         set sashelp.vstabvw end=last;
                                         where libname="EXCELLIB";
                                        memname=upcase(scan(memname,1,'$'));
                                         call symputx(cats('sheet',n),memname,'L');
                                          if last then call symputx('_cnt',_n_,'L');
                                         run;
                                Libname excellib clear;
                                       
                                                %do _j=1 %to &_cnt;
                                                    proc import datafile="&folder\& filename"
                                                             out=%cmpres(&_s_name._&&sheet&_j)
                                                                   dbms=excel replace;
                                                                        range="&&sheet&_j..$&startrow.:65000";
                                                                                mixed=yes;
                                                                                getnames=yes;
                                                                  run;
                                                                %end;
                                        %end;

                                        %else %if %upcase(& s ext)= and &subfd=Y
                                                  and %qsysfunc(indexw(&exclfd,&_filename))=0 %then
                                        %do;
                                        %let rc=%sysfunc(dclose(& dsid));
                                          %xlx2sas(folder=&folder\&_filename,subfd=&subfd,
                                          exclfd=&exclfd, startrow=&startrow)
                                        %end;
                                %end;
                        %end;
                %end;
        %let rc=%sysfunc(dclose(&_dsid));

        %mend ExcelFiles2sas;

使用道具

Enid_ 发表于 2021-11-9 17:21:52 |显示全部楼层 |坛友微信交流群
  1. %macro ExcelFiles2sas(folder= , subfd= , exclfd= , startrow= );
  2. *;
  3.         %local _j _cnt _dsid _i _num _s_ext _s_name _filename _rc;
  4.         %let _rc=%qsysfunc(filename(filrf,&folder));

  5.          %if &_rc=0 %then
  6.          %do;
  7.                 %let dsid=%sysfunc(dopen(&filrf));
  8.                 %if &_dsid>0 %then
  9.                 %do;
  10.                    %let num=%sysfunc(dnum(&_dsid));
  11.                  %if & num>0 %then
  12.                                  %do _i=1 %to &_num;
  13.                                 %let _filename=%sysfunc(dread(&_dsid,&_i));
  14.                                 %let _s_name=%scan(&_filename,1,.);
  15.                                 %let s ext=%scan(& filename,2,.);
  16.                         %if %upcase(&_s_ext)=XLS or%upcase(&_s_ext)=XLSX %then
  17.                         %do;

  18.                                         Libname excellib excel "&folder\&_filename";
  19.                                         data null;
  20.                                          set sashelp.vstabvw end=last;
  21.                                          where libname="EXCELLIB";
  22.                                         memname=upcase(scan(memname,1,'$'));
  23.                                          call symputx(cats('sheet',n),memname,'L');
  24.                                           if last then call symputx('_cnt',_n_,'L');
  25.                                          run;
  26.                                 Libname excellib clear;
  27.                                        
  28.                                                 %do _j=1 %to &_cnt;
  29.                                                     proc import datafile="&folder\& filename"
  30.                                                              out=%cmpres(&_s_name._&&sheet&_j)
  31.                                                                    dbms=excel replace;
  32.                                                                         range="&&sheet&_j..$&startrow.:65000";
  33.                                                                                 mixed=yes;
  34.                                                                                 getnames=yes;
  35.                                                                   run;
  36.                                                                 %end;
  37.                                         %end;

  38.                                         %else %if %upcase(& s ext)= and &subfd=Y
  39.                                                   and %qsysfunc(indexw(&exclfd,&_filename))=0 %then
  40.                                         %do;
  41.                                         %let rc=%sysfunc(dclose(& dsid));
  42.                                           %xlx2sas(folder=&folder\&_filename,subfd=&subfd,
  43.                                           exclfd=&exclfd, startrow=&startrow)
  44.                                         %end;
  45.                                 %end;
  46.                         %end;
  47.                 %end;
  48.         %let rc=%sysfunc(dclose(&_dsid));

  49.         %mend ExcelFiles2sas;
复制代码

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-19 08:12