SAS中文论坛

标题: 求:如何Proc import多个数据表~~~SOS [打印本页]

作者: shiyiming    时间: 2010-4-19 19:35
标题: 求:如何Proc import多个数据表~~~SOS
对于相同格式的N个数据表,可以怎么实现用一个语句读入所有数据.
例如:Table1.xls,Table2.xls……TableN.xls.
(如果调用宏当然可以,还有其它更简单的方法吗?高手指教)
作者: shiyiming    时间: 2010-4-20 05:50
标题: Re: 求:如何Proc import多个数据表~~~SOS
矛盾:有了可替代的方法,还喊sos?真是精益求精啊。
作者: shiyiming    时间: 2010-4-20 08:45
标题: Re: 求:如何Proc import多个数据表~~~SOS
一句话实现导入多个EXCEL工作薄,好高啊。要不用libname试一试?
作者: shiyiming    时间: 2010-4-20 11:41
标题: Re: 求:如何Proc import多个数据表~~~SOS
to jingju11
数据表比较多,用宏方式也相当麻烦,请高人指教有其它更便利的方式否?
作者: shiyiming    时间: 2010-4-20 11:42
标题: Re: 求:如何Proc import多个数据表~~~SOS
to tanzhen_mysas
Libname?请多指教.
作者: shiyiming    时间: 2010-4-20 12:48
标题: Re: 求:如何Proc import多个数据表~~~SOS
libname test excel "d:\test.xls";

data test;
set xls.'test1$'n
     xls.'test2$'n
     .
     .
     xls.'testn$'n
;
run;
作者: shiyiming    时间: 2010-4-20 14:52
标题: Re: 求:如何Proc import多个数据表~~~SOS
1、这program不是我写的,好象是我从一PAPER上COPY的,但来源忘记了
2、我记的当时看了一遍,加了注释好象还改了点,但具体改哪不记的了
3、仅供参考
[code:t1dheis3]%macro ReadXls (dir=);
        /* excel文件名和sheet名必须符合SAS的命名规则,文件名+sheet名必须小于32个字符 */
        options xwait nomprint nosymbolgen;
        /* 获取目录下xls文件的文件名列表 */
        %sysexec cd &dir;
        %sysexec dir *.xls /b/o:n > flist.txt;
        data _filename;
                length filen $50;
                infile "&dir./flist.txt";
                input filen $;
        run;
        %sysexec del flist.txt;
        proc sql noprint;
                /* 计算xls文件数量,存入宏变量cntfile */
                select count(filen) into :cntfile from _filename;
                /* 如果xls文件数量大于等于1,创建宏变量系列filen1-filenN,存储xls的文件名 */
                %if &cntfile>=1 %then
                        %do;
                                select filen into :filen1-:filen%left(&cntfile)
                                        from _filename;
                        %end;
        quit;
        /* 外层do循环,针对xls文件 */
        %do i=1 %to &cntfile;
                /* 为xls文件创建libref */
                libname excellib excel "&dir.\&&filen&i";
                proc sql noprint;
                        /* 创建sas dataset sheetname存储当前xls文件的sheet名 */
                        create table _sheetname as
                                select tranwrd(memname, "''", "'") as sheetname
                                        from sashelp.vstabvw
                                        where libname="EXCELLIB";
                        /* 计算sheet的数量,存入宏变量cnt_sht*/
                        select count(DISTINCT sheetname) into :cnt_sht
                                from _sheetname;
                        /* 创建宏变量系列sheet1-sheetN,存储sheet名 */
                        select DISTINCT sheetname into :sheet1 - :sheet%left(&cnt_sht)
                                from _sheetname;
                quit;
                /* 内层do循环,针对sheet */
                %do j=1 %to &cnt_sht;
                        /* import sheet */
                        proc import datafile="&dir.\&&filen&i"
                                out=%scan(&&&filen&i,1,'.')_sheet&j replace;
                                sheet="&&sheet&j";
                                getnames=yes;
                                mixed=yes;
                        run;
                        /* 标志数据源 */
                        data %scan(&&&filen&i,1,'.')_sheet&j;
                                length Flag $32;
                                set %scan(&&&filen&i,1,'.')_sheet&j;
                                flag="%scan(&&&filen&i,1,'.')_sheet&j";
                        run;
                %end;
                /* 解除库引用 */
                libname excellib clear;
        %end;
        proc datasets library=work nolist;
                delete _filename _sheetname/ memtype=data;
        quit;
%mend ReadXls;

%readxls(dir=C:\Demo)[/code:t1dheis3]
作者: shiyiming    时间: 2010-4-20 19:15
标题: Re: 求:如何Proc import多个数据表~~~SOS
<!-- s:shock: --><img src="{SMILIES_PATH}/icon_eek.gif" alt=":shock:" title="Shocked" /><!-- s:shock: --> ,先看看程序~~~




欢迎光临 SAS中文论坛 (http://www.mysas.net/forum/) Powered by Discuz! X3.2