Publicado el :
ETL CREATION_INTERNE

Descargar un archivo CSV local y aplicar un formato SAS

Este código también está disponible en: Deutsch English Français
En espera de validación
La acción 'upload' del 'table action set' en PROC CAS se utiliza para transferir un archivo CSV desde el sistema de archivos local del cliente (o del servidor Compute si se ejecuta en este) a una tabla en memoria en CAS. La opción 'importOptions' es crucial, ya que permite especificar el tipo de archivo (CSV), indicar si la primera línea contiene los nombres de las columnas ('getNames=True'), y sobre todo aplicar informats y formatos específicos a variables a través del subparámetro 'vars'. Para las fechas en formato 'MM/DD/AAAA', el informat 'mmddyy10.' se utiliza para convertir la cadena en un valor numérico SAS© (número de días desde el 1 de enero de 1960), y el formato 'nldate20.' se aplica luego para mostrar estos valores numéricos de manera legible y local. Cada ejemplo incluye la creación de un archivo CSV temporal para asegurar la autonomía y la ejecutabilidad.
Análisis de datos

Type : CREATION_INTERNE


Los ejemplos utilizan datos CSV generados directamente en el código SAS a través de un paso DATA _NULL_, simulando la disponibilidad de un archivo CSV local.

1 Bloque de código
PROC CAS / UPLOAD Data
Explicación :
Este ejemplo ilustra la carga de un archivo CSV simple. Primero crea un archivo CSV llamado 'myusage_basic.csv' con datos básicos. Luego, utiliza la acción `upload` en `PROC CAS` para cargar este archivo en una tabla CAS llamada 'myusage_basic'. Las opciones `importOptions` especifican que el archivo es un CSV, que la primera línea contiene los nombres de las columnas (`getNames=True`), y aplica el informat `mmddyy10.` y el formato `nldate20.` a las columnas de fecha (`recorddt`, `startdt`, `enddt`) para interpretarlas correctamente. Finalmente, `print myusage_basic(obs=3)` muestra las tres primeras observaciones de la tabla cargada.
¡Copiado!
1/* Création du fichier CSV local */
2DATA _NULL_;
3 FILE "/tmp/myusage_basic.csv" DSD LRECL=200;
4 PUT 'account,high,low,recorddt,startdt,enddt,kwh';
5 PUT '1000001,82,71,07/03/2013,07/01/2013,07/02/2013,54';
6 PUT '1000001,85,70,07/02/2013,06/30/2013,07/01/2013,70';
7 PUT '1000001,85,68,07/01/2013,06/29/2013,06/30/2013,78';
8RUN;
9 
10/* Connexion au serveur CAS (remplacer par vos infos) */
11*options cashost='cloud.example.com' casport=5570;
12cas casauto;
13 
14PROC CAS;
15 SESSION casauto;
16 upload path="/tmp/myusage_basic.csv"
17 casout={name="myusage_basic", replace=True},
18 importOptions={
19 fileType="csv",
20 getNames=True,
21 vars={
22 recorddt={informat="mmddyy10.", FORMAT="nldate20."},
23 startdt={informat="mmddyy10.", FORMAT="nldate20."},
24 enddt={informat="mmddyy10.", FORMAT="nldate20."}
25 }};
26 
27 PRINT myusage_basic(obs=3);
28RUN;
29QUIT;
30 
31/* Suppression du fichier CSV temporaire */
32x "rm /tmp/myusage_basic.csv";
2 Bloque de código
PROC CAS / UPLOAD Data
Explicación :
Este ejemplo extiende el caso base agregando una columna 'cost' y usando `promote=True` para la tabla CAS, haciéndola disponible para todas las sesiones CAS. El archivo CSV 'myusage_inter.csv' se crea con una nueva columna 'cost'. Durante la carga, el informat `comma8.2` y el formato `dollar10.2` se aplican a la columna 'cost' para gestionar los valores monetarios. Después de la carga, la acción `table.columnInfo` se utiliza para verificar las propiedades de las columnas, incluyendo los informats y formatos aplicados, y luego se muestra la tabla completa.
¡Copiado!
1/* Création du fichier CSV local avec plus de données */
2DATA _NULL_;
3 FILE "/tmp/myusage_inter.csv" DSD LRECL=200;
4 PUT 'account,high,low,recorddt,startdt,enddt,kwh,cost';
5 PUT '1000001,82,71,07/03/2013,07/01/2013,07/02/2013,54,12.50';
6 PUT '1000001,85,70,07/02/2013,06/30/2013,07/01/2013,70,15.75';
7 PUT '1000002,85,68,07/01/2013,06/29/2013,06/30/2013,78,20.00';
8 PUT '1000002,90,70,06/30/2013,06/28/2013,06/29/2013,72,18.25';
9 PUT '1000003,88,68,06/29/2013,06/27/2013,06/28/2013,54,10.00';
10RUN;
11 
12/* Connexion au serveur CAS (remplacer par vos infos) */
13*options cashost='cloud.example.com' casport=5570;
14cas casauto;
15 
16PROC CAS;
17 SESSION casauto;
18 upload path="/tmp/myusage_inter.csv"
19 casout={name="myusage_inter", replace=True, promote=True},
20 importOptions={
21 fileType="csv",
22 getNames=True,
23 vars={
24 recorddt={informat="mmddyy10.", FORMAT="nldate20."},
25 startdt={informat="mmddyy10.", FORMAT="nldate20."},
26 enddt={informat="mmddyy10.", FORMAT="nldate20."},
27 cost={informat="comma8.2", FORMAT="dollar10.2"}
28 }};
29 
30 TABLE.columnInfo RESULT=r / TABLE={name='myusage_inter'};
31 PRINT r;
32 
33 PRINT myusage_inter;
34RUN;
35QUIT;
36 
37/* Suppression du fichier CSV temporaire */
38x "rm /tmp/myusage_inter.csv";
3 Bloque de código
PROC CAS / UPLOAD Data
Explicación :
Este ejemplo avanzado utiliza macrovariables (`%LET`) para definir dinámicamente el nombre del archivo CSV (incluyendo la fecha y hora del sistema para la unicidad), el nombre de la tabla CAS y la caslib. Antes de la carga, incluye una lógica condicional (`if table.tableInfo(...) then do; table.dropTable...; end;`) para eliminar una tabla CAS existente si tiene el mismo nombre, garantizando una ejecución limpia. El archivo CSV se crea y se carga. Se utilizan nuevos informats/formatos (`date9.`, `comma10.2`, `dollar10.2`) para varios tipos de datos. Finalmente, se agrega un comando `x "rm &CSV_FILE";` para limpiar el archivo temporal en el sistema operativo.
¡Copiado!
1/* Création du fichier CSV local */
2%LET CSV_FILE = /tmp/mydata_advanced_&sysdate._%sysfunc(compress(&systime.)).csv;
3%LET CAS_TABLE = mydata_advanced;
4%LET CAS_LIB = CASUSER;
5 
6DATA _NULL_;
7 FILE "&CSV_FILE" DSD LRECL=200;
8 PUT 'ID,Category,Value,EntryDate';
9 PUT '1,A,123.45,12-JAN-2023';
10 PUT '2,B,678.90,01-FEB-2023';
11 PUT '3,A,111.22,03-MAR-2023';
12 PUT '4,C,333.33,15-APR-2023';
13RUN;
14 
15/* Connexion au serveur CAS (remplacer par vos infos) */
16*options cashost='cloud.example.com' casport=5570;
17cas casauto;
18 
19PROC CAS;
20 SESSION casauto;
21 /* Vérifier si la table existe déjà et la supprimer si nécessaire */
22 IF TABLE.tableInfo(caslib="&CAS_LIB", name="&CAS_TABLE") THEN DO;
23 TABLE.dropTable caslib="&CAS_LIB" name="&CAS_TABLE";
24 END;
25 
26 upload path="&CSV_FILE"
27 casout={name="&CAS_TABLE", caslib="&CAS_LIB", replace=True, promote=True},
28 importOptions={
29 fileType="csv",
30 getNames=True,
31 vars={
32 EntryDate={informat="date9.", FORMAT="nldate20."},
33 Value={informat="comma10.2", FORMAT="dollar10.2"}
34 }};
35 
36 PRINT &CAS_TABLE;
37RUN;
38QUIT;
39 
40/* Supprimer le fichier CSV temporaire après utilisation */
41x "rm &CSV_FILE";
4 Bloque de código
PROC CAS / UPLOAD, FEDSQL, SAVETABLE Data
Explicación :
Este ejemplo ilustra un flujo de trabajo completo en un entorno Viya/CAS. Comienza con la creación de un archivo CSV 'transactions.csv'. Luego, la acción `upload` carga estos datos en una tabla CAS 'raw_transactions', aplicando informats/formatos (`yymmdd10.`, `comma10.2`, `dollar10.2`) para las fechas y montos. El siguiente paso utiliza `fedsql.execDirect` para ejecutar una consulta SQL directamente sobre los datos en memoria CAS, agregando las transacciones por `CustomerID` para calcular el número total de transacciones y el monto total gastado. La tabla agregada resultante se guarda de forma persistente en la caslib 'CASUSER' como un archivo SASHDA (`table.save`). Finalmente, se muestra la tabla agregada. Este proceso destaca la capacidad de CAS para gestionar la carga, el procesamiento y la persistencia de datos en memoria.
¡Copiado!
1/* Création du fichier CSV local */
2DATA _NULL_;
3 FILE "/tmp/transactions.csv" DSD LRECL=200;
4 PUT 'TransactionID,CustomerID,Amount,TransactionDate,ProductCode';
5 PUT '1,C001,150.75,2023-01-15,PROD001';
6 PUT '2,C002,230.00,2023-01-16,PROD002';
7 PUT '3,C001,50.25,2023-01-15,PROD003';
8 PUT '4,C003,100.00,2023-01-17,PROD001';
9 PUT '5,C002,75.50,2023-01-16,PROD004';
10RUN;
11 
12/* Connexion au serveur CAS (remplacer par vos infos) */
13*options cashost='cloud.example.com' casport=5570;
14cas casauto;
15 
16PROC CAS;
17 SESSION casauto;
18 caslib _all_ assign;
19 
20 /* 1. Charger le fichier CSV */
21 upload path="/tmp/transactions.csv"
22 casout={name="raw_transactions", replace=True, promote=True},
23 importOptions={
24 fileType="csv",
25 getNames=True,
26 vars={
27 TransactionDate={informat="yymmdd10.", FORMAT="nldate20."},
28 Amount={informat="comma10.2", FORMAT="dollar10.2"}
29 }};
30 
31 /* 2. Effectuer une agrégation avec FedSQL sur la table CAS */
32 fedsql.execDirect RESULT=res / query="
33 CREATE TABLE aggregated_transactions AS
34 SELECT
35 CustomerID,
36 COUNT(TransactionID) AS TotalTransactions,
37 SUM(Amount) AS TotalAmountSpent
38 FROM raw_transactions
39 GROUP BY CustomerID
40 ORDER BY TotalAmountSpent DESC;
41 ";
42 PRINT res;
43 
44 /* 3. Sauvegarder la table agrégée dans une caslib (ex: CASUSER) */
45 TABLE.save RESULT=saveres /
46 TABLE={name="aggregated_transactions", caslib="CASUSER"},
47 name="aggregated_transactions.sashdat",
48 replace=True;
49 PRINT saveres;
50 
51 /* 4. Afficher les résultats agrégés */
52 PRINT aggregated_transactions;
53RUN;
54QUIT;
55 
56x "rm /tmp/transactions.csv";
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