在SAS数据集上使用KEEP选项是否可以提高读取性能?

时间:2012-05-03 12:34:07

标签: sas

假设我试图在一个非常大的数据集(近一兆兆字节)中总结一个变量(称之为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而言,我想无论如何都必须完整地读取每条记录。但是,可能需要分配更少的内存来读取记录。任何建议都表示赞赏。

4 个答案:

答案 0 :(得分:5)

是的确有所作为。大多数情况下,这并不是一个很大的差异,但如果你开始拥有非常宽或很长的数据集,你将开始看到一些好处。

在以下链接中搜索keep= ...

http://support.sas.com/techsup/technote/ts298.html

如果您遇到性能问题,那么这可能会使您正在做的事情缩短几秒或几秒,但不会将处理时间缩短一半。如果需要,请寻找其他优化技术。

答案 1 :(得分:3)

就datastep而言,除非您指定DROP或KEEP语句,否则所有变量都将被读入PDV。

对于程序,我期望 SAS足够聪明,只能读取程序中使用的任何变量。也许有人可以证实这一点?

您可以轻松构建一些测试来确定这一点。

答案 2 :(得分:3)

我没有发现任何迹象表明KEEP语句对PROC MEANS更有效(或必要)。

但是,您可以使用WHERE语句以及在MEANS代码中使用其他OPTIONS来提高效率。

答案 3 :(得分:1)

我认为where语句通常比keep选项更有效。 在这种情况下,一个地方没用,我不确定在proc调用中添加一个keep选项会改变一些东西。

但您可以在日志中测试并检查处理时间。 请告诉我们!

编辑:

我对我拥有的最大数据集之一进行了测试。 使用保持选项我得到:0.03处理时间 如果没有保留选项,我得到:0.01处理时间

所以我猜SAS已经针对这种情况进行了优化。