Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to get timing information of a data step query

Tags:

sas

I just wanted to know like in proc sql we define stimer option. The PROC SQL option STIMER | NOSTIMER specifies whether PROC SQL writes timing information for each statement to the SAS log, instead of writing a cumulative value for the entire procedure. NOSTIMER is the default.

Now in same way how to specify timing information in data set step. I am not using proc sql step

data h;
select name,empid
from employeemaster;
quit;
like image 997
Hary Desai Avatar asked Oct 06 '22 10:10

Hary Desai


1 Answers

PROC SQL steps individually are effectively separate data steps, so in a sense you always get the identical information from SAS. What you're asking is effectively how to find out how long 'select name' takes versus 'empid'.

There's not a direct way to get the timing of an individual statement in a data step, but you could write data step code to find out. The problem is that the data step is executed row-wise, so it's really quite different from the PROC SQL STIMER details; almost nothing you do in a data step will take very long by itself, unless you are doing something more complex like a hash table lookup. What takes long is writing out the data first, and reading in the data second.

You do have some options for troubleshooting long data steps, if that's your concern. OPTIONS MSGLEVEL=I will give you information about index usage, merge details, etc., which can be helpful if you aren't sure why it is taking a long time to do certain things (see http://goo.gl/bpGWL in SAS documentation for more info). You can write your own timestamp:

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

Odds are that won't show you much of use since most data step iterations won't take very long but if you are doing something fancy it might help. You could also use conditional statements to only print the time at certain intervals - when at FIRST.ID for example in a process that works BY ID;.

Ultimately though the information you already get from notes is what is most useful. In PROC SQL you need the STIMER information because SQL is doing several things at once, while SAS lets/makes you do everything out step-wise. Example:

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

is one step - but in SAS this would be:

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;

For that you would get information on the duration of each of those steps (the two sorts and the merge) in SAS, which is similar to what STIMER would tell you.

like image 114
Joe Avatar answered Oct 10 '22 03:10

Joe