我只是想知道在 proc sql 中我们定义了 stimer 选项。该PROC SQL
选项STIMER | NOSTIMER
指定是否PROC SQL
将每个语句的计时信息写入 SAS 日志,而不是写入整个过程的累积值。NOSTIMER
是默认值。
现在以同样的方式如何在数据集步骤中指定时间信息。我没有使用 proc sql 步骤
data h;
select name,empid
from employeemaster;
quit;
我只是想知道在 proc sql 中我们定义了 stimer 选项。该PROC SQL
选项STIMER | NOSTIMER
指定是否PROC SQL
将每个语句的计时信息写入 SAS 日志,而不是写入整个过程的累积值。NOSTIMER
是默认值。
现在以同样的方式如何在数据集步骤中指定时间信息。我没有使用 proc sql 步骤
data h;
select name,empid
from employeemaster;
quit;
单独的 PROC SQL 步骤实际上是独立的数据步骤,因此从某种意义上说,您总是从 SAS 获得相同的信息。您要问的是如何有效地找出“选择名称”与“empid”相比需要多长时间。
没有直接的方法来获取数据步骤中单个语句的时间,但您可以编写数据步骤代码来找出答案。问题是数据步骤是按行执行的,所以它与 PROC SQL STIMER 细节确实有很大不同;几乎你在数据步骤中所做的任何事情都不会花费很长时间,除非你正在做一些更复杂的事情,比如哈希表查找。需要很长时间的是先写出数据,然后再读入数据。
如果您担心的话,您确实有一些解决长数据步骤的选项。OPTIONS MSGLEVEL=我将为您提供有关索引使用、合并详细信息等的信息,如果您不确定为什么执行某些操作需要很长时间,这将很有帮助(请参阅http://goo.gl/bpGWL在 SAS 文档中了解更多信息)。您可以编写自己的时间戳:
data test;
set sashelp.class sashelp.class;
_t=time();
put _t=;
run;
奇怪的是,它不会向您展示太多用途,因为大多数数据步骤迭代不会花费很长时间,但如果您正在做一些花哨的事情,它可能会有所帮助。您还可以使用条件语句仅以特定间隔打印时间 - 例如在 FIRST.ID 时,例如在按 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 告诉您的信息。
没门。
PROC SQL STIMER
记录每个单独可执行的 SQL 语句/查询的时间。如您所知,在数据步骤中,数据步骤循环发生,观察每次观察,因此数据步骤语句时间类似于每次观察,假设是事务性的。无论如何,这不会描述花费时间的所有细节 - 等待磁盘读取,写入等。所以我想这不会很有用。通常,SAS 性能受 I/O 驱动。