在SAS数据集上使用KEEP选项是否会提高读取性能?
假设我试图在一个非常大的数据集中(接近1 TB)汇总一个变量(称之为在SAS数据集上使用KEEP选项是否会提高读取性能?,sas,Sas,假设我试图在一个非常大的数据集中(接近1 TB)汇总一个变量(称之为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而言,我认为无论发生什么情况,都必须完整地读取每条
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而言,我认为无论发生什么情况,都必须完整地读取每条记录。但可能需要分配更少的内存来读取记录。感谢您的建议。对于数据步骤,除非您指定DROP或KEEP语句,否则所有变量都将读入PDV 对于过程,我希望SAS足够聪明,可以只读取过程中使用的任何变量。也许有人能证实这一点
您可以很容易地构造一些测试来确定这一点。我没有发现任何迹象表明KEEP语句对于PROC MEANS更有效(或更必要)
然而,你可以通过使用一条语句以及在经济状况代码中使用其他语句来提高效率。是的,它确实会产生不同。大多数情况下,差异不大,但如果您开始拥有非常宽或非常长的数据集,您将开始看到一些好处 在下面的链接上搜索
keep=
如果您有性能问题,那么这可能会减少几秒或几秒,但不会将处理时间减少一半。如果需要,可以寻找其他优化技术。我认为where语句通常比keep选项更有效。 但是在这种情况下,where是无用的,我不确定在proc调用中添加keep选项会改变什么 但是您可以在日志中测试和检查进程时间。 让我们知道 编辑: 我用我拥有的最大数据集之一进行了测试。 通过保留选项,我得到:0.03处理时间 如果没有保留选项,我得到:0.01处理时间
因此,我想SAS已经针对这种情况进行了优化。好建议-在接下来的几次大型阅读中,我将尝试进行一些基准测试。