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.
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.
Schließen Sie die Ausgabeziele (ODS) vor der Prozedur, um die automatische Erstellung von grafischen oder HTML-Berichten zu vermeiden.
ods _all_ close; /* Empêche la génération de sorties visuelles lourdes */
1
ods _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.
proc summary data=MaTable;
class var1 var2;
output out=Resultat (where=(_type_=3)); /* Nécessite de connaître la valeur du type */
run;
1
PROC SUMMARYDATA=MaTable;
2
class var1 var2;
3
OUTPUT out=Resultat (where=(_type_=3)); /* Nécessite de connaître la valeur du type */
4
RUN;
Nachher (Empfohlen):
proc summary data=MaTable nway;
class var1 var2;
output out=Resultat;
run;
1
PROC SUMMARYDATA=MaTable nway;
2
class var1 var2;
3
OUTPUT out=Resultat;
4
RUN;
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:
options fullstimer;
/* 1. Tri des données en incluant la variable de regroupement principale */
proc sort data=&FName.;
by Policy_number INCEPTION_DATE_ADJ broker_number;
run;
/* 2. Fermeture des sorties ODS pour éviter les lenteurs d'affichage dans EG */
ods _all_ close;
/* 3. Utilisation de NWAY et passage d'une variable en BY */
proc summary data=&FName. nway;
by broker_number; /* Traitement séquentiel, moins de mémoire */
class year month type3;
var nbu_pol nbu_prem;
output out=new_business_summary (drop=_freq_) sum=;
run;
/* 4. Réactivation de l'affichage pour voir le résultat final si nécessaire */
ods listing;
proc print data=new_business_summary;
run;
1
options fullstimer;
2
3
/* 1. Tri des données en incluant la variable de regroupement principale */
4
PROC SORTDATA=&FName.;
5
BY Policy_number INCEPTION_DATE_ADJ broker_number;
6
RUN;
7
8
/* 2. Fermeture des sorties ODS pour éviter les lenteurs d'affichage dans EG */
9
ods _all_ close;
10
11
/* 3. Utilisation de NWAY et passage d'une variable en BY */
12
PROC SUMMARYDATA=&FName. nway;
13
BY broker_number; /* Traitement séquentiel, moins de mémoire */
Los códigos y ejemplos proporcionados en WeAreCAS.eu son con fines educativos. Es imperativo no copiarlos y pegarlos ciegamente en sus entornos de producción. El mejor enfoque es comprender la lógica antes de aplicarla. Recomendamos encarecidamente probar estos scripts en un entorno de prueba (Sandbox/Dev). WeAreCAS no acepta ninguna responsabilidad por cualquier impacto o pérdida de datos en sus sistemas.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.