SAS9

Optimierung der Leistung von PROC SUMMARY im SAS Enterprise Guide

Simon 9 vistas

Es kommt häufig vor, dass ein SAS©-Programm direkt auf einem Unix-Server schnell ausgeführt wird, aber scheinbar einfriert oder unendlich lange dauert, wenn es über die Benutzeroberfläche von SAS© Enterprise Guide (EG) gestartet wird. Dieses Phänomen ist oft bei der Verwendung von Aggregationsprozeduren wie PROC SUMMARY auf großen Datenmengen zu beobachten.

Wenn Sie feststellen, dass Ihr Sortierschritt (PROC SORT) normal ausgeführt wird, die statistische Zusammenfassung jedoch unendlich lange "rödelt", liegt das Problem nicht unbedingt an der Rechenleistung, sondern an der Verwaltung der Ausgaben.

Hier sind mehrere Strategien, um Verlangsamungen zu diagnostizieren und Ihren Code drastisch zu optimieren.

Optimierung der Leistung von PROC SUMMARY im SAS Enterprise Guide -

Diagnose mit FULLSTIMER

Vor der Optimierung ist es nützlich zu verstehen, wo die Ressourcen verbraucht werden. Das Hinzufügen der Option FULLSTIMER am Anfang Ihres Programms ermöglicht die Anzeige detaillierter Statistiken zur CPU-Zeit, Echtzeit und Speichernutzung im Protokoll.

1options fullstimer;

Die Falle der PRINT-Option und des ODS

Die häufigste Ursache für Verlangsamungen in SAS© EG ist der Versuch, die Ergebnisse anzuzeigen.

Wenn Sie die Option PRINT in einer PROC SUMMARY verwenden, versucht SAS©, einen Bericht zu generieren (oft standardmäßig als HTML in EG). Wenn Ihre Klassifikationsvariablen (CLASS) eine hohe Kardinalität haben (viele eindeutige Kombinationen), ist die Ergebnistabelle riesig. SAS© EG verbraucht dann enorm viel Speicher und Zeit, um diese Anzeige zu übertragen und darzustellen, was den Eindruck erweckt, dass die Berechnung blockiert ist.

Die Lösung:

  • Entfernen Sie die Option PRINT.

  • Schließen Sie die Ausgabeziele (ODS) vor der Prozedur, um die automatische Erstellung von grafischen oder HTML-Berichten zu vermeiden.

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

NWAY dem _TYPE_-Filter vorziehen

Eine gängige Praxis ist es, alle Statistiken zu generieren und dann die Ausgabetabelle zu filtern, um nur die feinste Aggregationsebene (dort, wo alle Klassenvariablen berücksichtigt werden) über eine Klausel WHERE _TYPE_ = ... beizubehalten.

Es ist jedoch viel effizienter, die Option NWAY zu verwenden. Diese Option weist SAS© an, nur die Statistiken für die Kombination aller Klassenvariablen zu berechnen und zu schreiben, wodurch die unnötige Berechnung von Zwischensummen vermieden wird.

Vorher (weniger effizient):

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;

Nachher (Empfohlen):

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

Kombination von PROC SORT und BY-Verarbeitung

Wenn Ihre Tabelle sehr groß ist, kann die CLASS-Anweisung speicherintensiv sein, da sie die Kombinationen im Speicher behalten muss.

Eine Optimierungstechnik besteht darin, Ihre Daten zuerst zu sortieren und dann eine BY-Anweisung anstelle (oder zusätzlich zu) der CLASS-Anweisung in der PROC SUMMARY zu verwenden. Die Gruppenverarbeitung (BY) ist sequenziell und verbraucht weniger Arbeitsspeicher.

Da Sie oft einen PROC SORT vorgeschaltet haben, genügt es, eine der Gruppierungsvariablen in diese Sortierung aufzunehmen.

Beispiel für optimierten Code

So sieht der endgültige Code aus, der all diese Verbesserungen enthält:

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;

Zusammenfassend lässt sich sagen, um eine PROC SUMMARY in SAS© EG zu entsperren: Entfernen Sie die Anzeige (PRINT), verwenden Sie NWAY und verwalten Sie Ihre Sortierungen intelligent, um den Speicher zu entlasten.