楼主: webgu
27906 72

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

61
lanzezhuang 发表于 2015-1-12 16:33:37 |只看作者 |坛友微信交流群
最后一个图片根本看不清楚啊。最后一个才是最重要的1

使用道具

62
wpfwxn 发表于 2015-1-12 16:52:55 |只看作者 |坛友微信交流群
如果使用的sas没有购买access模块,不知道运行该程序会不会有问题?

使用道具

63
whitepurple 发表于 2015-1-18 21:24:50 |只看作者 |坛友微信交流群
正好要用,学习了。

使用道具

64
yqfbest 发表于 2015-5-1 23:38:58 |只看作者 |坛友微信交流群
这个好啊,带点讲解就最好不过了

使用道具

65
wyx14 在职认证  发表于 2015-7-5 10:51:08 |只看作者 |坛友微信交流群
运行会&number没有解析。。。加了%eval()可以了。
谢谢楼主!

使用道具

66
cde34r 发表于 2015-11-10 22:08:42 来自手机 |只看作者 |坛友微信交流群
webgu 发表于 2013-11-28 20:01
很久没有发原创贴了,一是我自己变懒了,二是似乎坛里也没有以前热闹了。

趁着今天还有一些折腾劲,分享 ...
支持,实用!

使用道具

67
cde34r 发表于 2015-11-12 08:54:21 来自手机 |只看作者 |坛友微信交流群
webgu 发表于 2013-11-28 20:01
很久没有发原创贴了,一是我自己变懒了,二是似乎坛里也没有以前热闹了。

趁着今天还有一些折腾劲,分享 ...
不错。支持了

使用道具

68
llq1218 发表于 2016-2-15 17:40:33 |只看作者 |坛友微信交流群
ExcelFiles2sas 该宏在进行目录递归时似乎有点问题,目录执行完毕后,之后的文件则不会再执行。原因在于在 %else %if %upcase(&_s_ext)=  and &subfd=Y and %qsysfunc(indexw(&exclfd,&_filename))=0分支中 执行了 %let rc=%sysfunc(dclose(&_dsid)); 把原有的句柄关闭了,在退出递归后,系统不能重新获得原有的句柄。修改步骤 1 把%let rc=%sysfunc(dclose(&_dsid)); 删除掉  2 增加 _filrf 局部宏变量,原来使用到filrf的地方改为  %let _rc=%qsysfunc(filename(_filrf,&folder));和  %let _dsid=%sysfunc(dopen(&_filrf));

以上是自己的一点想法(已经通过实际检验),请各位都试试,是否可行

使用道具

绝世好贴,只是有小伙伴可以提供个sample吗?

使用道具

70
Enid_ 发表于 2021-11-9 17:17:43 |只看作者 |坛友微信交流群
%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;

使用道具

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

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

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

GMT+8, 2024-4-24 11:40