SAS9

Tutorial SAS: Cómo medir el tiempo total de ejecución

Simon 8 views

Cuando se busca optimizar el procesamiento SAS© o monitorear el rendimiento de una cadena de producción, la información predeterminada proporcionada en la ventana "Log" puede resultar frustrante.

Por defecto, SAS© muestra las estadísticas de rendimiento (tiempo real, tiempo de CPU, memoria) después de cada paso (DATA step o PROC).

1NOTE: DATA statement used (Total process time):
2 real time 0.01 seconds
3 user cpu time 0.00 seconds
4 system cpu time 0.01 seconds

La pregunta recurrente es: ¿Cómo obtener el total acumulado de estas estadísticas para un programa completo que contiene docenas de pasos consecutivos?

Aquí están los tres métodos principales, del más simple al más avanzado.

Método 1: La ejecución en modo "Batch" (El método nativo)

Esta es la solución más inmediata si no necesita interactividad. Cuando ejecuta un programa SAS© en modo Batch (a través de la línea de comandos o un programador), SAS© cambia ligeramente su comportamiento de registro.

Al final del archivo .log generado, SAS© inserta automáticamente un resumen estadístico de toda la sesión.

Cómo hacerlo: En lugar de abrir SAS© Enterprise Guide o SAS© Base en modo interactivo:

  1. Ejecute su programa a través del ejecutable del sistema (ej: sas©.exe -sysin mi_programa.sas©).

  2. Abra el archivo de registro resultante (mi_programa.log).

  3. Vaya hasta el final del archivo para encontrar el bloque "SAS© Session Statistics".

Método 2: El "Log Scraping" (El análisis de logs)

Si necesita historizar estos rendimientos (por ejemplo, para comparar la velocidad de ejecución de un procesamiento día tras día), la lectura manual del log no es suficiente. La solución recomendada por los expertos es crear un pequeño programa que "lea" sus logs.

La idea es usar SAS© para leer sus propios archivos de salida de texto.

El concepto:

  1. Active la opción FULLSTIMER al principio de su programa principal para tener el máximo de detalles.

  2. Una vez que el programa haya terminado, ejecute un script de "scraping" que lea el archivo .log.

  3. Busque las líneas que comienzan con "real time" o "cpu time".

  4. Extraiga los valores numéricos y súmelos.

Este es el método ideal para construir cuadros de mando de rendimiento (Performance Monitoring).

Método 3: El subsistema ARM (El método Pro)

Para necesidades más complejas (por ejemplo, medir el tiempo de una sección específica del código sin incluir la inicialización), sugerimos usar ARM (Application Response Measurement).

ARM es un estándar de la industria para la medición de rendimiento, integrado en SAS© a través de macros específicas. Esto permite definir transacciones de "inicio" y "fin" personalizadas.

Ejemplo conceptual:

1/* Initialisation du système ARM */
2%let _armagent=1;
3%arm_init(appname="MonApplicationCritique");
4 
5/* Début du chronomètre pour une section précise */
6%arm_start(name="Etape_Importation");
7 
8 /* ... Votre code lourd ici ... */
9 DATA work.test; SET SOURCE.big_data; RUN;
10 
11/* Fin du chronomètre et enregistrement du log */
12%arm_stop(name="Etape_Importation");
13 
14%arm_end();

Los resultados se almacenan de forma limpia en un archivo de registro dedicado o una tabla, facilitando el análisis preciso sin tener que analizar texto sin formato.

Alternativa Rápida: Los Marcadores de Tiempo

Si no necesita la precisión de CPU/Memoria, sino solo la duración real ("Wall clock time") para un bloque de código, puede simplemente usar variables macro al principio y al final de su script:

1/* Début du chronomètre */
2%let start_time = %sysfunc(datetime());
3 
4 /* ... Vos multiples PROC et DATA steps ... */
5 PROC SORT DATA=sashelp.class out=class; BY age; RUN;
6 DATA _null_; SET class; RUN;
7 
8/* Fin et calcul */
9%let end_time = %sysfunc(datetime());
10%let duree = %sysfunc(putn(%sysevalf(&end_time - &start_time), time8.));
11 
12%put NOTE: Durée totale du traitement : &duree;