Variablen in absteigender Reihenfolge mit der DATA Step BY-Anweisung gruppieren

Dieser Code ist auch verfügbar auf: English Español
Schwierigkeitsgrad
Anfänger
Veröffentlicht am :
Die Option DESCENDING in der BY-Anweisung des DATA Steps wird nicht direkt unterstützt, wenn ein DATA Step in CAS ausgeführt wird. Wenn sie in einem CAS DATA Step angegeben wird, wechselt die Ausführung automatisch zu einer lokalen SAS©-Sitzung. Dies stellt sicher, dass der Code fehlerfrei ausgeführt wird, jedoch ohne die Performance-Vorteile der verteilten In-Memory-Verarbeitung von CAS. Für eine korrekte Gruppierung in absteigender Reihenfolge in CAS ist eine vorherige Sortierung (PROC SORT mit DESCENDING) erforderlich, bevor der CAS DATA Step verwendet wird. Darüber hinaus erfordern DATA Steps in CAS für eine einfache aufsteigende Reihenfolge keine vorherige Sortierung, dank ihrer Fähigkeit zur impliziten multithreaded-Ordnung.
Datenanalyse

Type : CREATION_INTERNE


Die Beispiele verwenden SASHELP-Daten (sashelp.class) oder intern generierte Daten (datalines).

1 Codeblock
PROC SORT / DATA STEP Data
Erklärung :
Dieses Beispiel zeigt die klassische Verwendung der BY-Anweisung mit der Option DESCENDING in einer lokalen SAS-Sitzung. Es ist zwingend erforderlich, die Daten mit PROC SORT vorzusortieren, indem DESCENDING für die BY-Variable (hier 'Age') angegeben wird. Der DATA Step kann dann 'BY DESCENDING Age' verwenden, um die Gruppen in der angegebenen Reihenfolge zu verarbeiten.
Kopiert!
1/* Création d'une table de démonstration */
2DATA classData;
3 INPUT Name $ Age Height Weight;
4 DATALINES;
5John 14 69 118
6Mary 13 65 112
7Robert 12 64 128
8Alice 14 62 102
9Thomas 12 57 85
10;
11RUN;
12 
13/* Tri par 'Age' en ordre décroissant en SAS local */
14PROC SORT DATA=classData OUT=classAgeDescLocal;
15 BY DESCENDING Age;
16RUN;
17 
18/* DATA Step pour regrouper par 'Age' en ordre décroissant */
19DATA classAgeOrderLocal;
20 SET classAgeDescLocal;
21 BY DESCENDING Age;
22 /* Logique de traitement ici */
23 PUT 'Traitement de Age = ' Age;
24RUN;
25 
26PROC PRINT DATA=classAgeOrderLocal;
27 TITLE 'Exemple 1: Ordre Décroissant en SAS Local';
28RUN;
2 Codeblock
DATA STEP CAS Data
Erklärung :
Dieses Beispiel veranschaulicht die Verwendung der BY-Anweisung in einem DATA Step, der vollständig in CAS ausgeführt wird. Für eine aufsteigende Sortierung erfordert CAS keine vorherige Sortierung der Daten. Die implizite Ordnung wird von CAS selbst verwaltet und ist für die verteilte Umgebung optimiert. Das SAS-Log bestätigt die Ausführung in 'Cloud Analytic Services'.
Kopiert!
1/* Établir une connexion à CAS et charger les données */
2LIBNAME mycas CAS;
3 
4DATA mycas.classAge_cas;
5 SET SASHELP.CLASS;
6RUN;
7 
8/* DATA Step en CAS avec regroupement implicite par 'Age' (ordre croissant) */
9DATA mycas.classAgeOrder_cas;
10 SET mycas.classAge_cas;
11 BY Age;
12 /* Logique de traitement ici, ex: calculer la moyenne par Age */
13 IF FIRST.Age THEN DO;
14 count_age = 0;
15 sum_weight = 0;
16 END;
17 count_age + 1;
18 sum_weight + Weight;
19 IF LAST.Age THEN DO;
20 mean_weight_age = sum_weight / count_age;
21 OUTPUT;
22 END;
23 KEEP Age mean_weight_age;
24RUN;
25 
26PROC PRINT DATA=mycas.classAgeOrder_cas;
27 TITLE 'Exemple 2: Regroupement implicite par Age en CAS (ordre croissant)';
28RUN;
3 Codeblock
DATA STEP CAS (erzwungen lokal) Data
Erklärung :
Dieses Beispiel hebt das Verhalten des DATA Steps hervor, wenn die Option DESCENDING mit BY auf einer CAS-Tabelle verwendet wird. Obwohl der DATA Step auf eine CAS-Tabelle abzielt, wird die Ausführung automatisch an eine lokale SAS-Sitzung übertragen, da die Option DESCENDING im CAS DATA Step nicht nativ unterstützt wird. Das SAS-Log wird für diesen Block keine 'Running DATA step in Cloud Analytic Services' Meldung anzeigen.
Kopiert!
1/* Création d'une table de démonstration en CAS */
2LIBNAME mycas CAS;
3 
4DATA mycas.students_cas;
5 INPUT Name $ Score;
6 DATALINES;
7Alice 85
8Bob 92
9Charlie 78
10Alice 90
11Bob 88
12;
13RUN;
14 
15/* Tentative de DATA Step en CAS avec 'BY DESCENDING Score' */
16/* Cela forcera l'exécution en session SAS locale */
17DATA mycas.students_ordered_forced_local;
18 SET mycas.students_cas;
19 BY DESCENDING Score;
20 /* Logique de traitement */
21 PUT 'Traitement du score ' Score ' pour ' Name;
22RUN;
23 
24PROC PRINT DATA=mycas.students_ordered_forced_local;
25 TITLE 'Exemple 3: Exécution forcée en SAS local (BY DESCENDING en DATA Step CAS)';
26RUN;
4 Codeblock
PROC SORT / DATA STEP CAS Data
Erklärung :
Für komplexe Sortierszenarien, insbesondere mit absteigenden Ordnungen oder mehreren BY-Variablen, wird empfohlen, die Tabelle in CAS mithilfe von PROC SORT vorzusortieren. Anschließend kann der CAS DATA Step die Gruppen mithilfe der BY-Anweisung ohne die Option DESCENDING verarbeiten, da die Reihenfolge bereits festgelegt wurde. Dies ermöglicht die Nutzung der parallelen Ausführung von CAS unter Beibehaltung der gewünschten Reihenfolge. Hier erfolgt die Sortierung nach 'Group' und dann 'Age' in absteigender Reihenfolge.
Kopiert!
1/* Création d'une table de démonstration plus complexe */
2DATA classDataExtended;
3 INPUT Group $ Name $ Age Height Weight;
4 DATALINES;
5A John 14 69 118
6A Mary 13 65 112
7B Robert 12 64 128
8A Alice 14 62 102
9B Thomas 12 57 85
10A Peter 13 68 120
11B Susan 14 66 115
12;
13RUN;
14 
15/* Charger la table dans CAS */
16LIBNAME mycas CAS;
17DATA mycas.classDataExtended_cas;
18 SET classDataExtended;
19RUN;
20 
21/* Prétrier la table CAS pour un regroupement multi-variable avec ordre décroissant */
22/* Noter que PROC SORT *peut* s'exécuter en CAS si la source est une table CAS */
23PROC SORT DATA=mycas.classDataExtended_cas OUT=mycas.sortedClassExtended_cas;
24 BY Group DESCENDING Age;
25RUN;
26 
27/* DATA Step en CAS avec regroupement par les variables triées */
28DATA mycas.finalGroupedData_cas;
29 SET mycas.sortedClassExtended_cas;
30 BY Group Age;
31 /* Logique de traitement, ex: trouver le plus jeune de chaque groupe par Age décroissant */
32 IF FIRST.Group THEN YOUNGEST_IN_GROUP = Age;
33 IF FIRST.Age THEN PUT 'Nouveau groupe: ' Group ' - Age ' Age;
34 /* Peut ajouter d'autres traitements ici */
35RUN;
36 
37PROC PRINT DATA=mycas.finalGroupedData_cas;
38 TITLE 'Exemple 4: Tri et Regroupement Multi-variables en CAS (Age décroissant)';
39RUN;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
Urheberrechtsinformationen : Copyright © SAS Institute Inc. All Rights Reserved.


Zugehörige Dokumentation

Aucune documentation spécifique pour cette catégorie.