SAS中文论坛

标题: SAS分割超大数据集 [打印本页]

作者: shiyiming    时间: 2013-1-10 09:24
标题: SAS分割超大数据集
请问:我有一个12G的大数据,想按照id(从1 to 206)分成206个小文件,用循环可以做到。但是发现每次都要把这个大文件全部先读入,再根据where语句筛选出想要的id的观测值,很耗时间。各位,有更快些的方法吗?
作者: shiyiming    时间: 2013-1-10 13:47
标题: Re: SAS分割超大数据集
不要排序,用hash可以做。
作者: shiyiming    时间: 2013-1-11 01:05
标题: 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;
作者: shiyiming    时间: 2013-1-12 21:03
标题: 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只读取一次以节省时间。该怎么写呢?
作者: shiyiming    时间: 2013-1-14 21:34
标题: 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;
....




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