support clients / FAQ

SAS/Base® – Traitement des fichiers externes

Articles parus

FAQs

  • Comment lire un fichier plat contenu dans un fichier de type ZIP ? Réponse
  • Comment importer des données d'un fichier texte en conservant les variables caractères à points ? Réponse
  • Comment créer un fichier texte à partir d'une table SAS et y intégrer des titres et footnotes ? Réponse
  • Comment importer un fichier texte contenant des caractères issus de langues différentes ? 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 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

Autres FAQs SAS/Base®

Généralités | Procédures, Instructions et Fonctions | Macro-langage | Interface, Log, Output | Exemples | ODS

Réponses

Caractéristiques :
  • Catégories : SAS/Base
  • OS : Windows, Unix
  • Version : SAS® 8.2 et au-delà
  • Vérifié en février 2011

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 : PKUNZIP.EXE, WZUNZIP.EXE
  • puis il faut utiliser l'instruction FILENAME avec l'option PIPE pour exécuter cet utilitaire.

Exemple :

filename fichier pipe 'c:\pkunzip.exe c:\fichier.zip -c' ;
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 :

  • Il ne faut pas lire les premières lignes de la mire DOS. Elles concernent seulement l'utilitaire PKUNZIP.EXE. (Pour ce faire, utiliser 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 :

 
 
 
Caractéristiques :
  • Catégories : SAS/Base
  • OS : Unix, Windows, z/Os
  • Version : 9 et au-delà
  • Vérifié en décembre 2010
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
;
 
 
 
Caractéristiques :
  • Catégories : SAS/Base
  • OS : Unix, Windows, z/Os
  • Version : SAS® 8.2 et au-delà Vérifié en mai 2010
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.2 Output Delivery System: User's Guide 

 
 
 
Caractéristiques :
  • Catégories : Base
  • OS : Tous
  • Version : SAS 9.1
  • Vérifié en décembre 2010
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 :

  1. Démarrer « SAS 9.1 English with DBCS and Unicode support » avec l'option –encoding UTF8 dans la commande de démarrage.
  2. Importer le fichier texte via une étape DATA en incluant l’encoding correct du fichier dans l’instruction Infile (ex : encoding=unicode).
  3. 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®

 
 
 
 
Caractéristiques :
  • Catégories :
  • OS : Windows
  • Version : 9.1.3 et 9.2
  • Vérifié en Mars 2011
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 ;
 
 
 
Caractéristiques :
  • Catégories : SAS/Base
  • OS : Unix, Windows, z/OS
  • Version : SAS® 8.2 et au-delà
  • Vérifié en octobre 2009
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 ;

Aide en ligne :  SAS 9.2, SAS 9.1, SAS 8.2

 
 
 
Caractéristiques :
  • Catégories : SAS/Base
  • OS : Unix, Windows, z/Os
  • Version : 9 et au-delà
  • Vérifié en décembre 2010
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 arrîere.

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