请选择 进入手机版 | 继续访问电脑版
楼主: wo1172810770
7191 2

sas读取excel多个sheet的问题 [推广有奖]

  • 0关注
  • 0粉丝

初中生

76%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
66 点
帖子
5
精华
0
在线时间
26 小时
注册时间
2012-10-13
最后登录
2019-5-6

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
下面是我在网上盗的一道程序,能实现从excel中读取多个sheet的问题,原程序有错误,我改动了一下,但是输出的数据只有sheetname,其他的啥也没有,我想输出的是每个sheet存储的数据。
请各位英雄好汉 帮个忙吧!我用的是sas9.4版本,64位的。在d盘sas文件里存了一个cz.xlsx。
%let dir=d:\sas;
%macro ReadXls (name);
libname lb excel "&dir.\&name";
proc sql noprint;

create table sheetname as
select tranwrd(memname,"''","'") as sheetname
from sashelp.vstabvw
where libname= "lb";

select count(DISTINCT(sheetname)) into :number
from sheetname;
select DISTINCT(sheetname) into :sheet1- :sheet%left(&number)
from sheetname;
quit;

libname lb clear;
%do i=1 %to &number;
        proc import datafile= "&dir.\&name"
        out=sht&i replace;
        dbms=excel replace;
        sheet= &&sheet&i;
        getnames=yes;
        mixed=yes;
        run;

        data a&i;
        set lb.sht&i;
        run;
        proc print data=a&i;run;

        proc append base=master data=sht&i force;
        run;

%end ;
%mend ;
%ReadXls (cz.xlsx);

调试的数据

调试的数据

输出数据

输出数据



二维码

扫码加我 拉你入群

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

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

关键词:sheet EXCEL exce xcel cel

tj0412ymy 发表于 2017-7-28 10:51:21 |显示全部楼层 |坛友微信交流群
程序有点小毛病,已帮你修改。另外,正好需要这段代码,感谢提供~
  1. %let dir=d:\SAS;
  2. %macro ReadXls (name);
  3. libname lb excel "&dir.\&name";
  4. proc sql noprint;

  5. create table sheetname as
  6. select tranwrd(memname,"''","'") as sheetname
  7. from sashelp.vstabvw
  8. where upcase(libname)= "LB";

  9. select count(DISTINCT(sheetname)) into :number
  10. from sheetname;
  11. select DISTINCT(sheetname) into :sheet1- :sheet%left(&number)
  12. from sheetname;
  13. quit;

  14. libname lb clear;
  15. %do i=1 %to &number;
  16.         proc import datafile= "&dir.\&name"
  17.         out=sht&i replace;
  18.         dbms=excel replace;
  19.         sheet= &&sheet&i;
  20.         getnames=yes;
  21.         mixed=yes;
  22.         run;

  23.         data a&i;
  24.         set lb.sht&i;
  25.         run;
  26.         proc print data=a&i;run;

  27.         proc append base=master data=sht&i force;
  28.         run;

  29. %end ;
  30. %mend ;
  31. %ReadXls (cz.xlsx);
复制代码
已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 20 + 30 + 1 + 2 + 1 热心帮助其他会员

总评分: 经验 + 20  论坛币 + 30  学术水平 + 1  热心指数 + 2  信用等级 + 1   查看全部评分

使用道具

这里的程序需要知道表名人后再导入数据,建立的以Excel类型的数据库后,就可以直接读取数据集了。

libname lb excel "&dir.\&name";

proc sql noprint;

create table sheetname as
select tranwrd(memname,"''","'") as sheetname
from sashelp.vstabvw
where upcase(libname)= "LB";
quit;
data master;
set lb.'&sheetname'n;
run;

或是
data aaaa;
set lb.'发卡$'n;
run;


使用道具

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

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

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

GMT+8, 2024-4-18 13:26