Publié le :
ETL FICHIER_EXTERNE_SIMULE_OU_CREATION_INTERNE

Chargement d'un fichier CSV depuis un serveur

Ce code est également disponible en : Deutsch English Español
En attente de validation
L'action `upload` permet de transférer des données depuis un fichier client ou un fichier temporaire côté client vers une table en mémoire CAS. Dans cet exemple, `PROC HTTP` est d'abord utilisée pour récupérer un fichier CSV depuis une URL distante et le sauvegarder temporairement. Ensuite, l'action `upload` est invoquée via `PROC CAS` pour lire ce fichier temporaire et l'envoyer en tant que table CAS. Des options comme `casOut` permettent de spécifier le nom de la table cible dans CAS et de gérer le remplacement (`replace=True`). L'option `importOptions={fileType="csv"}` assure que le fichier est correctement interprété comme un CSV. Une fois la table chargée, une action `simple.summary` est exécutée pour fournir des statistiques descriptives groupées par une variable, démontrant ainsi le traitement des données dans l'environnement CAS.
Analyse des données

Type : FICHIER_EXTERNE_SIMULE_OU_CREATION_INTERNE


Les exemples créent des données CSV internes ou simulent des fichiers externes pour assurer leur autonomie.

1 Bloc de code
PROC CAS / DATA step Data
Explication :
Cet exemple montre le chargement direct d'un petit fichier CSV créé à la volée via un `DATA step` dans SAS, puis transféré vers CAS. La `filename` statement avec `temp` crée un fichier temporaire, dont le chemin est récupéré par `%sysfunc(pathname(mydata))`. L'action `table.upload` est ensuite utilisée pour charger ce fichier dans la session CAS sous le nom `my_temp_table`. Enfin, `table.columnInfo` est utilisé pour confirmer le chargement et la structure de la table.
Copié !
1/* Configurez votre hôte et port CAS */
2*options cashost="cloud.example.com" casport=5570;
3*cas casauto;
4 
5/* Crée un fichier CSV temporaire à partir de données inline */
6filename mydata temp;
7DATA _null_;
8 file mydata dsd;
9 put "Name,Age,City";
10 put "Alice,30,Paris";
11 put "Bob,24,Lyon";
12 put "Charlie,35,Marseille";
13RUN;
14 
15/* Récupère le chemin d'accès au fichier temporaire */
16%let temppath = %sysfunc(quote(%sysfunc(pathname(mydata))));
17 
18/* Charge le fichier CSV temporaire dans CAS */
19PROC CAS;
20 upload path=&temppath.
21 casOut={
22 name='my_temp_table',
23 replace=True
24 },
25 importOptions={fileType="csv"};
26RUN;
27 
28/* Vérifie que la table est chargée en affichant ses colonnes */
29PROC CAS;
30 TABLE.columnInfo / TABLE='my_temp_table';
31RUN;
32QUIT;
2 Bloc de code
PROC CAS / PROC HTTP Data
Explication :
Cet exemple utilise `PROC HTTP` pour télécharger un fichier CSV depuis une URL distante vers un fichier temporaire. Ce fichier est ensuite chargé dans CAS via `table.upload`. L'option `promote=True` dans `casOut` rend la table accessible globalement dans la session CAS. Pour vérifier le chargement, `table.tableInfo` affiche les métadonnées de la table, et `simple.summary` calcule des statistiques de base, illustrant des actions courantes de gestion et d'analyse de tables CAS.
Copié !
1/* Configurez votre hôte et port CAS */
2*options cashost="cloud.example.com" casport=5570;
3*cas casauto;
4 
5/* URL d'un fichier CSV public */
6%let data_url='http://support.sas.com/documentation/onlinedoc/viya/exampledatasets/classfit.csv';
7filename temp_csv temp;
8 
9/* Simule le téléchargement d'un fichier CSV depuis une URL */
10PROC HTTP method='get' url=&data_url. out=temp_csv;
11RUN;
12 
13/* Récupère le chemin d'accès au fichier temporaire */
14%let temppath = %sysfunc(quote(%sysfunc(pathname(temp_csv))));
15 
16/* Charge le fichier CSV temporaire dans CAS et le promeut en table globale */
17PROC CAS;
18 upload path=&temppath.
19 casOut={
20 name='class_promote',
21 replace=True,
22 promote=True /* Propage la table pour la rendre globale */
23 },
24 importOptions={fileType="csv"};
25RUN;
26 
27/* Vérifie les informations de la table (action courante) */
28PROC CAS;
29 TABLE.tableInfo / name='class_promote';
30RUN;
31 
32/* Obtient des statistiques sommaires (autre action courante) */
33PROC CAS;
34 t1.name = 'class_promote';
35 SIMPLE.summary /
36 TABLE = t1,
37 subSet = {"N", "MEAN", "STD"};
38QUIT;
3 Bloc de code
PROC CAS / DATA step Data
Explication :
Cet exemple démontre des capacités avancées en chargeant un fichier CSV, puis en utilisant un `DATA step` intégré à `PROC CAS` pour manipuler les données. Il calcule une nouvelle variable, l'Indice de Masse Corporelle (IMC), et filtre le jeu de données pour n'inclure que les enregistrements masculins. Enfin, l'action `simple.summary` est appliquée à la table résultante pour obtenir des statistiques sur les colonnes manipulées, montrant une transformation et une analyse en mémoire CAS.
Copié !
1/* Configurez votre hôte et port CAS */
2*options cashost="cloud.example.com" casport=5570;
3*cas casauto;
4 
5/* Crée un fichier CSV temporaire avec des données de santé */
6filename health_data temp;
7DATA _null_;
8 file health_data dsd;
9 put "ID,Gender,Height_cm,Weight_kg";
10 put "1,M,175,70";
11 put "2,F,160,55";
12 put "3,M,180,85";
13 put "4,F,165,60";
14 put "5,M,170,75";
15RUN;
16 
17/* Récupère le chemin d'accès au fichier temporaire */
18%let temppath = %sysfunc(quote(%sysfunc(pathname(health_data))));
19 
20/* Charge le fichier CSV temporaire dans CAS */
21PROC CAS;
22 upload path=&temppath.
23 casOut={
24 name='health_metrics',
25 replace=True
26 },
27 importOptions={fileType="csv"};
28RUN;
29 
30/* Manipule les données dans CAS : Calcule l'IMC et filtre par genre */
31PROC CAS;
32 DATA casuser.health_bmi / caslib='casuser' replace=True;
33 SET casuser.health_metrics;
34 BMI = Weight_kg / ((Height_cm / 100) ** 2);
35 where Gender = 'M'; /* Filtre pour ne conserver que les hommes */
36 RUN;
37 
38 /* Obtient des statistiques sommaires pour la nouvelle table avec l'IMC */
39 SIMPLE.summary /
40 TABLE='health_bmi',
41 inputs={'Height_cm', 'Weight_kg', 'BMI'},
42 subSet = {"MEAN", "MAX", "MIN"};
43RUN;
44QUIT;
4 Bloc de code
PROC CAS / DATA step Data
Explication :
Cet exemple en deux parties illustre d'abord la robustesse du système face aux erreurs : une tentative de chargement d'un fichier inexistant est effectuée, ce qui générera une erreur dans le log SAS, soulignant la nécessité d'une gestion des erreurs. La deuxième partie démontre la capacité de CAS à gérer de grands volumes de données. Un grand jeu de données factice est généré directement en mémoire CAS via un `DATA step` (`10 000 observations`), puis des statistiques sommaires groupées sont calculées. Cela met en évidence la performance de CAS pour le traitement distribué de données volumineuses.
Copié !
1/* Configurez votre hôte et port CAS */
2*options cashost="cloud.example.com" casport=5570;
3*cas casauto;
4 
5/* --- Partie 1: Démonstration de la gestion d'erreur avec un fichier inexistant --- */
6/* Tente de charger un fichier qui n'existe pas pour montrer une erreur */
7/* Cette opération devrait générer une erreur visible dans le log SAS */
8filename nonexist temp;
9PROC CAS;
10 upload path=%sysfunc(quote(%sysfunc(pathname(nonexist))))
11 casOut={
12 name='error_test',
13 replace=True
14 },
15 importOptions={fileType="csv"};
16RUN; /* Vérifier le log SAS pour les messages d'erreur de fichier introuvable */
17 
18/* --- Partie 2: Simulation de chargement et traitement de gros volumes de données --- */
19/* Création d'une table CAS de grande taille (simulée) */
20PROC CAS;
21 DATA casuser.large_data (drop=_i_) / caslib='casuser' replace=True;
22 DO _i_ = 1 to 10000; /* 10 000 observations simulées */
23 ID = _i_;
24 Category = ceil(rand('UNIFORM') * 5); /* 5 catégories aléatoires */
25 Value = rand('NORMAL') * 100 + 50;
26 OUTPUT;
27 END;
28 RUN;
29 
30 /* Calcul de statistiques sommaires sur la grande table, groupées par catégorie */
31 SIMPLE.summary /
32 TABLE='large_data',
33 inputs={'Value'},
34 groupBy={'Category'},
35 subSet = {"N", "MEAN", "STD"};
36RUN;
37QUIT;
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.