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!
/* Création d'une table de démonstration */
DATA classData;
INPUT Name $ Age Height Weight;
DATALINES;
John 14 69 118
Mary 13 65 112
Robert 12 64 128
Alice 14 62 102
Thomas 12 57 85
;
RUN;
/* Tri par 'Age' en ordre décroissant en SAS local */
PROC SORT DATA=classData OUT=classAgeDescLocal;
BY DESCENDING Age;
RUN;
/* DATA Step pour regrouper par 'Age' en ordre décroissant */
DATA classAgeOrderLocal;
SET classAgeDescLocal;
BY DESCENDING Age;
/* Logique de traitement ici */
PUT 'Traitement de Age = ' Age;
RUN;
PROC PRINT DATA=classAgeOrderLocal;
TITLE 'Exemple 1: Ordre Décroissant en SAS Local';
RUN;
1
/* Création d'une table de démonstration */
2
DATA classData;
3
INPUT Name $ Age Height Weight;
4
DATALINES;
5
John 1469118
6
Mary 1365112
7
Robert 1264128
8
Alice 1462102
9
Thomas 125785
10
;
11
RUN;
12
13
/* Tri par 'Age' en ordre décroissant en SAS local */
14
PROC SORTDATA=classData OUT=classAgeDescLocal;
15
BY DESCENDING Age;
16
RUN;
17
18
/* DATA Step pour regrouper par 'Age' en ordre décroissant */
19
DATA classAgeOrderLocal;
20
SET classAgeDescLocal;
21
BY DESCENDING Age;
22
/* Logique de traitement ici */
23
PUT 'Traitement de Age = ' Age;
24
RUN;
25
26
PROC PRINTDATA=classAgeOrderLocal;
27
TITLE 'Exemple 1: Ordre Décroissant en SAS Local';
28
RUN;
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!
/* Établir une connexion à CAS et charger les données */
LIBNAME mycas CAS;
DATA mycas.classAge_cas;
SET SASHELP.CLASS;
RUN;
/* DATA Step en CAS avec regroupement implicite par 'Age' (ordre croissant) */
DATA mycas.classAgeOrder_cas;
SET mycas.classAge_cas;
BY Age;
/* Logique de traitement ici, ex: calculer la moyenne par Age */
IF FIRST.Age THEN DO;
count_age = 0;
sum_weight = 0;
END;
count_age + 1;
sum_weight + Weight;
IF LAST.Age THEN DO;
mean_weight_age = sum_weight / count_age;
OUTPUT;
END;
KEEP Age mean_weight_age;
RUN;
PROC PRINT DATA=mycas.classAgeOrder_cas;
TITLE 'Exemple 2: Regroupement implicite par Age en CAS (ordre croissant)';
RUN;
1
/* Établir une connexion à CAS et charger les données */
2
LIBNAME mycas CAS;
3
4
DATA mycas.classAge_cas;
5
SET SASHELP.CLASS;
6
RUN;
7
8
/* DATA Step en CAS avec regroupement implicite par 'Age' (ordre croissant) */
9
DATA 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 THENDO;
14
count_age = 0;
15
sum_weight = 0;
16
END;
17
count_age + 1;
18
sum_weight + Weight;
19
IF LAST.Age THENDO;
20
mean_weight_age = sum_weight / count_age;
21
OUTPUT;
22
END;
23
KEEP Age mean_weight_age;
24
RUN;
25
26
PROC PRINTDATA=mycas.classAgeOrder_cas;
27
TITLE 'Exemple 2: Regroupement implicite par Age en CAS (ordre croissant)';
28
RUN;
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!
/* Création d'une table de démonstration en CAS */
LIBNAME mycas CAS;
DATA mycas.students_cas;
INPUT Name $ Score;
DATALINES;
Alice 85
Bob 92
Charlie 78
Alice 90
Bob 88
;
RUN;
/* Tentative de DATA Step en CAS avec 'BY DESCENDING Score' */
/* Cela forcera l'exécution en session SAS locale */
DATA mycas.students_ordered_forced_local;
SET mycas.students_cas;
BY DESCENDING Score;
/* Logique de traitement */
PUT 'Traitement du score ' Score ' pour ' Name;
RUN;
PROC PRINT DATA=mycas.students_ordered_forced_local;
TITLE 'Exemple 3: Exécution forcée en SAS local (BY DESCENDING en DATA Step CAS)';
RUN;
1
/* Création d'une table de démonstration en CAS */
2
LIBNAME mycas CAS;
3
4
DATA mycas.students_cas;
5
INPUT Name $ Score;
6
DATALINES;
7
Alice 85
8
Bob 92
9
Charlie 78
10
Alice 90
11
Bob 88
12
;
13
RUN;
14
15
/* Tentative de DATA Step en CAS avec 'BY DESCENDING Score' */
16
/* Cela forcera l'exécution en session SAS locale */
TITLE 'Exemple 3: Exécution forcée en SAS local (BY DESCENDING en DATA Step CAS)';
26
RUN;
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!
/* Création d'une table de démonstration plus complexe */
DATA classDataExtended;
INPUT Group $ Name $ Age Height Weight;
DATALINES;
A John 14 69 118
A Mary 13 65 112
B Robert 12 64 128
A Alice 14 62 102
B Thomas 12 57 85
A Peter 13 68 120
B Susan 14 66 115
;
RUN;
/* Charger la table dans CAS */
LIBNAME mycas CAS;
DATA mycas.classDataExtended_cas;
SET classDataExtended;
RUN;
/* Prétrier la table CAS pour un regroupement multi-variable avec ordre décroissant */
/* Noter que PROC SORT *peut* s'exécuter en CAS si la source est une table CAS */
PROC SORT DATA=mycas.classDataExtended_cas OUT=mycas.sortedClassExtended_cas;
BY Group DESCENDING Age;
RUN;
/* DATA Step en CAS avec regroupement par les variables triées */
DATA mycas.finalGroupedData_cas;
SET mycas.sortedClassExtended_cas;
BY Group Age;
/* Logique de traitement, ex: trouver le plus jeune de chaque groupe par Age décroissant */
IF FIRST.Group THEN YOUNGEST_IN_GROUP = Age;
IF FIRST.Age THEN PUT 'Nouveau groupe: ' Group ' - Age ' Age;
/* Peut ajouter d'autres traitements ici */
RUN;
PROC PRINT DATA=mycas.finalGroupedData_cas;
TITLE 'Exemple 4: Tri et Regroupement Multi-variables en CAS (Age décroissant)';
RUN;
1
/* Création d'une table de démonstration plus complexe */
2
DATA classDataExtended;
3
INPUT Group $ Name $ Age Height Weight;
4
DATALINES;
5
A John 1469118
6
A Mary 1365112
7
B Robert 1264128
8
A Alice 1462102
9
B Thomas 125785
10
A Peter 1368120
11
B Susan 1466115
12
;
13
RUN;
14
15
/* Charger la table dans CAS */
16
LIBNAME mycas CAS;
17
DATA mycas.classDataExtended_cas;
18
SET classDataExtended;
19
RUN;
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 */
/* DATA Step en CAS avec regroupement par les variables triées */
28
DATA 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 */
35
RUN;
36
37
PROC PRINTDATA=mycas.finalGroupedData_cas;
38
TITLE 'Exemple 4: Tri et Regroupement Multi-variables en CAS (Age décroissant)';
39
RUN;
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.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.