全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3992 5
2010-08-27
处理大数据排序时往往报硬盘空间不足内存不足等问题
解决方法:
方法一:在proc sort options 选项中加 tagsort选项。此选项简单的说是以时间换空间,即需要的空间较小,但

运行的时间会比较长。
方法二:将大数据集进行拆分,拆分成若干小数据集,对这些小数据集先进行排序,再进行合并


lib= 要排序数据集所在的库名(注意:要大写)
sort_data= 要排序的数据集(注意:要大写)
key= 要排序的字段
var=拆分数据集用到的字段(注意:要大写)

num=拆分数据集的个数
fnl_table= 排序后的输出数据集

/******************************************************************************/
%MACRO SORT_LARGE_DATA(LIB=,SORT_DATA=,KEY=,VAR=,NUM=,FNL_DATA=);

DATA _NULL_;
     SET SASHELP.VCOLUMN(WHERE=(LIBNAME="&LIB." AND MEMNAME="&SORT_DATA"));
   IF UPCASE(NAME)="&VAR." THEN CALL SYMPUT ('TYPE',UPCASE(TYPE));
RUN;

%MACRO SELECT;
%IF &TYPE.=NUM %THEN           
%STR(WHERE  MOD(&VAR.,&NUM.)=&I.-1;);
%IF &TYPE.=CHAR %THEN
%STR(WHERE SUBSTR(&VAR.,LENGTH(&VAR.),1)=:"&I";);
%MEND;

%DO I=1
%TO &NUM.;
PROC SORT DATA=&LIB..&SORT_DATA  OUT=PART&I;
BY  &KEY.;
%SELECT;
RUN;
%END;

DATA  &FNL_DATA;
SET
%DO I=1
%TO &NUM.;
PART&I
%END;
;
BY  &KEY.;
RUN;
%MEND ;
/***************************************************************************************/

举例如:%SORT_LARGE_DATA(LIB=SASHELP,SORT_DATA=CLASS,KEY=NAME,VAR=AGE,NUM=10,FNL_DATA=WORK.A);
二维码

扫码加我 拉你入群

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

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

全部回复
2010-8-27 12:14:11
谢谢分享
可能是养尊处优惯了,不太关心sort的开销问题
1 小试了下,最后set+by在时间上开销增加还是很明显的,空间上不是很清楚,不过应该远小于原数据直接排序
2 按mod方法来分会不会使得最后set+by的开销最大化,个人感觉按sort变量大小来分最后set+by的开销较小,但是不知道分布的前提下,比较麻烦
3 %STR(WHERE SUBSTR(&VAR.,LENGTH(&VAR.),1)=:"&I";);是不是取字符型变量的最后1位啊......
二维码

扫码加我 拉你入群

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

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

2010-8-27 12:54:10
如何以空间换时间?
二维码

扫码加我 拉你入群

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

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

2010-8-27 13:39:45
2# soporaeternus
确实目前只是实现而已
兄台有没有兴趣优化一下

%STR(WHERE SUBSTR(&VAR.,LENGTH(&VAR.),1)=:"&I";);确实是取最后一位 比如客户参考号 其最后一位基本满足均匀分布
二维码

扫码加我 拉你入群

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

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

2010-8-27 13:43:27
3# chouxiangdaishu
TAGSORT stores only the BY variables and the observation numbers in temporary files. The BY variables and the observation numbers are called tags. At the completion of the sorting process, PROC SORT uses the tags to retrieve records from the input data set in sorted order.
Restriction:The TAGSORT option is not compatible with the OVERWRITE option. [/td]
Interaction:The TAGSORT option is not supported by the multi-threaded sort.[/td]
Tip:When the total length of BY variables is small compared with the record length, TAGSORT reduces temporary disk usage considerably.
二维码

扫码加我 拉你入群

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

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

2010-8-27 14:37:16
对大数据的内存消耗倒不是 很在意。我用9.2的panel步时,会有内存不足的情况。看了错误提示,按照提示修改也不行。在网上搜索了一下,倒是有几个帖子相近,但是也不解决问题。跟朱式武老师请教过,也没有什么解决的方法。不知你遇到过这种情况吗?

我跑panel的时候,超过10万个观测的话,就完蛋了。应该是java的问题。不知道如何解决。
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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