什么对 SAS 数据集性能的影响更大 - 观察数或变量数?
Posted
技术标签:
【中文标题】什么对 SAS 数据集性能的影响更大 - 观察数或变量数?【英文标题】:What impacts SAS data set performance more - number of observations or number of variables? 【发布时间】:2010-12-06 16:08:06 【问题描述】:在 SAS 中处理不同的数据集一两个月后,在我看来,数据集的变量越多,在数据集上运行 PROC 和其他操作所需的时间就越多。但是,如果我有 5 个变量,但有 100 万个观察值,则性能不会受到太大影响。
虽然我对观察结果或变量是否会影响性能感兴趣,但我也想知道在查看 SAS 性能时是否还遗漏了其他因素?
谢谢!
【问题讨论】:
【参考方案1】:对于相同大小的数据集(行*列),我相信具有更多变量的数据集通常会更慢。我尝试创建两个具有 1 行和 10000 列或 1 列和 10000 行的数据集。具有更多变量的那个会占用更多的内存和时间。
options fullstimer;
data a;
retain var1-var10000 1;
run;
data b(drop=i);
do i=1 to 10000;
var1=i;
output;
end;
run;
在日志上
31 options fullstimer;
32 data a;
33 retain var1-var10000 1;
34 run;
NOTE: The data set WORK.A has 1 observations and 10000 variables.
NOTE: DATA statement used (Total process time):
real time 0.23 seconds
user cpu time 0.20 seconds
system cpu time 0.03 seconds
Memory 5382k
OS Memory 14208k
Timestamp 10/14/2009 2:03:57 PM
35 data b(drop=i);
36 do i=1 to 10000;
37 var1=i;
38 output;
39 end;
40 run;
NOTE: The data set WORK.B has 10000 observations and 1 variables.
NOTE: DATA statement used (Total process time):
real time 0.01 seconds
user cpu time 0.00 seconds
system cpu time 0.01 seconds
Memory 173k
OS Memory 12144k
Timestamp 10/14/2009 2:03:57 PM
您还应该查看BUFNO= 和BUFSIZE=。如果您必须多次访问一个数据集,您可以考虑使用SASFILE 以及将整个数据集存储在内存中。
【讨论】:
SASFILE 听起来很有用,但我的数据集对于我正在使用的机器来说太大了(~1.8gb,当我尝试对其进行 SASFILE 时,我经常遇到内存不足的错误)。感谢您进行这些快速测试!【参考方案2】:我不能完全阐明(并且正在做出有根据的猜测),但我认为这与多种因素有关,包括将整条记录读入 PDV,这意味着更多数据位于内存中有很多变量。
可能值得对压缩数据集进行一些测量,因为 I/O 通常是瓶颈。
SAS 数据集选项:
data foo(compress=yes);
...
run;
【讨论】:
谢谢,我想我今天试试压缩。我正在运行的机器上的 HD 在运行我目前正在使用的数百个 PROC REPORT 语句时不断抖动,所以我认为这绝对是 I/O 并且压缩可能会有所帮助! 压缩对我的大型数据集有很大帮助。谢谢! 除了单个数据集,您还可以将压缩设置为全局选项或不同粒度级别的库选项。以上是关于什么对 SAS 数据集性能的影响更大 - 观察数或变量数?的主要内容,如果未能解决你的问题,请参考以下文章