SAS中文论坛

标题: 求助:导入并合并大量数据集 [打印本页]

作者: shiyiming    时间: 2008-11-14 10:50
标题: 求助:导入并合并大量数据集
求助:导入并合并大量数据集

因工作需要,有大量同格式EXCEL文档,取名已经批量改为s1.xls   s2.xls   s3.xls   ...   s52.xls。

已经用宏命令批量导入成数据集s1  s2  s3  ...   s52。

现需要用
data NewData;
set s1  s2  s3   ...   s52;
run;
来合并入一个新数据集NewData。

我不希望输入52个数据集名称,如何用宏和循环来完成
“set s1  s2  s3   ...   s52;”
这个语句呢。

谢谢兄弟姐妹们了。

<!-- e --><a href="mailto:liurd@swufe.edu.cn">liurd@swufe.edu.cn</a><!-- e -->
作者: shiyiming    时间: 2008-11-14 10:59
标题: Re: 求助:导入并合并大量数据集
[code:gb0i4pzh]%macro a(num);
data class;
     set %do i=1 %to &amp;num;
              class&amp;i
                  %end;
                  ;
run;
%mend;
%a(2);[/code:gb0i4pzh]
作者: shiyiming    时间: 2008-11-14 23:29
标题: Re: 求助:导入并合并大量数据集
兄弟,谢谢了。
我发现宏有点不好学哦。
作者: shiyiming    时间: 2008-11-16 17:10
标题: Re: 求助:导入并合并大量数据集
分两步:
第一步先生成一个文件,其变量是name,值为s1 s2...s52;
[code:35trujqd]data tem(keep=name);
        x=0;
        do i=1 to 52;
        x=x+1;
        name='s'||trim(left(put(x,6&#46;)));
        output;
        end;
run;[/code:35trujqd]
第二步:编写Macro从外部导入excel文件。
[code%macro in(name=);       
        PROC IMPORT OUT= &amp;name
               DATAFILE= &quot;[color=#4040FF:35trujqd]F:\EXCEL FILES[/color:35trujqd]\&amp;name..xls&quot;   /*\&amp;name..xls之前的路径你自己设定,&amp;name..xls不可改变*/
               DBMS=EXCEL REPLACE;
     SHEET=&quot;Sheet1$&quot;;
     GETNAMES=YES;
     MIXED=NO;
     SCANTEXT=YES;
     USEDATE=YES;
     SCANTIME=YES;
RUN;
%mend;[/code]
第三步:调用宏
[code:35trujqd]data _null_;
        set   tem;
        call execute('%in(name= '||name||' )');          
run;[/code:35trujqd]

第四部:用二楼的方法将导入的sas文件合并
作者: shiyiming    时间: 2008-11-25 11:27
标题: Re: 求助:导入并合并大量数据集
如果各个数据集的名称没有规律又该怎么做呢?
作者: shiyiming    时间: 2008-11-25 11:37
标题: Re: 求助:导入并合并大量数据集
将你的表放在一个自己建立的库里面,然后从字典里面去读取所有表名到红变量
接着就是set红变量
作者: shiyiming    时间: 2008-11-25 16:59
标题: Re: 求助:导入并合并大量数据集
可以这样处理:
%macro names(name,number);
%do n=1 %to &amp;number;
PROC IMPORT OUT= &amp;name&amp;n
            DATAFILE= &quot;数据来源地址&quot;
            DBMS=EXCEL REPLACE;
     SHEET=&quot;Sheet1$&quot;;
     GETNAMES=YES;
     MIXED=NO;
     SCANTEXT=YES;
     USEDATE=YES;
     SCANTIME=YES;

%end;
%mend names;
%names(s,59);
run;
%macro merge(number);
data b;
set %do i=1 %to &amp;number;
s&amp;i
%end;
;
run;
%mend merge;
%merge(52);
run;
作者: shiyiming    时间: 2008-11-25 22:20
标题: Re: 求助:导入并合并大量数据集
可以用filename中的pipe把指定路径下的文件名得到,然后写个宏依次读取这个文件名列表中的文件就可以了,不用看他的文件有多少。
作者: shiyiming    时间: 2008-11-26 15:36
标题: Re: 求助:导入并合并大量数据集
当数据集很多很大时时,楼上的做法把所有的数据集全部导入,可能占用很大的内存,不如每次导入一个,跟前一个合并,这样内存中就只有已经合并了的数据集和要导入的数据集。应该会节省很多空间的




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