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