标题: 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;