Publié le :
ETL CREATION_INTERNE

Exemples de gestion des délimiteurs avec INPUT et INFILE

Ce code est également disponible en : Deutsch English Español
En attente de validation
Le script présente 7 cas d'usage pour l'importation de données textuelles : lecture standard CSV avec l'option DSD, utilisation du modificateur tilde (~) pour la gestion avancée des quotes, définition explicite des longueurs, utilisation de plusieurs délimiteurs simultanés, définition du délimiteur via une variable, lecture dynamique du délimiteur depuis les données elles-mêmes, et utilisation d'une chaîne de caractères complète comme séparateur (DLMSTR).
Analyse des données

Type : CREATION_INTERNE


Les données sont incluses directement dans le code via les instructions DATALINES et CARDS.

1 Bloc de code
DATA STEP Data
Explication :
Lecture d'un format CSV standard. L'option `dlm=','` spécifie la virgule comme séparateur et `dsd` (Delimiter Sensitive Data) gère correctement les guillemets et les valeurs manquantes.
Copié !
1title '1.3.3a Delimited List Input Modifiers';
2DATA base;
3LENGTH lname $15;
4INFILE DATALINES dlm=',' dsd;
5INPUT fname $ lname $ dob :mmddyy10.;
6DATALINES;
7'Sam','Johnson',12/15/1945
8'Susan','Mc Callister',10/10/1983
9RUN;
2 Bloc de code
DATA STEP Data
Explication :
Utilisation du modificateur `~` (tilde) dans l'instruction INPUT. Il permet ici de lire des champs contenant potentiellement des délimiteurs (comme la virgule dans 'Fresno, CA') tout en respectant la structure DSD.
Copié !
1title2 'Using the ~ Format Modifier';
2DATA base;
3LENGTH lname $15;
4INFILE DATALINES dlm=',' dsd;
5INPUT fname $ lname $ birthloc $~15. dob :mmddyy10. ;
6DATALINES;
7'Sam','Johnson', 'Fresno, CA','12/15/1945'
8'Susan','Mc Callister','Seattle, WA',10/10/1983
9RUN;
3 Bloc de code
DATA STEP Data
Explication :
Lecture où la longueur des variables est définie au préalable par l'instruction `LENGTH`, permettant un contrôle précis du stockage sans modificateur dans l'INPUT.
Copié !
1title '1.3.3c Delimited List Input Modifiers';
2/* ... */
3DATA base;
4LENGTH lname birthloc $15;
5INFILE DATALINES dlm=',' dsd;
6INPUT fname $ lname $ birthloc $ dob :mmddyy10. ;
7DATALINES;
8/* Données ... */
9RUN;
4 Bloc de code
DATA STEP Data
Explication :
Définition de plusieurs délimiteurs possibles pour un même fichier. Ici `dlm='/,'` indique que la barre oblique OU la virgule peuvent servir de séparateur.
Copié !
1title '1.3.3d Read delimited code with multiple delimiters';
2DATA imports;
3INFILE CARDS dlm='/,';
4INPUT id importcode $ value;
5CARDS;
614,1,13
725/Q9,15
86,D/20
9RUN;
5 Bloc de code
DATA STEP Data
Explication :
Utilisation d'une variable (`dlmvar`) pour passer les délimiteurs à l'option `dlm=` de l'instruction INFILE, offrant plus de flexibilité (ex: paramétrage dynamique).
Copié !
1title '1.3.3e Read delimited code with multiple delimiters';
2title2 'Using a variable to specify the delimiter';
3DATA imports;
4retain dlmvar '/,';
5INFILE CARDS dlm=dlmvar;
6INPUT id importcode $ value;
7CARDS;
8/* Données */
9RUN;
6 Bloc de code
DATA STEP Data
Explication :
Technique avancée : lecture du premier caractère de la ligne (`input dlmvar $1. @`) pour déterminer quel est le délimiteur spécifique à cette ligne, puis re-lecture de la ligne (`infile cards dlm=dlmvar`) avec ce délimiteur. (Note: Le code source original contenait un artefact '@code_sas_json...' qui a été nettoyé ici).
Copié !
1title '1.3.3f Read delimited code with multiple delimiters';
2title2 'Reading the delimiter during execution';
3DATA imports;
4INFILE CARDS;
5INPUT dlmvar $1. @;
6INFILE CARDS dlm=dlmvar;
7INPUT id importcode $ value;
8CARDS;
9,14,1,13
10/25/Q9/15
11~6~D~20
12RUN;
7 Bloc de code
DATA STEP Data
Explication :
Utilisation de l'option `DLMSTR` (Delimiter String) disponible dans les versions récentes de SAS, permettant de définir une chaîne de caractères complète (ici ',,/') comme séparateur unique, et non une liste de caractères individuels.
Copié !
1title '1.3.3g Use a delimiter string';
2DATA imports;
3INFILE CARDS dlmstr=',,/';
4INPUT id importcode $ value;
5CARDS;
614,,/1/,,/13
7/* ... */
8RUN;
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.