楼主: minglg
3367 1

[程序分享] sas批量导入EXCEL数据的问题 [推广有奖]

  • 0关注
  • 1粉丝

本科生

23%

还不是VIP/贵宾

-

威望
0
论坛币
59 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
2 点
经验
197 点
帖子
44
精华
0
在线时间
110 小时
注册时间
2009-12-26
最后登录
2021-7-7

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
最近碰到一个问题,需要批量导入excel数据,其中excel中包含的多个sheet,且名字不固定。上网搜索了code解决了该问题,但是奇怪的是隔了一段时间,再用同样的code读取同样的excel却读取不成功,确定错误集中在libname的语句中,但是不知道是什么原因导致,希望大牛不吝赐教。
相关code如下,name和ext是读取的excel名字和格式,利用libname语句,sashelp会读取该excel的sheet名字,之前是成功的,现在运行,读取的结果为空。不知是何原因

        %let name=%qscan(%qsysfunc(dread(&did,&i)),1,.);
        %let ext=%qscan(%qsysfunc(dread(&did,&i)),-1,.);

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

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

二维码

扫码加我 拉你入群

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

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

关键词:excel数据 EXCEL 批量导入 xcel exce

已有 1 人评分信用等级 收起 理由
eijuhz + 2 鼓励积极发帖讨论

总评分: 信用等级 + 2   查看全部评分

沙发
priss111 发表于 2017-12-13 17:06:41 |只看作者 |坛友微信交流群
1、多个sheet来自同一个excel的代码:
libname test excel "f:\data_model\book_data\chapt12\mul_sas.xls";
libname chapt12 'f:\data_model\book_data\chapt12';
%macro muldata(cnt);
    proc datasets lib=test nolist;
        %do i=1 %to &cnt;
            copy out=chapt12;
            select test&i;
        %end;
    quit;
%mend;
%muldata(2);

2、是多个sheet来自多个excel的代码:
filename fil "f:\data_model\book_data\chapt12\xls";
%let dir=%str(f:\data_model\book_data\chapt12\xls);
%macro test(filname);
    data w;
        length f1 8;
        stop;
    run;
    %let filrf=&filname;
    %let did=%sysfunc(dopen(&filrf));
    %let lstname=;
    %let memcount=%sysfunc(dnum(&did));
    %put &memcount;
    %if &memcount gt 0 %then %do i=1 %to &memcount;
        %let lstname=%sysfunc(dread(&did,&i));
        %put &lstname;
        PROC IMPORT OUT= w_&i
            DATAFILE= "&dir.\&lstname"
            DBMS=Excel REPLACE;
            SHEET="sheet1$";
            GETNAMES=NO;
            MIXED=NO;
            SCANTEXT=YES;
            USEDATE=YES;
            SCANTIME=YES;
        RUN;
        proc append base=w data=w_&i(where=(f1 ne .));run;
    %end;
    %let rc=%sysfunc(dclose(&did));
%mend;
%test(fil);

这2段代码引自:
姚志勇,SAS编程与数据挖掘商业案例. 2010,P221-222.

使用道具

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

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

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

GMT+8, 2024-4-19 11:52