Agrupar Variables en Orden Descendente Usando la Declaración BY del DATA Step

Este código también está disponible en: Deutsch English
Nivel de dificultad
Principiante
Publicado el :
La opción DESCENDING en la instrucción BY del DATA Step no se admite directamente cuando se ejecuta un DATA Step en CAS. Si se especifica en un DATA Step de CAS, la ejecución se transfiere automáticamente a una sesión SAS© local. Esto asegura que el código se ejecute sin errores, pero sin los beneficios de rendimiento del procesamiento distribuido en memoria de CAS. Para una agrupación correcta en orden descendente en CAS, es necesario realizar una ordenación previa (PROC SORT con DESCENDING) antes de usar el DATA Step de CAS. Además, para un orden ascendente simple, los DATA Steps en CAS no requieren una ordenación previa gracias a su capacidad de ordenación implícita multihilo.
Análisis de datos

Type : CREATION_INTERNE


Los ejemplos utilizan datos SASHELP (sashelp.class) o datos generados internamente (datalines).

1 Bloque de código
PROC SORT / DATA STEP Data
Explicación :
Este ejemplo demuestra el uso clásico de la instrucción BY con la opción DESCENDING en una sesión SAS local. Es imperativo pre-ordenar los datos con PROC SORT especificando DESCENDING para la variable BY (aquí 'Age'). El DATA Step puede luego usar 'BY DESCENDING Age' para procesar los grupos en el orden especificado.
¡Copiado!
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 Bloque de código
DATA STEP CAS Data
Explicación :
Este ejemplo ilustra el uso de la instrucción BY en un DATA Step que se ejecuta completamente en CAS. Para una ordenación ascendente, CAS no requiere pre-ordenar los datos. La ordenación implícita es gestionada por el propio CAS, optimizada para el entorno distribuido. El log de SAS confirmará la ejecución en 'Cloud Analytic Services'.
¡Copiado!
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 Bloque de código
DATA STEP CAS (forzado local) Data
Explicación :
Este ejemplo destaca el comportamiento del DATA Step cuando la opción DESCENDING se usa con BY en una tabla CAS. Aunque el DATA Step apunta a una tabla CAS, al no ser la opción DESCENDING compatible de forma nativa con el DATA Step CAS, la ejecución se transfiere automáticamente a una sesión SAS local. El log de SAS no mencionará 'Running DATA step in Cloud Analytic Services' para este bloque.
¡Copiado!
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 Bloque de código
PROC SORT / DATA STEP CAS Data
Explicación :
Para escenarios de ordenación complejos, especialmente con órdenes descendentes o múltiples variables BY, se recomienda pre-ordenar la tabla en CAS utilizando PROC SORT. Luego, el DATA Step CAS puede procesar los grupos usando la instrucción BY sin la opción DESCENDING, ya que el orden ya ha sido establecido. Esto permite beneficiarse de la ejecución paralela de CAS mientras se respeta la ordenación deseada. Aquí, la ordenación se realiza por 'Group' y luego por 'Age' en orden descendente.
¡Copiado!
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;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Copyright © SAS Institute Inc. All Rights Reserved.


Documentación relacionada

Aucune documentation spécifique pour cette catégorie.