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é !
title '1.3.3a Delimited List Input Modifiers';
data base;
length lname $15;
infile datalines dlm=',' dsd;
input fname $ lname $ dob :mmddyy10.;
datalines;
'Sam','Johnson',12/15/1945
'Susan','Mc Callister',10/10/1983
run;
1
title '1.3.3a Delimited List Input Modifiers';
2
DATA base;
3
LENGTH lname $15;
4
INFILEDATALINES dlm=',' dsd;
5
INPUT fname $ lname $ dob :mmddyy10.;
6
DATALINES;
7
'Sam','Johnson',12/15/1945
8
'Susan','Mc Callister',10/10/1983
9
RUN;
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é !
title2 'Using the ~ Format Modifier';
data base;
length lname $15;
infile datalines dlm=',' dsd;
input fname $ lname $ birthloc $~15. dob :mmddyy10. ;
datalines;
'Sam','Johnson', 'Fresno, CA','12/15/1945'
'Susan','Mc Callister','Seattle, WA',10/10/1983
run;
1
title2 'Using the ~ Format Modifier';
2
DATA base;
3
LENGTH lname $15;
4
INFILEDATALINES dlm=',' dsd;
5
INPUT fname $ lname $ birthloc $~15. dob :mmddyy10. ;
6
DATALINES;
7
'Sam','Johnson', 'Fresno, CA','12/15/1945'
8
'Susan','Mc Callister','Seattle, WA',10/10/1983
9
RUN;
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é !
title '1.3.3c Delimited List Input Modifiers';
/* ... */
data base;
length lname birthloc $15;
infile datalines dlm=',' dsd;
input fname $ lname $ birthloc $ dob :mmddyy10. ;
datalines;
/* Données ... */
run;
1
title '1.3.3c Delimited List Input Modifiers';
2
/* ... */
3
DATA base;
4
LENGTH lname birthloc $15;
5
INFILEDATALINES dlm=',' dsd;
6
INPUT fname $ lname $ birthloc $ dob :mmddyy10. ;
7
DATALINES;
8
/* Données ... */
9
RUN;
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é !
title '1.3.3d Read delimited code with multiple delimiters';
data imports;
infile cards dlm='/,';
input id importcode $ value;
cards;
14,1,13
25/Q9,15
6,D/20
run;
1
title '1.3.3d Read delimited code with multiple delimiters';
2
DATA imports;
3
INFILECARDS dlm='/,';
4
INPUT id importcode $ value;
5
CARDS;
6
14,1,13
7
25/Q9,15
8
6,D/20
9
RUN;
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é !
title '1.3.3e Read delimited code with multiple delimiters';
title2 'Using a variable to specify the delimiter';
data imports;
retain dlmvar '/,';
infile cards dlm=dlmvar;
input id importcode $ value;
cards;
/* Données */
run;
1
title '1.3.3e Read delimited code with multiple delimiters';
2
title2 'Using a variable to specify the delimiter';
3
DATA imports;
4
retain dlmvar '/,';
5
INFILECARDS dlm=dlmvar;
6
INPUT id importcode $ value;
7
CARDS;
8
/* Données */
9
RUN;
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é !
title '1.3.3f Read delimited code with multiple delimiters';
title2 'Reading the delimiter during execution';
data imports;
infile cards;
input dlmvar $1. @;
infile cards dlm=dlmvar;
input id importcode $ value;
cards;
,14,1,13
/25/Q9/15
~6~D~20
run;
1
title '1.3.3f Read delimited code with multiple delimiters';
2
title2 'Reading the delimiter during execution';
3
DATA imports;
4
INFILECARDS;
5
INPUT dlmvar $1. @;
6
INFILECARDS dlm=dlmvar;
7
INPUT id importcode $ value;
8
CARDS;
9
,14,1,13
10
/25/Q9/15
11
~6~D~20
12
RUN;
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é !
title '1.3.3g Use a delimiter string';
data imports;
infile cards dlmstr=',,/';
input id importcode $ value;
cards;
14,,/1/,,/13
/* ... */
run;
1
title '1.3.3g Use a delimiter string';
2
DATA imports;
3
INFILECARDS dlmstr=',,/';
4
INPUT id importcode $ value;
5
CARDS;
6
14,,/1/,,/13
7
/* ... */
8
RUN;
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.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.