5

假设我试图var_1在一个非常大的数据集(近 TB)中总结一个变量(称为它)。数据集既长又宽。我的代码如下所示:

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

4 回答 4

5

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

keep=在下面的链接中搜索...

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

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

于 2012-05-03T19:44:40.780 回答
3

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

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

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

于 2012-05-03T12:53:30.663 回答
3

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

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

于 2012-05-03T14:27:05.930 回答
1

我认为 where 语句通常比 keep 选项更有效。 在这种情况下, where 是无用的,我不确定在 proc 调用中添加 keep 选项会改变什么。

但是您可以在日志中测试和检查处理时间。让我们知道!

编辑:

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

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

于 2012-05-04T08:16:16.227 回答