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 */
Les codes et exemples fournis sur WeAreCAS.eu sont à but pédagogique. Il est impératif de ne pas les copier-coller aveuglément sur vos environnements de production. La meilleure approche consiste à comprendre la logique avant de l'appliquer. Nous vous recommandons vivement de tester ces scripts dans un environnement de test (Sandbox/Dev). WeAreCAS décline toute responsabilité quant aux éventuels impacts ou pertes de données sur vos systèmes.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.