2012-10-04 4 views
5

Solo quería saber que en proc sql definimos la opción de stimer. La opción PROC SQLSTIMER | NOSTIMER especifica si PROC SQL escribe información de temporización para cada instrucción en el registro SAS, en lugar de escribir un valor acumulativo para todo el procedimiento. NOSTIMER es el valor predeterminado.cómo obtener información de temporización de una consulta de paso de datos

Ahora, de la misma manera, cómo especificar la información de temporización en el paso del conjunto de datos. No estoy usando proc sql paso

data h; 
select name,empid 
from employeemaster; 
quit; 

Respuesta

5

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

+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. . –

-1

De ninguna manera. PROC SQL STIMER registros de tiempo para cada instrucción/consulta SQL ejecutable por separado. En el paso de datos, como ya sabrá, se produce el bucle del paso de datos, observación por observación, de modo que el tiempo de la declaración del paso de datos sería algo así como por observación, digamos transaccional. De todos modos, esto no describiría todos los detalles donde se está gastando el tiempo, esperando lecturas de disco, escrituras, etc. Así que supongo que esto no será muy útil. En general, el rendimiento SAS es impulsado por E/S.

Cuestiones relacionadas