Combinar tablas con la instrucción BY

Este código también está disponible en: Deutsch English
Nivel de dificultad
Principiante
Publicado el :
Cuando se combinan tablas SAS©, el orden de las filas en una tabla CAS no es necesariamente el orden en que se procesan. A diferencia de SAS© 9, que garantiza el orden de entrada de las filas, las tablas CAS no ofrecen esta garantía porque se distribuyen en varios nodos de la cuadrícula. Cuando se produce el particionamiento, los grupos BY se forman en un solo nodo a partir de filas que provienen de múltiples workers.
El orden de las filas dentro de una partición no es estable. Para obtener un orden estable, se recomienda usar más variables BY. Por ejemplo, con 'BY ID;', las filas se agrupan por el valor formateado de ID, luego se ordenan por el valor bruto de ID. El orden inicial de las filas no se tiene en cuenta. Con 'BY ID DATE;', las filas se agrupan por el valor formateado de ID, luego se ordenan por los valores brutos de ID y DATE.
La instrucción BY combina las filas de dos conjuntos de datos que tienen los mismos valores para la variable BY. Esta funcionalidad es crucial para operaciones complejas de manipulación de datos y para garantizar resultados consistentes en entornos distribuidos como CAS.
Análisis de datos

Type : CREATION_INTERNE


Los ejemplos utilizan datos generados (datalines) o SASHELP.

1 Bloque de código
DATA STEP Data
Explicación :
Este ejemplo muestra la concatenación de dos tablas (animal1 y plant1) utilizando la instrucción SET sin la instrucción BY. Las filas de 'plant1' simplemente se añaden al final de 'animal1'. Es una operación básica para combinar datos.
¡Copiado!
1DATA animal1;
2 INPUT Common $ Animal $ 3-8 Number 10-11;
3 DATALINES;
4a Ant 1
5b Bird 2
6c Cat 3
7d Dog 4
8e Eagle 5
9f Frog 6
10g Goose 7
11h Hawk 8
12i Impala 9
13;
14 
15DATA plant1;
16 INPUT Common $ Plant $ 3-10 Number 12-13;
17 DATALINES;
18a Grape 1
19c Hazelnut 2
20e Indigo 3
21g Jicama 4
22i Kale 5
23;
24 
25/* Concaténer animal1 et plant1 */
26DATA append_basique;
27 SET animal1 plant1;
28RUN;
29 
30PROC PRINT DATA=append_basique;
31 title '1. Concaténation de tables Animal et Plant (Base SAS)';
32RUN;
2 Bloque de código
DATA STEP Data
Explicación :
Este ejemplo utiliza la instrucción BY con una sola variable ('Common') para entrelazar los registros de las tablas 'animal1' y 'plant1'. Las filas se combinan en función de los valores correspondientes de la variable 'Common'.
¡Copiado!
1DATA animal1;
2 INPUT Common $ Animal $ 3-8 Number 10-11;
3 DATALINES;
4a Ant 1
5b Bird 2
6c Cat 3
7d Dog 4
8e Eagle 5
9f Frog 6
10g Goose 7
11h Hawk 8
12i Impala 9
13;
14 
15DATA plant1;
16 INPUT Common $ Plant $ 3-10 Number 12-13;
17 DATALINES;
18a Grape 1
19c Hazelnut 2
20e Indigo 3
21g Jicama 4
22i Kale 5
23;
24 
25/* Entrelacer animal1 et plant1 par la variable COMMON */
26DATA interleave_by_common;
27 SET animal1 plant1;
28 BY common;
29RUN;
30 
31PROC PRINT DATA=interleave_by_common;
32 title '2. Entrelacement par la variable COMMON (Base SAS)';
33RUN;
3 Bloque de código
DATA STEP Data
Explicación :
Este ejemplo ilustra un entrelazado más avanzado utilizando la instrucción BY con dos variables ('Common' y 'Number'). Esto permite un control más granular del orden de combinación de las filas entre las dos tablas 'animal1' y 'plant1'.
¡Copiado!
1DATA animal1;
2 INPUT Common $ Animal $ 3-8 Number 10-11;
3 DATALINES;
4a Ant 1
5b Bird 2
6c Cat 3
7d Dog 4
8e Eagle 5
9f Frog 6
10g Goose 7
11h Hawk 8
12i Impala 9
13;
14 
15DATA plant1;
16 INPUT Common $ Plant $ 3-10 Number 12-13;
17 DATALINES;
18a Grape 1
19c Hazelnut 2
20e Indigo 3
21g Jicama 4
22i Kale 5
23;
24 
25/* Entrelacer animal1 et plant1 par COMMON et Number */
26DATA interleave_by_common_number;
27 SET animal1 plant1;
28 BY common Number;
29RUN;
30 
31PROC PRINT DATA=interleave_by_common_number;
32 title '3. Entrelacement par COMMON et Number (Base SAS)';
33RUN;
4 Bloque de código
DATA STEP / PROC CASUTIL Data
Explicación :
Este ejemplo demuestra cómo realizar un entrelazado de tablas en el entorno CAS. Comienza creando tablas SAS base, las carga como tablas CAS usando PROC CASUTIL, y luego utiliza un paso DATA con la instrucción BY para entrelazar las tablas directamente en memoria distribuida. El orden de procesamiento en CAS puede diferir del de Base SAS debido al paralelismo y el particionamiento. La variable `_hostname_` se añade para observar en qué nodo se procesaron los datos, ilustrando la naturaleza distribuida de CAS.
¡Copiado!
1LIBNAME mycas cas;
2 
3DATA animal_cas;
4 INPUT Common $ Animal $ 3-8 Number 10-11;
5 DATALINES;
6a Ant 1
7b Bird 2
8c Cat 3
9d Dog 4
10e Eagle 5
11f Frog 6
12g Goose 7
13h Hawk 8
14i Impala 9
15;
16 
17DATA plant_cas;
18 INPUT Common $ Plant $ 3-10 Number 12-13;
19 DATALINES;
20a Grape 1
21c Hazelnut 2
22e Indigo 3
23g Jicama 4
24i Kale 5
25;
26 
27PROC CASUTIL;
28 load DATA=animal_cas outcaslib='CASUSER' casout='ANIMAL_CAS' replace;
29 load DATA=plant_cas outcaslib='CASUSER' casout='PLANT_CAS' replace;
30RUN;
31 
32/* Entrelacer les tables CAS par la variable COMMON */
33DATA mycas.interleaveByCommonCas;
34 SET mycas.animal_cas mycas.plant_cas;
35 BY common;
36 /* La variable _hostname_ peut être utile pour observer la distribution */
37 hostname=_hostname_;
38RUN;
39 
40PROC PRINT DATA=mycas.interleaveByCommonCas;
41 title '4. Entrelacement par COMMON dans un DATA Step en CAS';
42RUN;
43 
44/* Nettoyage des tables CAS */
45PROC CASUTIL;
46 droptable casdata='ANIMAL_CAS' incaslib='CASUSER';
47 droptable casdata='PLANT_CAS' incaslib='CASUSER';
48 droptable casdata='INTERLEAVEBYCOMMONCAS' incaslib='CASUSER';
49RUN;
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.

Documentación relacionada

Aucune documentation spécifique pour cette catégorie.