PROC Los pasos de SQL individualmente son pasos de datos efectivamente independientes, por lo que en cierto sentido siempre se obtiene la información idéntica de SAS. Lo que estás preguntando es efectivamente cómo saber cuánto tiempo lleva 'seleccionar nombre' frente a 'empid'.
No hay una forma directa de obtener el tiempo de una declaración individual en un paso de datos, pero puede escribir el código de paso de datos para averiguarlo. El problema es que el paso de datos se ejecuta en filas, por lo que es bastante diferente de los detalles de PROC SQL STIMER; casi nada de lo que haga en un paso de datos llevará mucho tiempo por sí solo, a menos que esté haciendo algo más complejo como una búsqueda de tabla hash. Lo que toma tiempo es escribir primero los datos y luego leer los datos.
Tiene algunas opciones para resolver problemas de largos pasos de datos, si esa es su inquietud. OPCIONES MSGLEVEL = Le daré información sobre el uso del índice, los detalles de combinación, etc., que pueden ser útiles si no está seguro de por qué tarda en hacer ciertas cosas (consulte http://goo.gl/bpGWL en la documentación de SAS para obtener más información). Usted puede escribir su propia marca de tiempo:
data test;
set sashelp.class sashelp.class;
_t=time();
put _t=;
run;
Lo más probable es que no va a mostrar que la mayor parte de uso desde la mayoría de las iteraciones de paso de datos no llevará mucho tiempo, pero si usted está haciendo algo de fantasía que podrían ayudar. También podría usar sentencias condicionales para imprimir solo la hora en ciertos intervalos, cuando en FIRST.ID, por ejemplo, en un proceso que funcione mediante ID ;.
Al final, la información que ya obtienes de las notas es lo que es más útil. En PROC SQL necesita la información STIMER porque SQL está haciendo varias cosas a la vez, mientras que SAS le permite hacer todo por pasos. Ejemplo:
PROC SQL;
create table X as select * from A,B where A.ID=B.ID;
quit;
es un paso - pero en SAS esto sería:
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;
Para que se podrían obtener información sobre la duración de cada uno de esos pasos (los dos géneros y la fusión) en SAS, que es similar a lo que STIMER le diría.
+1 Nice answer. Es posible que desee aclarar que las búsquedas de tabla hash son bastante instantáneas (tardan tanto como le lleva a hash un valor que básicamente no es nada, ya que el algoritmo hash es muy eficiente), pero la carga de la tabla hash en la memoria podría llevar algún tiempo. . –