SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1264|回复: 8
打印 上一主题 下一主题

求助:导入并合并大量数据集

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2008-11-14 10:50:55 | 只看该作者

求助:导入并合并大量数据集

求助:导入并合并大量数据集

因工作需要,有大量同格式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 -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2008-11-14 10:59:32 | 只看该作者

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

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2008-11-14 23:29:06 | 只看该作者

Re: 求助:导入并合并大量数据集

兄弟,谢谢了。
我发现宏有点不好学哦。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2008-11-16 17:10:37 | 只看该作者

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文件合并
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2008-11-25 11:27:08 | 只看该作者

Re: 求助:导入并合并大量数据集

如果各个数据集的名称没有规律又该怎么做呢?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2008-11-25 11:37:27 | 只看该作者

Re: 求助:导入并合并大量数据集

将你的表放在一个自己建立的库里面,然后从字典里面去读取所有表名到红变量
接着就是set红变量
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2008-11-25 16:59:58 | 只看该作者

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

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2008-11-25 22:20:25 | 只看该作者

Re: 求助:导入并合并大量数据集

可以用filename中的pipe把指定路径下的文件名得到,然后写个宏依次读取这个文件名列表中的文件就可以了,不用看他的文件有多少。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2008-11-26 15:36:17 | 只看该作者

Re: 求助:导入并合并大量数据集

当数据集很多很大时时,楼上的做法把所有的数据集全部导入,可能占用很大的内存,不如每次导入一个,跟前一个合并,这样内存中就只有已经合并了的数据集和要导入的数据集。应该会节省很多空间的
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-5 05:20 , Processed in 0.070522 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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