一尘不染

在SAS,过程摘要中,哪些统计数据计算速度更快?

sql

我需要一个理论上的答案。

假设您有一个包含15亿行的表(该表是使用DB2-Blu创建为基于列的)。

您正在使用SAS,并且将Proc Summary通过对等组使用最小值/最大值/平均值,标准偏差值和百分位数10,百分位数90做一些统计。

例如,您有30.000个对等组,每个对等组中有50.000个值(总计15亿个值)。

在另一种情况下,您有300万个对等组,每个对等组中也有50个值。这样,您又有了15亿的总价值。

如果您的对等组较少,但每个对等组中的值更多,会更快吗?否则,使用更多的对等组会更快,但每个对等组中的值会更少。

我可以测试第一种情况(30.000个对等组和每个对等组50.000个值),大约用了16分钟。但是我无法测试第二种情况。

如果我有300万个对等组,并且每个对等组中都有50个值,那么您可以写出运行时的近似预测吗?

这个问题的另一个维度。如果改用这些统计信息,会更快Proc SQL吗?

示例代码如下:

proc summary data = table_blu missing chartype;
   class var1 var2; /* Var1 and var2 are toghether peer-group  */
   var values;

   output out = stattable(rename = (_type_ = type) drop = _freq_)
   n=n min=min max=max mean=mean std=std q1=q1 q3=q3 p10=p10 p90=p90 p95=p95 
;
run;

阅读 161

收藏
2021-05-23

共1个答案

一尘不染

因此,这里有很多事情要考虑。

首先,性能上最大的一点是将数据从DB2导入SAS。(我假设这不是SAS的数据库实例-
如果是,请更正)。那是一张大表,在电线上移动它需要时间。因此,如果您可以使用SQL语句在DB2内计算所有这些统计信息,那么这可能是您最快的选择。

因此,假设您已将该表下载到SAS服务器:

CLASS与未排序的表相比,按变量排序的表处理起来要快得多。如果SAS知道该表已排序,则不必扫描该表以查找要放入组的记录,它可以进行块读取,而不是随机IO。

如果未对表进行排序,则组数越多,则必须进行的表扫描越多。

关键是,在未经排序的过程中,将数据从高清数据传输到CPU的速度至关重要。

从那里,您会遇到内存和CPU问题。PROC
Summary是多线程的,SAS一次将读取N个组。如果组大小可以容纳为该线程分配的内存,则不会有问题。如果组的大小太大,则SAS必须分页。

我将问题缩小为一个1500万行的示例:

%let grps=3000;
%let pergrp=5000;

未分类:

NOTE: There were 15000000 observations read from the data set
      WORK.TEST.
NOTE: The data set WORK.SUMMARY has 3001 observations and 9
      variables.
NOTE: PROCEDURE SUMMARY used (Total process time):
      real time           20.88 seconds
      cpu time            31.71 seconds

排序:

NOTE: There were 15000000 observations read from the data set
      WORK.TEST.
NOTE: The data set WORK.SUMMARY has 3001 observations and 9
      variables.
NOTE: PROCEDURE SUMMARY used (Total process time):
      real time           5.44 seconds
      cpu time            11.26 seconds

============================

%let grps=300000;
%let pergrp=50;

未分类:

NOTE: There were 15000000 observations read from the data set
      WORK.TEST.
NOTE: The data set WORK.SUMMARY has 300001 observations and 9
      variables.
NOTE: PROCEDURE SUMMARY used (Total process time):
      real time           19.26 seconds
      cpu time            41.35 seconds

排序:

NOTE: There were 15000000 observations read from the data set
      WORK.TEST.
NOTE: The data set WORK.SUMMARY has 300001 observations and 9
      variables.
NOTE: PROCEDURE SUMMARY used (Total process time):
      real time           5.43 seconds
      cpu time            10.09 seconds

我运行了几次,运行时间相似。排序时间大致相等,并且速度更快。

组越多/组越少,未排序的速度就越快,但是从总CPU使用率来看,它更高。我的笔记本电脑具有非常快的SSD,因此IO可能不是限制因素-
HD能够满足多核CPU的需求。在HD速度较慢的系统上,总运行时间可能会有所不同。

最后,它在很大程度上取决于数据的结构以及服务器和数据库的详细信息。

2021-05-23