如何获取数据步骤查询的计时信息

时间:2012-10-04 14:04:09

标签: sas

我只是想知道在proc sql中我们定义了stimer选项。 PROC SQL选项STIMER | NOSTIMER指定PROC SQL是否将每个语句的计时信息写入SAS日志,而不是为整个过程写入累计值。 NOSTIMER是默认值。

现在以同样的方式如何在数据集步骤中指定时序信息。我没有使用proc sql步骤

data h;
select name,empid
from employeemaster;
quit;

2 个答案:

答案 0 :(得分:5)

单独的PROC SQL步骤实际上是单独的数据步骤,因此从某种意义上说,您总是从SAS获得相同的信息。您要问的是如何找出'选择名称'与'empid'相比需要多长时间。

在数据步骤中没有直接的方法来获取单个语句的时间,但是您可以编写数据步骤代码来查找。问题是数据步骤是按行执行的,所以它与PROC SQL STIMER细节完全不同;除非你正在做一些像哈希表查找这样复杂的事情,否则你在数据步骤中所做的几乎不会花费很长时间。需要很长时间才能首先写出数据,然后再读取数据。

如果您担心这一点,您可以使用一些选项来排除长数据步骤。选项MSGLEVEL =我将为您提供有关索引使用,合并详细信息等的信息,如果您不确定为什么需要花费很长时间来执行某些操作,这可能会有所帮助(请参阅SAS文档中的http://goo.gl/bpGWL更多信息)。您可以编写自己的时间戳:

data test;
set sashelp.class sashelp.class;
_t=time();
put _t=;
run;

由于大多数数据步骤迭代不会花费很长时间,但是如果您正在做一些花哨的事情可能会有所帮助,那么这种情况并不会显示出很多用处。您还可以使用条件语句仅以特定间隔打印时间 - 例如,在FIRST.ID中,例如在BY ID工作的进程中;。

最终,虽然你已经从笔记中获得的信息是最有用的。在PROC SQL中,您需要STIMER信息,因为SQL同时执行多项操作,而SAS允许/让您逐步执行所有操作。例如:

PROC SQL;
create table X as select * from A,B where A.ID=B.ID;
quit;

是一步 - 但在SAS中,这将是:

proc sort data=a; by ID; run;
proc sort data=b; by ID; run;
data x; 
merge a(in=a) b(in=b);
by id;
if a and b;
run;

为此,您将获得有关SAS中每个步骤(两种排序和合并)的持续时间的信息,这与STIMER告诉您的内容类似。

答案 1 :(得分:-1)

没办法。 PROC SQL STIMER记录每个单独的可执行SQL语句/查询的时间。 在数据步骤中,如您所知,数据步骤循环发生,每次观察观察,因此数据步骤语句时间将类似于每次观察,比如说事务。无论如何,这不会描述花费时间的所有细节 - 等待磁盘读取,写入等。 所以我想这不会很有用。通常,SAS性能是I / O驱动的。