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 */
The codes and examples provided on WeAreCAS.eu are for educational purposes. It is imperative not to blindly copy-paste them into your production environments. The best approach is to understand the logic before applying it. We strongly recommend testing these scripts in a test environment (Sandbox/Dev). WeAreCAS accepts no responsibility for any impact or data loss on your systems.
SAS and all other SAS Institute Inc. product or service names are registered trademarks or trademarks of SAS Institute Inc. in the USA and other countries. ® indicates USA registration. WeAreCAS is an independent community site and is not affiliated with SAS Institute Inc.
This site uses technical and analytical cookies to improve your experience.
Read more.