楼主: 可~乐
8103 8

[原创博文] 导入excel中的所有sheet和导入同一文件夹下所有excel中的多个sheet [推广有奖]

讲师

70%

还不是VIP/贵宾

-

威望
0
论坛币
5054 个
通用积分
0.0415
学术水平
107 点
热心指数
96 点
信用等级
90 点
经验
9456 点
帖子
301
精华
1
在线时间
735 小时
注册时间
2010-3-25
最后登录
2020-8-3

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
导入excel中的所有sheet
  1. %macro import(xlsname);/*xlsname为所需导入excel的名称*/
  2. /*定义所需导入excel的地址*/
  3. %let dir=C:\Documents and Settings\Administrator\桌面\桌面\test;

  4. /*定义临时逻辑库test,并把excel中的所有sheet映射到逻辑库test中*/
  5. libname test "&dir.\&xlsname.";
  6. run;

  7. proc sql noprint;
  8.         select count(distinct memname) into :number
  9.         from sashelp.vmember
  10.         where libname="TEST";/*计算excel中sheet的个数*/
  11.         select compress(memname,"$") into :sheet1 - :sheet%left(&number)
  12.         from sashelp.vmember
  13.         where libname="TEST";/*将各个sheet的名字分别赋给宏变量*/
  14. quit;

  15. /*将各个sheet分别进行导入*/
  16. %do i=1 %to &sqlobs;
  17.     proc import out=&&sheet&i. datafile="&dir.\&xlsname" dbms=excel replace;
  18.         getnames=yes;
  19.                 sheet="&&sheet&i";
  20.                 mixed=yes;
  21.         run;
  22. %end;

  23. %mend;
复制代码
导入同一文件夹下所有excel中的多个sheet
  1. %macro directory(dir=);
  2. %let rs=%sysfunc(filename(filref,&dir));
  3. %let did=%sysfunc(dopen(&filref));
  4. %let nobs=%sysfunc(dnum(&did));

  5. %do i=1 %to &nobs.;
  6.     %let name=%qscan(%qsysfunc(dread(&did,&i)),1,.);
  7.     %let ext=%qscan(%qsysfunc(dread(&did,&i)),-1,.);

  8.         libname test "&dir.\&name..&ext.";
  9.         run;

  10.         proc sql noprint;
  11.                 select count(distinct memname) into :number
  12.                 from sashelp.vmember
  13.                 where libname="TEST";
  14.                 select compress(memname,"$") into :sheet1 - :sheet%left(&number)
  15.                 from sashelp.vmember
  16.                 where libname="TEST";
  17.         quit;

  18. %do j=1 %to &sqlobs;
  19.     proc import out=&&sheet&j. datafile="&dir.\&name..&ext." dbms=excel replace;
  20.         getnames=yes;
  21.                 sheet="&&sheet&j";
  22.                 mixed=yes;
  23.         run;
  24. %end;

  25. %end;

  26. %let rc=%sysfunc(dclose(&did));

  27. %mend;
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:EXCEL sheet exce xcel SHE

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
webgu + 1 + 1 + 1 观点有启发

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

本帖被以下文库推荐

  • · MyLib|主题: 409, 订阅: 41
沙发
ryuuzt 发表于 2012-6-10 10:19:28 |只看作者 |坛友微信交流群
感谢,学习了。
最近正在导入大量的xls文件。每一个文件都很大。我也做了一个宏。但不如您的精致。

使用道具

藤椅
幸福微积分 发表于 2012-7-22 11:00:39 |只看作者 |坛友微信交流群
拿来用一下  谢谢您

使用道具

板凳
kongqunyu 发表于 2014-3-17 16:00:16 |只看作者 |坛友微信交流群
为什么把替换的替换后,运行没有反应??

使用道具

报纸
可~乐 发表于 2014-3-17 21:03:44 |只看作者 |坛友微信交流群
kongqunyu 发表于 2014-3-17 16:00
为什么把替换的替换后,运行没有反应??
看了一下代码,引号变成了",不会是论坛的bug吧。。。

使用道具

地板
Kaylee10 发表于 2014-12-7 13:43:23 |只看作者 |坛友微信交流群
感谢分享,帮助很大

使用道具

7
teqel 发表于 2014-12-7 23:57:29 |只看作者 |坛友微信交流群
  1. /*Macro to read data sheet from one Excel file*/

  2. %macro import(xlsname);

  3. %let dir=C:\AAA\test;

  4. libname test "&dir.\&xlsname";

  5. proc sql noprint;
  6.         select count(distinct memname) into :number
  7.         from sashelp.vmember
  8.         where libname="TEST"
  9.         select compress(memname,"$") into :sheet1 - :sheet%left(&number)
  10.         from sashelp.vmember
  11.         where libname="TEST";
  12. quit;

  13. %do i=1 %to &sqlobs;
  14.     proc import out=&&sheet&i datafile="&dir.\&xlsname"; dbms=excel replace;
  15.         getnames=yes;
  16.                 sheet="&&sheet&i";
  17.                 mixed=yes;
  18.         run;
  19. %end;

  20. %mend;
复制代码

使用道具

8
teqel 发表于 2014-12-8 00:03:56 |只看作者 |坛友微信交流群
  1. /*Read excel files from the same directory*/

  2. %macro directory(dir=);
  3. %let rs=%sysfunc(filename(filref,&dir));
  4. %let did=%sysfunc(dopen(&filref));
  5. %let nobs=%sysfunc(dnum(&did));

  6. %do i=1 %to &nobs;
  7.     %let name=%qscan(%qsysfunc(dread(&did,&i)),1,.);
  8.     %let ext=%qscan(%qsysfunc(dread(&did,&i)),-1,.);

  9.         libname test "&dir.\&name..&ext";
  10.         run;

  11.         proc sql noprint;
  12.                 select count(distinct memname) into :number
  13.                 from sashelp.vmember
  14.                 where libname="TEST";
  15.                 select compress(memname,"$") into :sheet1 - :sheet%left(&number)
  16.                 from sashelp.vmember
  17.                 where libname="TEST";
  18.         quit;

  19. %do j=1 %to &sqlobs;
  20.     proc import out=&&sheet&j datafile="&dir.\&name..&ext." dbms=excel replace;
  21.         getnames=yes;
  22.                 sheet="&&sheet&j";
  23.                 mixed=yes;
  24.         run;
  25. %end;

  26. %end;

  27. %let rc=%sysfunc(dclose(&did));

  28. %mend;
复制代码

使用道具

9
qianqian266520 发表于 2014-12-8 00:11:48 |只看作者 |坛友微信交流群
赞一个!

使用道具

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

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

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

GMT+8, 2024-4-24 19:53