我只是想知道在proc sql中我们定义了stimer选项。
PROC SQL
选项STIMER | NOSTIMER
指定PROC SQL
是否将每个语句的计时信息写入SAS日志,而不是为整个过程写入累计值。 NOSTIMER
是默认值。
现在以同样的方式如何在数据集步骤中指定时序信息。我没有使用proc sql步骤
data h;
select name,empid
from employeemaster;
quit;
答案 0 :(得分:5)
在数据步骤中没有直接的方法来获取单个语句的时间,但是您可以编写数据步骤代码来查找。问题是数据步骤是按行执行的,所以它与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驱动的。