Publié le :

Lecture et écriture de fichiers externes

Ce code est également disponible en : Deutsch English Español
Snippet validé
L'accès aux données est une tâche fondamentale en programmation SAS©. Ce guide couvre la lecture de fichiers externes via l'instruction INFILE et l'écriture via l'instruction FILE, en spécifiant directement le chemin physique ou en utilisant des filerefs pour une référence indirecte. La gestion efficace de multiples fichiers est également présentée à travers l'affectation de filerefs à des emplacements de stockage agrégés. Des méthodes d'accès avancées comme CATALOG, DATAURL, FTP, Hadoop, SOCKET, URL et WebDAV sont listées. Une section est dédiée à la lecture de données binaires à l'aide d'informats SAS© spécifiques, en insistant sur les paramètres RECFM et LRECL pour les données binaires par colonne. Enfin, des exemples sont intégrés pour optimiser le chargement de données dans CAS avec le format DVR.
Analyse des données

Type : MIXTE


Les exemples utilisent des données générées (datalines) pour les démonstrations CAS, mais d'autres exemples dépendent de fichiers externes non créés dans le code (marqués external_data_not_found: 1).

1 Bloc de code
DATA STEP
Explication :
Cet exemple montre comment lire des données brutes à partir d'un fichier externe en utilisant les instructions INFILE et INPUT. INFILE est requise car les données source proviennent d'un fichier texte externe.
Copié !
1DATA weight;
2 INFILE or
3 INPUT PatientID $ Week1 Week8 Week16;
4 loss=Week1-Week16;
5RUN;
2 Bloc de code
DATA STEP
Explication :
Spécifie le fichier contenant les données d'entrée directement en utilisant son nom physique entre guillemets.
Copié !
1DATA weight;
2 INFILE 'input-file';
3 INPUT idno $ week1 week16;
4 loss=week1-week16;
5RUN;
3 Bloc de code
DATA STEP
Explication :
Identifie le fichier vers lequel l'instruction PUT écrit les données. Cet exemple montre l'écriture de conditions basées sur une variable 'loss'.
Copié !
1file 'output-file';
2DATA STATUS;
3 IF loss ge 5 and loss le 9 THEN
4 put idno loss 'AWARD STATUS=3';
5 ELSE IF loss ge 10 and loss le 14 THEN
6 put idno loss 'AWARD STATUS=2';
7 ELSE IF loss ge 15 THEN
8 put idno loss 'AWARD STATUS=1';
9RUN;
4 Bloc de code
%INCLUDE statement
Explication :
Permet d'incorporer des instructions ou des données brutes d'un autre fichier dans votre job SAS et de les exécuter.
Copié !
1%include 'source-file';
5 Bloc de code
DATA STEP / FILENAME statement
Explication :
Assigne un fileref 'mydata' à un fichier d'entrée, puis utilise ce fileref dans l'instruction INFILE pour lire les données.
Copié !
1filename mydata 'input-file';
2DATA weight;
3 INFILE mydata;
4 INPUT idno $ week1 week16;
5 loss=week1-week16;
6RUN;
6 Bloc de code
PROC IMPORT / FILENAME statement
Explication :
Assigne un fileref 'mydata' à un fichier d'entrée, puis utilise PROC IMPORT pour importer les données et PROC PRINT pour les afficher.
Copié !
1filename mydata 'input-file';
2PROC IMPORT datafile=mydata
3 out=shoes dbms=dlm replace;
4RUN;
5PROC PRINT DATA=shoes; RUN;
7 Bloc de code
DATA STEP / FILENAME statement
Explication :
Assigne un fileref 'myreport' à un fichier de sortie et un fileref 'mydata' à un fichier d'entrée, puis lit les données pour créer un nouveau jeu de données.
Copié !
1filename myreport 'output-file';
2DATA myreport;
3 INFILE mydata;
4 INPUT idno $ week1 week16;
5 loss=week1-week16;
6RUN;
8 Bloc de code
PROC EXPORT Data
Explication :
Exporte le jeu de données SASHELP.SHOES vers le fichier externe référencé par 'myreport', en utilisant un délimiteur espace.
Copié !
1PROC EXPORT DATA=sashelp.shoes
2 outfile=myreport dbms=dlm replace;
3 delimiter=' ';
4RUN;
9 Bloc de code
FILENAME statement
Explication :
Assigne un fileref 'mypgm' à un fichier contenant des instructions de programme.
Copié !
1filename mypgm 'source-file';
10 Bloc de code
FILENAME statement
Explication :
Assigne un fileref 'myprinter' à un périphérique de sortie spécifié par son type et les options d'hôte.
Copié !
1filename myprinter
2;
3 
11 Bloc de code
DATA STEP
Explication :
Utilise le fileref 'mydata' (préalablement assigné) dans l'instruction INFILE pour lire les données.
Copié !
1DATA weight;
2 INFILE mydata;
3 INPUT idno $ week1 week16;
4 loss=week1-week16;
12 Bloc de code
DATA STEP
Explication :
Utilise le fileref 'myreport' (préalablement assigné) dans l'instruction FILE pour écrire des données conditionnellement.
Copié !
1file myreport;
2 IF loss ge 5 and loss le 9 THEN
3 put idno loss 'AWARD STATUS=3';
4 ELSE IF loss ge 10 and loss le 14 THEN
5 put idno loss 'AWARD STATUS=2';
6 ELSE IF loss ge 15 THEN
7 put idno loss 'AWARD STATUS=1';
8RUN;
13 Bloc de code
%INCLUDE statement
Explication :
Inclut le contenu du fichier référencé par 'mypgm' dans le job SAS.
Copié !
1%include mypgm;
14 Bloc de code
FILENAME statement
Explication :
Assigne un fileref 'mydir' à un répertoire ou un PDS (Partitioned Data Set), permettant d'accéder efficacement à plusieurs fichiers.
Copié !
1filename mydir 'directory-or-PDS-name';
15 Bloc de code
DATA STEP
Explication :
Lit les données du fichier 'qrt1.data' situé dans l'emplacement agrégé référencé par 'mydir'.
Copié !
1DATA weight;
2 INFILE mydir(qrt1.DATA);
3 INPUT idno $ week1 week16;
4 loss=week1-week16;
5RUN;
16 Bloc de code
DATA STEP
Explication :
Écrit des données conditionnellement vers le fichier 'awards' situé dans l'emplacement agrégé référencé par 'mydir'.
Copié !
1file mydir(awards);
2IF loss ge 5 THEN put idno loss
3 'AWARD STATUS=3';
4 ELSE IF loss ge 10
5 THEN put idno loss 'AWARD STATUS=2';
6 ELSE IF loss ge 15
7 THEN put idno loss 'AWARD STATUS=1';
8RUN;
17 Bloc de code
%INCLUDE statement
Explication :
Inclut le contenu du fichier 'whole.program' situé dans l'emplacement agrégé référencé par 'mydir'.
Copié !
1%include mydir(whole.program);
18 Bloc de code
DATA STEP
Explication :
Lit les données binaires par colonne à partir d'un fichier spécifié, en utilisant les options INFILE RECFM=F et LRECL=160.
Copié !
1DATA out;
2 INFILE file-specification or path-to-file recfm=f lrecl=160;
3 INPUT var1;
4RUN;
19 Bloc de code
DATA STEP / PROC CASUTIL Data
Explication :
Cet exemple prépare d'abord des données dans une bibliothèque de travail SAS (WORK) puis utilise PROC CASUTIL pour charger ces données sur le serveur CAS. Cette méthode standard ne permet pas l'application directe de l'optimisation DVR lors du chargement.
Copié !
1/* Préparation des données dans WORK */
2DATA maTableWork;
3 INPUT PatientID $ Week1 Week8 Week16;
4 DATALINES;
5P1 100 95 90
6P2 80 78 75
7P3 120 115 110
8;
9RUN;
10 
11/* Méthode standard - ne permet pas l'optimisation DVR directe */
12PROC CASUTIL;
13 load DATA=maTableWork casout="maTableCAS";
14QUIT;
20 Bloc de code
DATA STEP / PROC CAS Data
Explication :
Cet exemple crée d'abord une table SAS temporaire ('somedata') avec des valeurs répétées. Il utilise ensuite l'instruction UPLOAD de PROC CAS pour charger cette table sur le serveur CAS en appliquant directement le format DVR et des options de conversion VARCHAR. Ceci optimise l'utilisation de la mémoire en une seule étape. Une étape de nettoyage préalable et de vérification est incluse.
Copié !
1/* Création d'une table temporaire SAS pour l'exemple */
2DATA somedata;
3 LENGTH id $8 name $20 value 8;
4 DO id = 1 to 10;
5 name = cats('Item', id);
6 value = mod(id, 3) * 100;
7 OUTPUT;
8 END;
9 /* Ajout de valeurs répétées pour montrer l'efficacité de DVR */
10 DO id = 11 to 20;
11 name = 'Repeated';
12 value = 50;
13 OUTPUT;
14 END;
15RUN;
16 
17PROC CAS;
18 /* Nettoyage préalable si nécessaire */
19 ACTION TABLE.droptable / name="somedata" caslib="casuser" quiet=true;
20
21 /* Chargement optimisé */
22 upload /
23 /* Récupération dynamique du chemin physique de la table SAS */
24 path="%sysfunc(pathname(work))/somedata.sas7bdat"
25
26 /* Configuration de la table de sortie CAS */
27 casout={
28 caslib="casuser"
29 name="somedata"
30 promote=true, /* Rendre la table globale */
31 memoryformat="DVR", /* Activation de la compression DVR */
32 replication=0 /* Ajuster la réplication selon les besoins */
33 }
34
35 /* Options d'importation supplémentaires */
36 importoptions={
37 filetype="BASESAS",
38 varcharConversion=17 /* Convertit les CHAR > 16 octets en VARCHAR */
39 }
40 ;
41QUIT;
42 
43/* Vérification du format de la table en CAS (optionnel) */
44PROC CASUTIL;
45 list tables caslib="casuser" level="memory";
46QUIT;
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


Documentation liée : Accès aux données

Sujet / Mot-cléLien vers la ressource
DOC FedSQL fr/sampleCode/FEDSQLD493
DOC Définitions des Moteurs SAS fr/sampleCode/DEFINI88E2
DOC Bibliothèques SAS par Défaut fr/sampleCode/BIBLIOB755
DOC Fonctionnement des Moteurs avec les Fichiers fr/sampleCode/FONCTI81D4
DOC Caractéristiques des moteurs SAS fr/sampleCode/CARACTABC0
DOC Définitions des Moteurs SAS fr/sampleCode/DEFINI6352
Banner
Le Conseil de l'Expert
Expert
Michael
Responsable de l'infrastructure Viya.
« Pour vos architectures modernes, privilégiez le format DVR lors du chargement vers CAS ; c'est le levier le plus efficace pour maximiser la vitesse de traitement en mémoire. »