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

Har*_*sai 5 sas

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

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

data h;
select name,empid
from employeemaster;
quit;
Run Code Online (Sandbox Code Playgroud)

Joe*_*Joe 5

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

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

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

data test;
set sashelp.class sashelp.class;
_t=time();
put _t=;
run;
Run Code Online (Sandbox Code Playgroud)

由于大多数数据步骤迭代不会花费很长时间,但是如果您正在做一些奇特的事情,它可能会有所帮助.您还可以使用条件语句仅以特定间隔打印时间 - 例如,在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;
Run Code Online (Sandbox Code Playgroud)

是一步 - 但在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;
Run Code Online (Sandbox Code Playgroud)

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