ETL CAS

Carga de CSV en Caslib con Informats

Este código también está disponible en: Deutsch English
Nivel de dificultad
Principiante
Publicado el :
La acción `table.loadTable` se utiliza para cargar un archivo CSV en una tabla en memoria en el servidor CAS. Las `importOptions` se configuran para especificar el tipo de archivo (CSV) y para definir explícitamente las variables a través del parámetro `vars`. Para cada variable, se definen el nombre, el tipo de datos (doble), el informat (`ANYDTDTE10.` para fechas, `COMMA9.` para números con comas y `PERCENT8.` para porcentajes) y el formato (`NLDATE20.`, `COMMA.`, `PERCENT.`). La acción `table.columnInfo` permite mostrar los metadatos de la tabla, incluyendo los tipos de datos y los formatos aplicados. Finalmente, `table.fetch` se utiliza dos veces: una para mostrar los valores numéricos brutos (sin formato) y otra para mostrar los valores formateados por CAS, ilustrando el impacto de los informats y los formatos.
Análisis de datos

Type : CREATION_INTERNE


Los ejemplos utilizan datos CSV generados directamente en el código a través de sentencias `filename`, garantizando su autonomía y reproducibilidad sin depender de archivos externos preexistentes en el sistema de archivos CAS.

1 Bloque de código
PROC CAS / table.loadTable Data
Explicación :
Este ejemplo básico muestra cómo cargar un archivo CSV en CAS usando `table.loadTable`. El archivo CSV se crea dinámicamente utilizando una sentencia `filename` y un paso `DATA _NULL_` para asegurar la autonomía del script. El parámetro `importOptions` se utiliza para especificar el tipo de archivo, la ausencia de nombres de columna y la definición de informats y formatos para cada variable (`dt`, `volume`, `pct`). La tabla resultante, `volume_basic`, se promueve a nivel global de la sesión CAS usando `promote=True` para hacerla accesible a otras sesiones o usuarios. La acción `table.columnInfo` se usa para verificar los tipos de datos y formatos aplicados. Finalmente, `table.fetch` se usa dos veces para mostrar los datos brutos y formateados.
¡Copiado!
1/* Remplacez 'cloud.example.com' et '5570' par les valeurs de votre environnement */
2/*options cashost="cloud.example.com" casport=5570;*/
3 
4/* Démarre la session Casauto si ce n'est pas déjà fait. */
5/*cas casauto;*/
6 
7/* Création d'un fichier CSV temporaire dans une caslib accessible */
8filename volume_basic temp;
9DATA _null_;
10 file volume_basic;
11 put '12-06-2019,"1,245",10%';
12 put '01-03-2020,"3,400",27%';
13 put '02-07-2020,"2,341",18%';
14 put '03-06-2020,"5,700",45%';
15 put '04-03-2020,"12,686",100%';
16RUN;
17 
18PROC CAS;
19 SESSION casauto;
20 
21 /* Charge le fichier CSV temporaire en mémoire CAS */
22 TABLE.loadTable /
23 path="volume_basic",
24 caslib="casuser", /* Spécifie une caslib, ex: 'casuser' */
25 importOptions={
26 fileType="csv",
27 getNames=false,
28 vars={
29 {name="dt" type="double" informat="anydtdte10." FORMAT="nldate20."},
30 {name="volume" type="double" informat="comma9." FORMAT="comma."},
31 {name="pct" type="double" informat="percent8." FORMAT="percent."}
32 }
33 },
34 casout={name="volume_basic", replace=True, promote=True}; /* Promote rend la table globale */
35 
36 /* Affiche les informations sur les colonnes de la table chargée */
37 TABLE.columnInfo / TABLE="volume_basic";
38 
39 title "Valeurs numériques brutes (Exemple Basique)";
40 /* Récupère et affiche les données sans appliquer de formats */
41 TABLE.fetch /
42 TABLE="volume_basic",
43 fetchVars={
44 {name="dt", FORMAT=""},
45 {name="volume", FORMAT=""},
46 {name="pct", FORMAT=""}
47 };
48RUN;
49 
50 title "Formats appliqués par CAS (Exemple Basique)";
51 /* Récupère et affiche les données en appliquant les formats définis */
52 TABLE.fetch / TABLE="volume_basic", FORMAT=True;
53RUN;
54QUIT;
55 
56/* Nettoyage : supprime la table CAS en mémoire et le fichier temporaire */
57PROC CAS;
58 SESSION casauto;
59 TABLE.dropTable / caslib="casuser", name="volume_basic";
60RUN;
61QUIT;
62filename volume_basic clear;
2 Bloque de código
PROC CAS / table.loadTable Data
Explicación :
Este ejemplo se centra en el uso de opciones comunes al cargar datos. El archivo CSV se carga en una tabla CAS llamada `volume_inter_global`. La opción `caslib='casuser'` se usa explícitamente para especificar la caslib de destino. Además, `promote=True` en el parámetro `casout` garantiza que la tabla cargada se promueva de una tabla de sesión a una tabla global, lo que la hace disponible para otros usuarios o sesiones sin necesidad de recargarla. Los nombres de las variables también son más explícitos para una mejor legibilidad. `table.fetch` se usa para mostrar una vista previa de los datos formateados.
¡Copiado!
1/* Remplacez 'cloud.example.com' et '5570' par les valeurs de votre environnement */
2/*options cashost="cloud.example.com" casport=5570;*/
3 
4/* Démarre la session Casauto si ce n'est pas déjà fait. */
5/*cas casauto;*/
6 
7/* Création d'un fichier CSV temporaire avec plus de données */
8filename volume_inter temp;
9DATA _null_;
10 file volume_inter;
11 put '12-06-2019,"1,245",10%';
12 put '01-03-2020,"3,400",27%';
13 put '02-07-2020,"2,341",18%';
14 put '03-06-2020,"5,700",45%';
15 put '04-03-2020,"12,686",100%';
16 put '05-01-2020,"8,910",70%';
17 put '06-02-2020,"1,500",15%';
18RUN;
19 
20PROC CAS;
21 SESSION casauto;
22 
23 /* Charge le fichier CSV temporaire dans la caslib 'casuser' et le promeut */
24 TABLE.loadTable /
25 path="volume_inter",
26 caslib="casuser", /* Spécifie explicitement la caslib 'casuser' */
27 importOptions={
28 fileType="csv",
29 getNames=false,
30 vars={
31 {name="DateTransaction" type="double" informat="anydtdte10." FORMAT="nldate20."},
32 {name="VolumeVendu" type="double" informat="comma9." FORMAT="comma."},
33 {name="PourcentageCroissance" type="double" informat="percent8." FORMAT="percent."}
34 }
35 },
36 casout={name="volume_inter_global", replace=True, promote=True}; /* Promouvoir pour accès global */
37 
38 /* Affiche les 10 premières lignes de la table globale */
39 title "Données de Volume (Exemple Intermédiaire)";
40 TABLE.fetch / TABLE="volume_inter_global", to=10, FORMAT=True;
41RUN;
42QUIT;
43 
44/* Nettoyage : supprime la table CAS globale et le fichier temporaire */
45PROC CAS;
46 SESSION casauto;
47 TABLE.dropTable / caslib="casuser", name="volume_inter_global";
48RUN;
49QUIT;
50filename volume_inter clear;
3 Bloque de código
PROC CAS / table.loadTable, dataStep.runCode Data
Explicación :
Este ejemplo avanzado ilustra una manipulación de datos más compleja directamente en el entorno CAS. Después de la carga inicial de la tabla `volume_initial`, se usa un `dataStep.runCode` para ejecutar un paso DATA de CASL. Este paso DATA crea una nueva variable `VolumeAjuste` multiplicando el `Volume` por el `CroissancePct` ajustado. Además, se aplica un filtro (`if VolumeAjuste > 5000`) para incluir solo las filas que cumplen esta condición en la nueva tabla `volume_processed`. Esto demuestra cómo realizar transformaciones y selecciones de datos en memoria distribuida.
¡Copiado!
1/* Remplacez 'cloud.example.com' et '5570' par les valeurs de votre environnement */
2/*options cashost="cloud.example.com" casport=5570;*/
3 
4/* Démarre la session Casauto si ce n'est pas déjà fait. */
5/*cas casauto;*/
6 
7/* Création d'un fichier CSV temporaire pour l'exemple avancé */
8filename volume_adv temp;
9DATA _null_;
10 file volume_adv;
11 put '12-06-2019,"1,245",10%';
12 put '01-03-2020,"3,400",27%';
13 put '02-07-2020,"2,341",18%';
14 put '03-06-2020,"5,700",45%';
15 put '04-03-2020,"12,686",100%';
16 put '05-01-2020,"8,910",70%';
17 put '06-02-2020,"1,500",15%';
18 put '07-01-2020,"6,000",50%';
19 put '08-01-2020,"9,500",80%';
20RUN;
21 
22PROC CAS;
23 SESSION casauto;
24 
25 /* Charge le fichier CSV temporaire */
26 TABLE.loadTable /
27 path="volume_adv",
28 caslib="casuser",
29 importOptions={
30 fileType="csv",
31 getNames=false,
32 vars={
33 {name="Date" type="double" informat="anydtdte10." FORMAT="nldate20."},
34 {name="Volume" type="double" informat="comma9." FORMAT="comma."},
35 {name="CroissancePct" type="double" informat="percent8." FORMAT="percent."}
36 }
37 },
38 casout={name="volume_initial", replace=True, promote=False};
39 
40 /* Exécute un DATA step en CAS pour créer une nouvelle variable et filtrer les données */
41 dataStep.runCode /
42 code="
43 data casuser.volume_processed;
44 set casuser.volume_initial;
45 VolumeAjuste = Volume * (1 + CroissancePct);
46 if VolumeAjuste > 5000 then output;
47 run;",
48 single="yes";
49 
50 /* Affiche les informations sur la nouvelle table traitée */
51 TABLE.columnInfo / TABLE="volume_processed", caslib="casuser";
52 
53 title "Données de Volume Traitées (Exemple Avancé)";
54 /* Récupère et affiche les données de la table traitée */
55 TABLE.fetch / TABLE="volume_processed", caslib="casuser", FORMAT=True;
56RUN;
57QUIT;
58 
59/* Nettoyage : supprime les tables CAS et le fichier temporaire */
60PROC CAS;
61 SESSION casauto;
62 TABLE.dropTable / caslib="casuser", name="volume_initial";
63 TABLE.dropTable / caslib="casuser", name="volume_processed";
64RUN;
65QUIT;
66filename volume_adv clear;
4 Bloque de código
PROC CAS / table.loadTable, simple.freq Data
Explicación :
Este ejemplo ilustra una integración más profunda con las capacidades analíticas de CAS. Se carga un archivo CSV, incluyendo una nueva variable categórica 'Region'. Luego, la acción `simple.freq` se utiliza para calcular la distribución de frecuencia de la variable 'Region' en la tabla en memoria distribuida. Además, `simple.summary` se usa para calcular estadísticas descriptivas (media) del `Volume` por `Region`, demostrando cómo CAS puede realizar análisis agregados de manera eficiente en grandes cantidades de datos. Esto resalta la potencia de cálculo paralelo de Viya.
¡Copiado!
1/* Remplacez 'cloud.example.com' et '5570' par les valeurs de votre environnement */
2/*options cashost="cloud.example.com" casport=5570;*/
3 
4/* Démarre la session Casauto si ce n'est pas déjà fait. */
5/*cas casauto;*/
6 
7/* Création d'un fichier CSV temporaire avec une variable catégorielle */
8filename volume_cas_analysis temp;
9DATA _null_;
10 file volume_cas_analysis;
11 put '12-06-2019,"1,245",10%,Est';
12 put '01-03-2020,"3,400",27%,Ouest';
13 put '02-07-2020,"2,341",18%,Nord';
14 put '03-06-2020,"5,700",45%,Sud';
15 put '04-03-2020,"12,686",100%,Est';
16 put '05-01-2020,"8,910",70%,Ouest';
17 put '06-02-2020,"1,500",15%,Nord';
18 put '07-01-2020,"6,000",50%,Sud';
19 put '08-01-2020,"9,500",80%,Est';
20RUN;
21 
22PROC CAS;
23 SESSION casauto;
24 
25 /* Charge le fichier CSV temporaire avec une nouvelle variable 'Region' */
26 TABLE.loadTable /
27 path="volume_cas_analysis",
28 caslib="casuser",
29 importOptions={
30 fileType="csv",
31 getNames=false,
32 vars={
33 {name="Date" type="double" informat="anydtdte10." FORMAT="nldate20."},
34 {name="Volume" type="double" informat="comma9." FORMAT="comma."},
35 {name="CroissancePct" type="double" informat="percent8." FORMAT="percent."},
36 {name="Region" type="varchar" LENGTH=50}
37 }
38 },
39 casout={name="volume_regions", replace=True, promote=False};
40 
41 /* Exécute une analyse de fréquence sur la variable 'Region' */
42 title "Analyse de Fréquence par Région (Exemple Viya/CAS)";
43 SIMPLE.freq /
44 TABLE={name="volume_regions", caslib="casuser"},
45 inputs={{name="Region"}};
46 
47 /* Calcule les moyennes du volume par région */
48 title "Statistiques Descriptives par Région (Exemple Viya/CAS)";
49 SIMPLE.summary /
50 TABLE={name="volume_regions", caslib="casuser"},
51 casout={name="summary_volume_regions", replace=True},
52 subSet={"mean"},
53 group={{
54 name="Region"}
55 },
56 inputs={{
57 name="Volume"}
58 };
59RUN;
60 
61QUIT;
62 
63/* Nettoyage : supprime les tables CAS et le fichier temporaire */
64PROC CAS;
65 SESSION casauto;
66 TABLE.dropTable / caslib="casuser", name="volume_regions";
67 TABLE.dropTable / caslib="casuser", name="summary_volume_regions";
68RUN;
69QUIT;
70filename volume_cas_analysis clear;
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.