📖 Cours Module III - L'étape Data
- Écrire une étape DATA syntaxiquement correcte et comprendre son exécution ligne par ligne
- Créer une table à partir d'une table existante avec SET
- Saisir des données manuellement avec CARDS
- Lire un fichier externe avec INFILE et INPUT dans les trois modes de lecture
1. Présentation de l'étape DATA
L'objectif de l'étape DATA est de créer, manipuler et gérer des données à partir de tables SAS existantes, mais aussi à partir de fichiers externes : fichiers Excel, fichiers texte, données issues d'un SGBD.
Concrètement, une étape DATA est une suite d'instructions encadrées par deux mots-clés : DATA et RUN.
data MALIB.MATABLE ;
<instructions> ;
run ;
Ce programme crée une table nommée MATABLE stockée dans la bibliothèque MALIB. Si aucune bibliothèque n'est spécifiée, la table est stockée dans WORK.
2. À partir d'une table existante : l'instruction SET
Dans une étape DATA, l'instruction SET permet de lire une ou plusieurs tables SAS.
data TABLE_CREEE ;
set TABLE_LUE ;
run ;
La table destination et la table source peuvent être identiques. Dans ce cas, l'ancienne table est écrasée par la nouvelle.
Le fonctionnement d'une étape DATA s'effectue ligne par ligne, par le biais d'un vecteur de travail. C'est le point conceptuel le plus important du module :
| Instruction | Ce que fait SAS |
|---|---|
| data A ; | Une table A est créée |
| set B ; | La première ligne de la table B est placée dans le vecteur de travail |
| ; | Les instructions sont effectuées ligne par ligne |
| run ; | Marque la fin du programme et son exécution |
3. À partir d'une saisie manuelle : l'instruction CARDS
Il est également possible de créer une table en saisissant les données directement dans le programme. Les données doivent alors suivre immédiatement l'instruction INPUT, être précédées du mot-clé CARDS, et être suivies d'un point-virgule placé en début de ligne.
data MALIB.MATABLE ;
input <liste des variables> ;
cards ;
<saisie des donnees>
;
run ;
Exemple complet :
data work.tide2026 ;
input NOM $ MASTER1 $ AGE ;
cards ;
Dupont Econometrie 23
Martin MIAGE 24
Bernard Statistique 22
;
run ;
4. À partir d'un fichier externe : INFILE et INPUT
L'instruction INFILE définit le fichier qui va être lu ; l'instruction INPUT définit les variables qui vont être lues.
data librairie.table ;
infile "chemin/fichier" <options> ;
input <variables> ;
run ;
Il existe trois modes de lecture.
5. Le mode fixe
Le mode fixe permet la lecture de données par colonnes : chaque variable est définie par une position de début et une position de fin. Cette méthode est adéquate pour lire des données à l'intérieur de colonnes fixes, de type caractère ou numérique standard.
input var1 <$> i-j var2 <$> m-n ... varx <$> y-z ;
data work.fixe ;
infile "/chemin/fixe.txt" ;
input NOM $ 1-15 AGE 16-18 VILLE $ 19-35 ;
run ;
6. Le mode formaté
Le mode formaté contrôle la lecture par des pointeurs et des informats.
input <controle-du-pointeur> variable informat. ... ;
Les pointeurs disponibles :
| Pointeur | Effet |
|---|---|
| #n | Se positionner sur la ligne n |
| @n | Se positionner sur la colonne n |
| +n | Déplacer le pointeur de n colonnes |
| @ | Conserver les informations lues en mémoire durant une itération de l'étape DATA |
| @@ | Conserver les informations lues en mémoire durant des itérations différentes de l'étape DATA |
| / | Lire plusieurs lignes pour constituer une observation |
data work.formate ;
infile "/chemin/nLigneUneObs.txt" ;
input @1 NOM $10. @12 AGE 3.
/ @1 VILLE $20. +2 CP 5. ;
run ;
7. Le mode délimité
Ce mode peut être utilisé via l'instruction INFILE, ou avec la PROC IMPORT que nous verrons au module VI.
data librairie.table ;
infile "fichier" DELIMITER = ';' MISSOVER DSD ;
input var1 <$> ... varn <$> ;
run ;
Trois options très utilisées :
| Option | Effet |
|---|---|
| DELIMITER = " " | Indique le caractère séparateur. Pour une tabulation : delimiter='09'x |
| MISSOVER | Permet de lire des enregistrements avec des données manquantes en fin de ligne |
| DSD | Deux séparateurs consécutifs sont interprétés comme une donnée manquante, sans que SAS aille chercher l'enregistrement suivant pour compléter |
Autres options utiles de l'instruction INFILE :
| Option | Effet |
|---|---|
| FIRSTOBS=num | Numéro de la première ligne lue — pratique pour sauter une ligne d'en-tête |
| OBS=num | Numéro de la dernière ligne lue |
| TRUNCOVER | Lire jusqu'à la fin de l'enregistrement ou jusqu'à la dernière colonne spécifiée, lorsque certains enregistrements sont plus courts que d'autres |
| LRECL=nb | Nombre maximum de caractères par ligne (32 767 par défaut) |
8. Exercices d'application
Voir le corrigé
data work.class ;
set sashelp.class ;
run ;
Voir le corrigé
data work.tide2026 ;
input NOM $ MASTER1 $ AGE ;
cards ;
Dupont Econometrie 23
Martin MIAGE 24
Bernard Statistique 22
;
run ;
Remplacez les trois lignes de données par votre propre nom et ceux de deux camarades.
Voir le corrigé
data work.fixe ;
infile "/chemin/fixe.txt" ;
input Flight $ 1-3
Date MMDDYY8.
Dest $ 12-14
FirstClass $ 15-17
Economy $ 18-20;
run ;
Les positions exactes sont à adapter à celles indiquées dans fixe-short-desc.txt.
Voir le corrigé
data work.fixe ;
infile "/chemin/fixe.txt" ;
input INPUT
@1 Flight $3.
@4 Date MMDDYY8.
@12 Dest $3.
@15 FirstClass $3.
@18 Economy $3;
format Date MMDDYY8.;
run ;
Le résultat est rigoureusement identique à celui de l'exercice III.3 : seule la façon de désigner les colonnes change.
Voir le corrigé
data work.formate ;
infile "/chemin/nLigneUneObs.txt";
input
id $ 1-3
code $ 4
nom $ 5-12
ville $ 13-24
date_naiss $ 25-32
/ /* Passe à la 2ème ligne */
age 1-2
+1 /* Saute 1 espace */
telephone $ 4-17;
run ;
Le / provoque le passage à la ligne suivante du fichier pour continuer à construire la même observation ; +2 saute deux colonnes avant de lire CP.
Voir le corrigé
data work.temperatures ;
infile "/chemin/temperatures.csv" dlm=';' dsd missover firstobs=2 ;
input year month precipitation temperature ;
run ;
FIRSTOBS=2 saute la ligne d'en-tête ; DSD et MISSOVER sécurisent la lecture si une valeur est absente en fin de ligne.
- QCM — QCM Module III — 5 questions, auto-évaluation
Background Colour
Font Face
Font Kerning
Image Visibility
Line Height
Link Highlight
Text Alignment
Font Size
Letter Spacing
Text Colour
Paragraph Width