全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
5109 10
2013-01-10
请问:我有一个12G的大数据,想按照id(从1 to 206)分成206个小文件,用循环可以做到。但是发现每次都要把这个大文件全部先读入,再根据where语句筛选出想要的id的观测值,很耗时间。各位,有更快些的方法吗?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-1-10 09:29:34
给id加个索引试试~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-10 09:30:52
ziyenano 发表于 2013-1-10 09:29
给id加个索引试试~
请问能具体详细点儿吗?谢谢啦!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-10 09:36:43
jianke22 发表于 2013-1-10 09:30
请问能具体详细点儿吗?谢谢啦!
加索引就是用空间换时间~
用sql加个索引
proc sql;
create index id on table_name(id);
没猜错的话,是想把大数据集分割开来去匹配
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-10 09:50:11
ziyenano 发表于 2013-1-10 09:36
加索引就是用空间换时间~
用sql加个索引
proc sql;
data a1 a2 ……a206;
set b;
if id=1 then output a1;
if id=2 then output a2;
.
.
.
run;
类似这种方法是不是也可以?速度会快些吗?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-10 10:28:39
嗯 这样是快很多的
做了个测试
data ex;
do id=1 to 1000000;
output;
end;
run;

data temp;
do i=1 to 100;
temp=cats('test',i);
output;
end;
run;
proc sql noprint;
select temp into:data separated by ' ' from temp;
quit;
%macro test;
data &data;
set ex;
%do i=1 %to 100;
if 10000*%eval(&i-1)<id<=10000*&i
then output test&i;
%end;
run;
%mend;


%test


%macro test1;
%do i=1 %to 100;
data test&i;
set ex;
where 10000*%eval(&i-1)<id<10000*&i;
%end;
run;
%mend;
%test1
明显感觉上面那种方法更快
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群