假设我试图在一个非常大的数据集(近一兆兆字节)中总结一个变量(称之为var_1
)。数据集既长又宽。我的代码看起来像这样:
PROC MEANS DATA=my_big_dataset SUM;
VAR var_1;
RUN;
通过在正在读取的数据集上使用KEEP
选项,我是否会获得任何性能提升?那就是:
PROC MEANS DATA=my_big_dataset (KEEP=var_1) SUM;
VAR var_1;
RUN;
就磁盘I / O而言,我想无论如何都必须完整地读取每条记录。但是,可能需要分配更少的内存来读取记录。任何建议都表示赞赏。
答案 0 :(得分:5)
是的确有所作为。大多数情况下,这并不是一个很大的差异,但如果你开始拥有非常宽或很长的数据集,你将开始看到一些好处。
在以下链接中搜索keep=
...
http://support.sas.com/techsup/technote/ts298.html
如果您遇到性能问题,那么这可能会使您正在做的事情缩短几秒或几秒,但不会将处理时间缩短一半。如果需要,请寻找其他优化技术。
答案 1 :(得分:3)
就datastep而言,除非您指定DROP或KEEP语句,否则所有变量都将被读入PDV。
对于程序,我期望 SAS足够聪明,只能读取程序中使用的任何变量。也许有人可以证实这一点?
您可以轻松构建一些测试来确定这一点。
答案 2 :(得分:3)
答案 3 :(得分:1)
我认为where语句通常比keep选项更有效。 但在这种情况下,一个地方没用,我不确定在proc调用中添加一个keep选项会改变一些东西。
但您可以在日志中测试并检查处理时间。 请告诉我们!
编辑:
我对我拥有的最大数据集之一进行了测试。 使用保持选项我得到:0.03处理时间 如果没有保留选项,我得到:0.01处理时间
所以我猜SAS已经针对这种情况进行了优化。