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

Lov*_*ust 3 sorting sas

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

我知道有几种方法可以做到这一点.我通常使用的是retain声明.

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

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

小智 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;
Run Code Online (Sandbox Code Playgroud)

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

  • 好一个.当然,视图将是重新排序数据集列的最便宜方式. (2认同)