SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 2119|回复: 4
打印 上一主题 下一主题

SAS分割超大数据集

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2013-1-10 09:24:20 | 只看该作者

SAS分割超大数据集

请问:我有一个12G的大数据,想按照id(从1 to 206)分成206个小文件,用循环可以做到。但是发现每次都要把这个大文件全部先读入,再根据where语句筛选出想要的id的观测值,很耗时间。各位,有更快些的方法吗?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2013-1-10 13:47:42 | 只看该作者

Re: SAS分割超大数据集

不要排序,用hash可以做。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2013-1-11 01:05:37 | 只看该作者

Re: SAS分割超大数据集

若你已知所有可能的ID值,可以在一个数据步内完成, 假如ID值为1-216。
data d1 d2 d3 .... d206;
set olddata;
select(id);
when(1) output d1;
when(2) output d2;
...
when(216) output d216;
otherwise put "ERROR: other ID value found ID=" ID;
end;
run;

若嫌太长可有宏;
%macro tmp;
proc sql;
select distinct id into: allid separated by '|'
from olddata;
%let nid=&sqlobs;
quit;

data %do i=1 %to &nid;d&i %end;;
set olddata;
select(id);
%do i=1 %to &nid;
%let id=%scan(&allid,&i,|);
when(&id) output d&i;
%end;
otherwise put "ERROR: other ID value found ID=" ID;
end;
run;

%mend;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2013-1-12 21:03:55 | 只看该作者

Re: SAS分割超大数据集

[quote="sun59338":8heip1xe]若你已知所有可能的ID值,可以在一个数据步内完成, 假如ID值为1-216。
data d1 d2 d3 .... d206;
set olddata;
select(id);
when(1) output d1;
when(2) output d2;
...
when(216) output d216;
otherwise put "ERROR: other ID value found ID=" ID;
end;
run;

若嫌太长可有宏;
%macro tmp;
proc sql;
select distinct id into: allid separated by '|'
from olddata;
%let nid=&sqlobs;
quit;

data %do i=1 %to &nid;d&i %end;;
set olddata;
select(id);
%do i=1 %to &nid;
%let id=%scan(&allid,&i,|);
when(&id) output d&i;
%end;
otherwise put "ERROR: other ID value found ID=" ID;
end;
run;

%mend;[/quote:8heip1xe]


请问我现在遇到新问题,我想进一步在每个id里按照stkcd进一步分割数据集,每个id对应有一个最大的stkcd的数目。我需要按上面的语句类似地写,即set b只读取一次以节省时间。该怎么写呢?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2013-1-14 21:34:42 | 只看该作者

Re: SAS分割超大数据集

try something like this;
data d1_1 d1_2.. D1_n
d2_1 d2_2...D2_n
..
d216_1 d216_2... D216_n;
set...

...

when(1) do;
select(stkcd);
when('aa') output d1_1;
when('bb') output d1_2;
...
otherwise;
end;
end;
when(2) do;
....
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-3 06:19 , Processed in 0.106597 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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