2009-10-14 41 views
3

在使用SAS中的不同数据集一到两个月后,在我看来,数据集所具有的变量越多,在数据集上运行PROC和其他操作所需的时间就越多。然而,如果我有5个变量,但有100万个观测值,性能不会受到太多影响。影响SAS数据集性能的因素更多 - 观察次数或变量数量?

虽然我对如果观察结果或变量影响性能感兴趣,但我还想知道在查看SAS性能时是否还有其他因素?

谢谢!

回答

4

对于相同大小的数据集(行*列),具有更多变量的数据集通常会比较慢,我相信。我试着创建两个数据集,分别是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以将整个数据集存储在内存中。

+0

SASFILE听起来是有用的,但我的数据集的机器我在(〜1.8GB太大,我也得到不断未足够内存错误,当我尝试到SASFILE吧)。感谢您做这些快速测试! – chucknelson 2009-10-15 12:19:26

2

我不能完全阐明(并且正在进行有根据的猜测),但我想这与一系列因素有关,包括整个记录被读入PDV,这意味着更多的数据位于有许多变量的记忆。

对压缩数据集进行一些测量可能是值得的,因为I/O往往是瓶颈。

SAS数据集选项:

data foo(compress=yes); 
... 
run; 
+0

谢谢,我想我今天会尝试压缩。我正在运行的机器上的HD在运行数百个我正在使用的PROC REPORT语句时经常发生颠簸,所以我认为这绝对是I/O,compress可能会有所帮助! – chucknelson 2009-10-15 12:20:38

+0

压缩对我的大数据集帮助很大。谢谢! – chucknelson 2009-10-15 17:00:24

+0

除了单个数据集之外,您还可以将压缩设置为全局选项或将库设置为不同粒度级别的库选项。 – cmjohns 2009-10-15 18:07:36