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

4
我有一个数据 temp 包含变量 A1, A2, ... Amax. 我想重新排列它的内部顺序,以便一旦我们打开它,它将显示 A2, A5, .....
我知道有几种方法可以做到这一点。我通常使用 retain 语句。
如果观测值的数量很大 (N>1,000,000),完成此操作最有效的方式是什么?使用 retainproc sql 或其他方法的数据步骤?
最有效意味着处理时间最短。如果您能够提供每种方法所需的内存和磁盘空间的分析,我将不胜感激。
1个回答

9
几年前,我参加了SAS在英国的一个主要办事处举办的会议。他们举办了一个与您提出的问题非常相似的研讨会,研究了重新排序和合并/连接数据集的不同技术的速度。
SAS提供的三种方法是:
- 传统的Datastep(保留) - Proc SQL(创建表) - Hash Tables(特别是合并表格而不一定是重新排序)
有趣的结果是,除非你谈论的是非常大的数据集,否则保留和创建表都是平局。
显然,如果您想要合并/连接和重新排序,则使用proc sql是最好的选择,因为使用数据步骤进行合并需要先进行排序,而proc sql则不需要。如果数据集真的很大,哈希表可以节省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


需要翻译的内容涉及IT技术,需要进一步了解具体内容并进行翻译。请提供更具体的信息。

2
不错。当然,视图将是重新排序数据集列的最便宜方式。 - Stig Eide
1
如果你需要重新排序69个变量,这些变量的命名方式为var_1-var_23、vra_1-vra_23和blah_1-blah_23,并且你想要按照var_1 vra_1 blah_1、var_2 vra_2 blah_2等顺序排列,是否有更简单的方法呢?:( - zazu
@zazu 看起来需要使用宏 :) - jaymarvels

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接