SAS/Base® – Traitement des fichiers externes
Articles parus
- De la création d'un fichier Excel en SAS® 9.1 - PDF - Février 2006 - SAS
- Lecture des données d'un fichier XML - PDF - Juin 2005 - SAS
- Les nouveautés XML de la SAS® 9.1 - PDF - Novembre 2004 - SAS
FAQs
- Comment lire un fichier plat contenu dans un fichier de type ZIP ? Réponse
- Comment lire un fichier hébergé par un serveur internet ou intranet à l'aide d'une instruction FILENAME ? Réponse
- Lors de la création d’un fichier texte, l’instruction « put var1 var2 ; » insère un espace entre les champs.
Comment ne pas avoir cet espace ? Réponse - Comment importer des données d'un fichier texte en conservant les variables caractères à points ? Réponse
- Comment créer une table SAS à partir de plusieurs fichiers texte, stocké dans un même répertoire, en commençant la lecture des observations sur la Nième ligne ? Réponse
- Comment importer un fichier texte contenant des caractères issus de langues différentes ? Réponse
- Comment créer un fichier texte à partir d'une table SAS et y intégrer des titres et footnotes ? Réponse
Réponses
- Catégories : SAS/Base
- OS : Windows, Unix
- Version : SAS® 8.2 et au-delà
- Vérifié en novembre 2013
Comment lire un fichier plat contenu dans un fichier de type ZIP ?
Il existe un moyen de lire un fichier texte zippé directement sans le décompresser :
- il faut installer un utilitaire de décompression des fichiers zippés : WINZIP, 7ZIP, PKUNZIP, WZUNZIP …
- puis il faut utiliser l’instruction FILENAME avec l’option PIPE pour exécuter cet utilitaire.
Exemple :
filename fichier pipe '"c:\program files\winzip\wzunzip.exe" -o -c c:\temp\Fichier.zip'; data a ; infile fichier dlm=',' ; /* le caractère " , " est le délimiteur de champs */ input A $ B $ C $ ; /* le fichier texte contient 3 champs de type caractère */ run ;
L'option " -c " permet d'extraire les données du fichier texte directement vers une console DOS et non vers le disque dur. SAS lira les informations affichées sur la mire DOS.
Il est important de noter les points suivants :
- Avec PKUNZIP.EXE, Il ne faut pas lire les premières lignes de la mire DOS (utilisez l'instruction FIRSTOBS=).
- Le fichier compressé au format ZIP ne doit contenir qu'un seul fichier texte.
- Il est parfois plus long de lire un fichier compressé que de décompresser puis lire les données.
Aide en ligne : D’autres exemples sont disponibles :
- Catégories : SAS/Base
- OS : Unix, Windows, z/OS
- Version : SAS® 8.2 et au-delà
- Vérifié en novembre 2013
Comment lire un fichier hébergé par un serveur internet ou intranet à l'aide d'une instruction FILENAME ?
Il suffit de déclarer une instruction FILENAME avec l'option URL pour spécifier le lien web (ou url) pour trouver votre fichier.
Exemple :
/* Déclaration d'un FILENAME de lecture avec le lien vers la page à lire. */ filename web url 'http://www.addresse/vers/ma/page.html' ; /* Déclaration d'un FILENAME d'écriture. */ filename test 'c:\temp\test.html'; data _null_; n=-1; infile web recfm=s nbyte=n length=len _infile_=tmp; input; file test recfm=n; put tmp $varying32767. len; run;
Attention : Le programme ci-dessus fonctionne correctement dans le cas où vous n'utilisez pas de machine PROXY pour vos connexions Intranet/Internet. Dans le cas où vous recevez l'erreur ‘ERROR: service httpd not found’, c'est qu'il n'arrive pas à contacter le lien demandé. Dans ce cas, une machine PROXY est utilisée. Vous devez déclarer son adresse web lors de l'exécution de l'instruction FILENAME. L'option DEBUG permet juste d'avoir plus d'information sur la lecture du fichier et n'est pas indispensable.
Exemple :
filename web url 'http://www.addresse/vers/ma/page.html' proxy='http://proxy2.eur.sas.com.:3128/' debug ;
- Catégories : SAS/Base
- OS : Unix, Windows, z/Os
- Version : 9 et au-delà
- Vérifié en novembre 2013
Lors de la création d’un fichier texte, l’instruction « put var1 var2 ; » insère un espace entre les champs.
Comment ne pas avoir cet espace ?
Vous pouvez utiliser cette syntaxe :
put var1 +(-1) var2;
+(-1) signifie que le curseur de placer d’une position en arrière.
Exemple :
data _null_ ; file "c:\temp\test.txt" ; var1="aaa" ; var2="111" ; put var1 +(-1) var2; run ;
Contenu de test.txt : aaa111
Aide en ligne : 1er exemple de la documentation PUT
- Catégories : SAS/Base
- OS : Unix, Windows, z/Os
- Version : 9 et au-delà
- Vérifié en novembre 2013
Comment importer des données d'un fichier texte en conservant les variables caractères à points ?
L’informat $CHAR2. permet de conserver le caractère ‘.’.
Exemple :
Soit le fichier en entrée suivant :
var1 var2 1 . 2 . 3 y 4 z 5 r 6 r
Le programme sera :
data test; infile 'C:\FAQ.txt' delimiter=' ' firstobs=2 truncover; input var1 var2 $char2. ; run;
- Catégories : SAS/Base
- OS : Windows
- Version : 9.1.3 et 9.2
- Vérifié en novembre 2013
Comment créer une table SAS à partir de plusieurs fichiers texte, stocké dans un même répertoire, en commençant la lecture des observations sur la Nième ligne ?
L’utilisation de l’instruction FILENAME avec l’option PIPE va vous permettre dans un premier temps d’utiliser la commande DOS pour lister les fichiers.
Ensuite, vous devez combiner les options FILEVAR et FIRSTOBS de l’instruction INFILE.
L’exemple de code ci-dessous liste l’ensemble des fichiers texte (*.txt) présents dans le répertoire « c:\temp\», puis lit ces fichiers à partir de la 2ème ligne. Tous les fichiers ont la même structure (3 variables textes séparées par des virgules).
%let rep=%bquote(")C:\temp\*.txt%bquote("); /*Répertoire à parcourir (filtre *.txt)*/
filename liste pipe "dir &rep /b /s";/* commande listant les fichiers du répertoire */
data ma_table; /* création de la table */
infile liste truncover; /* lecture de la liste des fichiers trouvés */
input fichier $200.;/*Variable contenant chemin et nom des fichiers de la liste*/
infile Parcourt
filevar=fichier /* quel fichier est à lire */
truncover
end=termine /* la variable ‘termine’ est créée lorsque
toute la liste de fichier a été lue */
firstobs=2 /* lire à partir de la 2eme ligne */
DLM=','; /* le séparateur de nos fichiers est une virgule */
do while(not termine); /* On boucle sur chaque ligne du fichier en cours */
input var1 $ var2 $ var3 $ ; /* récupère les trois premières variables */
output; /* écrire les variables var1, var2 et var3 dans notre table */
end;
run ;
- Catégories : SAS/Base
- OS : Tous
- Version : SAS 9.x
- Vérifié en novembre 2013
Comment importer un fichier texte contenant des caractères issus de langues différentes ?
Pour pouvoir importer ce type de fichier, il faut avoir installé SAS DBCS avec prise en charge unicode. Ensuite, les étapes sont :
- Démarrer « SAS 9.1 English with DBCS and Unicode support » avec l’option –encoding UTF8 dans la commande de démarrage.
- Importer le fichier texte via une étape DATA en incluant l’encoding correct du fichier dans l’instruction Infile (ex : encoding=unicode).
- Repérer les variables contenant les caractères spécifiques à une langue, puis les transformer comme suit avec la fonction KCVT dans l’étape DATA:
Out =kcvt (in,"Encoding_entrée","Encoding_sortie");
Exemple :
data table; infile "C:\exemple\extract.txt" lrecl=64000 firstobs=2 encoding=unicode ignoredoseof dsd missover dlm='09'x ; input var1 var2 ; var1 =kcvt (var1,"UTF8","wlatin2"); run ;
UTF8 car l’option placée au démarrage de SAS modifie automatiquement tous les ‘encoding’ à UTF8. WLATIN2 : pour les caractères de l’Europe centrale (Pologne, Croatie, …). Pour les caractères français, l’encoding est WLATIN1.
Aide en ligne : Comprendre l’option encoding dans SAS
- Catégories : SAS/Base
- OS : Unix, Windows, z/Os
- Version : SAS® 8.2 et au-delà
- Vérifié en novembre 2013
Comment créer un fichier texte à partir d'une table SAS et y intégrer des titres et footnotes ?
L'astuce consiste à utiliser les options ODS et FOOTNOTE dans une instruction file print. Voici un exemple :
/* Redirection de la sortie dans un fichier texte */ ods listing file='c:\temp\test.txt'; /* l'option variables= permet de choisir les noms des variables de votre table SAS */ data _null_; set sashelp.class; file print ods=(variables=(name age)) footnote; put _ods_; title 'mon titre'; footnote 'mon footnote'; run; /* Fermeture */ ods listing close; /* Pour que les résultats soient à nouveau affichés dans la fenêtre Output */ ods listing;
Aide en ligne : SAS® 9.4 Output Delivery System: User's Guide