Publié le :
ETL CREATION_INTERNE

Télécharger un fichier CSV local et appliquer un format SAS

Ce code est également disponible en : Deutsch English Español
En attente de validation
L'action 'upload' du 'table action set' dans PROC CAS est utilisée pour transférer un fichier CSV depuis le système de fichiers local du client (ou du serveur Compute si exécuté sur celui-ci) vers une table en mémoire dans CAS. L'option 'importOptions' est cruciale, car elle permet de spécifier le type de fichier (CSV), d'indiquer si la première ligne contient les noms de colonnes ('getNames=True'), et surtout d'appliquer des informats et formats spécifiques à des variables via le sous-paramètre 'vars'. Pour les dates au format 'MM/JJ/AAAA', l'informat 'mmddyy10.' est utilisé pour convertir la chaîne en une valeur numérique SAS© (nombre de jours depuis le 1er janvier 1960), et le format 'nldate20.' est ensuite appliqué pour afficher ces valeurs numériques de manière lisible et locale. Chaque exemple inclut la création d'un fichier CSV temporaire pour assurer l'autonomie et l'exécutabilité.
Analyse des données

Type : CREATION_INTERNE


Les exemples utilisent des données CSV générées directement dans le code SAS via un DATA _NULL_ step, simulant la disponibilité d'un fichier CSV local.

1 Bloc de code
PROC CAS / UPLOAD Data
Explication :
Cet exemple illustre le téléchargement d'un fichier CSV simple. Il crée d'abord un fichier CSV nommé 'myusage_basic.csv' avec des données de base. Ensuite, il utilise l'action `upload` dans `PROC CAS` pour charger ce fichier dans une table CAS appelée 'myusage_basic'. Les options `importOptions` spécifient que le fichier est un CSV, que la première ligne contient les noms de colonnes (`getNames=True`), et applique l'informat `mmddyy10.` et le format `nldate20.` aux colonnes de date (`recorddt`, `startdt`, `enddt`) pour les interpréter correctement. Enfin, `print myusage_basic(obs=3)` affiche les trois premières observations de la table chargée.
Copié !
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 Bloc de code
PROC CAS / UPLOAD Data
Explication :
Cet exemple étend le cas de base en ajoutant une colonne 'cost' et en utilisant `promote=True` pour la table CAS, la rendant ainsi disponible à toutes les sessions CAS. Le fichier CSV 'myusage_inter.csv' est créé avec une nouvelle colonne 'cost'. Lors du téléchargement, l'informat `comma8.2` et le format `dollar10.2` sont appliqués à la colonne 'cost' pour gérer les valeurs monétaires. Après l'upload, l'action `table.columnInfo` est utilisée pour vérifier les propriétés des colonnes, y compris les informats et formats appliqués, puis la table complète est affichée.
Copié !
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 Bloc de code
PROC CAS / UPLOAD Data
Explication :
Cet exemple avancé utilise des macro-variables (`%LET`) pour définir dynamiquement le nom du fichier CSV (incluant la date et l'heure système pour l'unicité), le nom de la table CAS et la caslib. Avant le téléchargement, il inclut une logique conditionnelle (`if table.tableInfo(...) then do; table.dropTable...; end;`) pour supprimer une table CAS existante si elle porte le même nom, garantissant une exécution propre. Le fichier CSV est créé et téléchargé. De nouveaux informats/formats (`date9.`, `comma10.2`, `dollar10.2`) sont utilisés pour des types de données variés. Enfin, une commande `x "rm &CSV_FILE";` est ajoutée pour nettoyer le fichier temporaire sur le système d'exploitation.
Copié !
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 Bloc de code
PROC CAS / UPLOAD, FEDSQL, SAVETABLE Data
Explication :
Cet exemple illustre un workflow complet dans un environnement Viya/CAS. Il commence par la création d'un fichier CSV 'transactions.csv'. Ensuite, l'action `upload` charge ces données dans une table CAS 'raw_transactions', appliquant des informats/formats (`yymmdd10.`, `comma10.2`, `dollar10.2`) pour les dates et montants. L'étape suivante utilise `fedsql.execDirect` pour exécuter une requête SQL directement sur les données en mémoire CAS, agrégeant les transactions par `CustomerID` pour calculer le nombre total de transactions et le montant total dépensé. La table agrégée résultante est ensuite sauvegardée de manière persistante dans la caslib 'CASUSER' sous forme de fichier SASHDA (`table.save`). Enfin, la table agrégée est affichée. Ce processus met en évidence la capacité de CAS à gérer le chargement, le traitement et la persistance des données en mémoire.
Copié !
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";
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Copyright © SAS Institute Inc. All Rights Reserved


Banner
Le Conseil de l'Expert
Expert
Michael
Responsable de l'infrastructure Viya.
« L'importation de fichiers CSV vers l'environnement SAS Viya est une opération qui dépasse le simple transfert de données ; c'est une étape cruciale de typage et de structuration. L'action upload du moteur CAS se distingue par sa capacité à transformer des chaînes de caractères brutes en données analytiques riches dès le chargement. L'utilisation du paramètre importOptions, et plus spécifiquement du sous-paramètre vars, permet de définir des informats (pour la lecture) et des formats (pour l'affichage) de manière granulaire.

C'est particulièrement vital pour les dates : en appliquant l'informat mmddyy10., vous convertissez une date texte comme "07/03/2013" en une valeur numérique SAS standard. L'application simultanée du format nldate20. garantit que cette donnée sera restituée de façon lisible et localisée dans vos rapports, tout en restant parfaitement calculable pour des agrégations temporelles. »