SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 754|回复: 7
打印 上一主题 下一主题

求:如何Proc import多个数据表~~~SOS

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2010-4-19 19:35:09 | 只看该作者

求:如何Proc import多个数据表~~~SOS

对于相同格式的N个数据表,可以怎么实现用一个语句读入所有数据.
例如:Table1.xls,Table2.xls……TableN.xls.
(如果调用宏当然可以,还有其它更简单的方法吗?高手指教)
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2010-4-20 05:50:31 | 只看该作者

Re: 求:如何Proc import多个数据表~~~SOS

矛盾:有了可替代的方法,还喊sos?真是精益求精啊。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2010-4-20 08:45:55 | 只看该作者

Re: 求:如何Proc import多个数据表~~~SOS

一句话实现导入多个EXCEL工作薄,好高啊。要不用libname试一试?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2010-4-20 11:41:32 | 只看该作者

Re: 求:如何Proc import多个数据表~~~SOS

to jingju11
数据表比较多,用宏方式也相当麻烦,请高人指教有其它更便利的方式否?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2010-4-20 11:42:12 | 只看该作者

Re: 求:如何Proc import多个数据表~~~SOS

to tanzhen_mysas
Libname?请多指教.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2010-4-20 12:48:31 | 只看该作者

Re: 求:如何Proc import多个数据表~~~SOS

libname test excel "d:\test.xls";

data test;
set xls.'test1$'n
     xls.'test2$'n
     .
     .
     xls.'testn$'n
;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2010-4-20 14:52:05 | 只看该作者

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2010-4-20 19:15:15 | 只看该作者

Re: 求:如何Proc import多个数据表~~~SOS

<!-- s:shock: --><img src="{SMILIES_PATH}/icon_eek.gif" alt=":shock:" title="Shocked" /><!-- s:shock: --> ,先看看程序~~~
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-3-3 12:26 , Processed in 0.135912 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表