因此,这里有很多事情要考虑。
首先,性能上最大的一点是将数据从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 time20.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 time5.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 time19.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 time5.43 seconds cpu time 10.09 seconds
我运行了几次,运行时间相似。排序时间大致相等,并且速度更快。
组越多/组越少,未排序的速度就越快,但是从总CPU使用率来看,它更高。我的笔记本电脑具有非常快的SSD,因此IO可能不是限制因素-
HD能够满足多核CPU的需求。在HD速度较慢的系统上,总运行时间可能会有所不同。
最后,它在很大程度上取决于数据的结构以及服务器和数据库的详细信息。



