全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3638 1
2017-12-12
最近碰到一个问题,需要批量导入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;

二维码

扫码加我 拉你入群

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

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

全部回复
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.
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群