在SAS中重新排序列的最有效方法

时间:2014-09-22 10:34:14

标签: sorting sas

我有一个数据temp,其中包含变量A1,A2,...... Amax。我想重新安排它的内部顺序,这样一旦打开它,它将显示A2,A5,.....

我知道有几种方法可以做到这一点。我通常使用retain语句。

如果观察次数很多(N> 1,000,000),那么最有效的方法是什么?使用retainproc sql或其他内容的数据步骤?

效率最高意味着我的处理时间最短。如果您还可以提供每种方法所需的内存和磁盘空间分析,我将不胜感激。

1 个答案:

答案 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;

(参考此处:http://www2.sas.com/proceedings/sugi27/p019-27.pdf