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 */
Die auf WeAreCAS.eu bereitgestellten Codes und Beispiele dienen Lehrzwecken. Es ist zwingend erforderlich, sie nicht blind in Ihre Produktionsumgebungen zu kopieren. Der beste Ansatz besteht darin, die Logik zu verstehen, bevor sie angewendet wird. Wir empfehlen dringend, diese Skripte in einer Testumgebung (Sandbox/Dev) zu testen. WeAreCAS übernimmt keine Verantwortung für mögliche Auswirkungen oder Datenverluste auf Ihren Systemen.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.