什么对 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 数据集性能的影响更大 - 观察数或变量数?的主要内容,如果未能解决你的问题,请参考以下文章

SAS - 如何从数据集中获取最后的“n”个观察结果?

sas set中使用keep=会影响原数据集

SAS Proc SQL 不存在查询与数据步骤 a=1 b=0

你的价格格式

将时间序列与变量具有相同名称的不同观察数量合并(SAS)

哪一个对 IPC 性能的影响更大?上下文切换或进程数?