解决方法:
方法一:在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);



雷达卡



京公网安备 11010802022788号







