SAS9

Optimizar el rendimiento de PROC SUMMARY en SAS Enterprise Guide

Simon 5 views

Ocurre con frecuencia que un programa SAS© se ejecuta rápidamente directamente en un servidor Unix, pero parece congelarse o tardar un tiempo infinito cuando se lanza desde la interfaz de SAS© Enterprise Guide (EG). Este fenómeno es a menudo visible al utilizar procedimientos de agregación como PROC SUMMARY en grandes volúmenes de datos.

Si observa que su paso de ordenación (PROC SORT) se ejecuta normalmente, pero que el resumen estadístico "se queda pensando" indefinidamente, el problema no proviene necesariamente de la potencia de cálculo, sino de la gestión de las salidas.

Aquí hay varias estrategias para diagnosticar la lentitud y optimizar drásticamente su código.

Optimizar el rendimiento de PROC SUMMARY en SAS Enterprise Guide -

Diagnosticar con FULLSTIMER

Antes de optimizar, es útil comprender dónde se consumen los recursos. Añadir la opción FULLSTIMER al principio de su programa permite mostrar estadísticas detalladas sobre el tiempo de CPU, el tiempo real y el uso de la memoria en el log.

1options fullstimer;

La trampa de la opción PRINT y del ODS

La causa más frecuente de lentitud en SAS© EG es el intento de mostrar los resultados.

Cuando utiliza la opción PRINT en un PROC SUMMARY, SAS© intenta generar un informe (a menudo en HTML por defecto en EG). Si sus variables de clasificación (CLASS) tienen una alta cardinalidad (muchas combinaciones únicas), la tabla de resultados es gigantesca. SAS© EG consume entonces una enorme cantidad de memoria y tiempo para transferir y renderizar esta visualización, dando la impresión de que el cálculo está bloqueado.

La solución:

  • Elimine la opción PRINT.

  • Cierre los destinos de salida (ODS) antes del procedimiento para evitar cualquier generación automática de informes gráficos o HTML.

1ods _all_ close;
2/* Empêche la génération de sorties visuelles lourdes */

Preferir NWAY al filtrado _TYPE_

Una práctica común es generar todas las estadísticas y luego filtrar la tabla de salida para conservar solo el nivel de agregación más fino (donde se tienen en cuenta todas las variables de clase) mediante una cláusula WHERE _TYPE_ = ....

Sin embargo, es mucho más eficiente utilizar la opción NWAY. Esta opción instruye a SAS© para que solo calcule y escriba las estadísticas para la combinación de todas las variables de clase, evitando así el cálculo innecesario de subtotales intermedios.

Antes (menos eficiente):

1PROC SUMMARY DATA=MaTable;
2 class var1 var2;
3 OUTPUT out=Resultat (where=(_type_=3)); /* Nécessite de connaître la valeur du type */
4RUN;

Después (Recomendado):

1PROC SUMMARY DATA=MaTable nway;
2 class var1 var2;
3 OUTPUT out=Resultat;
4RUN;

Combinar PROC SORT y procesamiento por BY

Si su tabla es muy grande, la instrucción CLASS puede consumir mucha memoria porque debe mantener las combinaciones en memoria.

Una técnica de optimización consiste en ordenar primero sus datos y luego utilizar una instrucción BY en lugar (o además) de la instrucción CLASS en el PROC SUMMARY. El procesamiento por grupo (BY) es secuencial y consume menos memoria RAM.

Dado que a menudo realiza un PROC SORT previamente, basta con añadir una de las variables de agrupación en esta ordenación.

Ejemplo de código optimizado

Así es como se ve el código final que integra todas estas mejoras:

1options fullstimer;
2 
3/* 1. Tri des données en incluant la variable de regroupement principale */
4PROC SORT DATA=&FName.;
5 BY Policy_number INCEPTION_DATE_ADJ broker_number;
6RUN;
7 
8/* 2. Fermeture des sorties ODS pour éviter les lenteurs d'affichage dans EG */
9ods _all_ close;
10 
11/* 3. Utilisation de NWAY et passage d'une variable en BY */
12PROC SUMMARY DATA=&FName. nway;
13 BY broker_number; /* Traitement séquentiel, moins de mémoire */
14 class year month type3;
15 var nbu_pol nbu_prem;
16 OUTPUT out=new_business_summary (drop=_freq_) sum=;
17RUN;
18 
19/* 4. Réactivation de l'affichage pour voir le résultat final si nécessaire */
20ods listing;
21PROC PRINT DATA=new_business_summary;
22RUN;

En resumen, para desbloquear un PROC SUMMARY en SAS© EG: elimine la visualización (PRINT), utilice NWAY y gestione de forma inteligente sus ordenaciones para aliviar la memoria.