我有一个数据temp
,其中包含变量A1,A2,...... Amax。我想重新安排它的内部顺序,这样一旦打开它,它将显示A2,A5,.....
我知道有几种方法可以做到这一点。我通常使用retain
语句。
如果观察次数很多(N> 1,000,000),那么最有效的方法是什么?使用retain
或proc sql
或其他内容的数据步骤?
效率最高意味着我的处理时间最短。如果您还可以提供每种方法所需的内存和磁盘空间分析,我将不胜感激。
答案 0 :(得分:7)
几年前,我参加了他们在英国的一个主要办事处举行的SAS会议。他们举办了一个非常类似于您的问题的研讨会,他们研究了重新排序和合并/加入数据集的不同技术的速度。
SAS提出的3种方式:
传统Datastep(保留)
Proc SQL(创建表格)
哈希表(特别是围绕合并表不一定要重新排序)
有趣的结果是,除非你在谈论一个非常大的数据集,否则retain和create table是均匀匹配的。
显然,如果你想合并/加入并重新排序,那么proc sql就是这样的方式,因为使用数据步骤进行合并需要先排序,而proc sql则不行。如果真的很大,Hash表可以节省90%的合并/连接处理时间。
作为小组讨论的一部分,其中一个结果是在重新排序时使用大型数据集改进了视图的IO性能:
proc sql noprint;
create view set2 as
select title, *
from set1;
quit;
** OR;
data set2 / view=set2;
retain title salary name;
set set1;
run;