SAS Base  •  Module III  •  2 h
L'étape DATA : créer et lire des tables
M2 TIDE — Stage de programmation SAS — Enseignement 100 % distanciel
Objectifs du module
  • É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
Cette boucle implicite explique pourquoi une instruction comme total = total + montant ne fonctionne pas naïvement : à chaque nouvelle ligne, le vecteur de travail est réinitialisé. Nous verrons l'instruction RETAIN au module V pour contourner ce comportement.

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 ;
Le signe $ après un nom de variable dans l'instruction INPUT indique à SAS qu'il s'agit d'une variable caractère. Sans lui, SAS tente de lire du numérique et génère des valeurs manquantes accompagnées d'un message dans la LOG.

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)
MISSOVER et TRUNCOVER se ressemblent mais ne font pas la même chose : MISSOVER affecte une valeur manquante aux variables non trouvées, TRUNCOVER lit ce qui est disponible même partiellement. Pour un fichier CSV standard avec en-tête, la combinaison DSD + MISSOVER + FIRSTOBS=2 couvre la grande majorité des cas.

8. Exercices d'application

Exercice III.1 — À partir de la table SASHELP.CLASS, créer une nouvelle table WORK.CLASS.
Voir le corrigé
data work.class ;
    set sashelp.class ;
run ;
Exercice III.2 — Créer la table TIDE2026 dans la librairie WORK en saisissant les données directement dans le programme. Elle contiendra les variables caractères NOM et MASTER1, et la variable numérique AGE, pour vous et deux de vos camarades.
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.
Exercice III.3 — Importer les données du fichier fixe.txt en délimitant chaque variable par sa position (reportez-vous à la description dans fixe-short-desc.txt).
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.
Exercice III.4 — Reprendre l'exercice précédent en utilisant le pointeur @.
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.
Exercice III.5 — Importer les données du fichier nLigneUneObs.txt en utilisant les pointeurs @, +n et /.
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.
Exercice III.6 — Importer le fichier temperatures.csv, délimité par des points-virgules, dans une étape DATA.
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.
Point de contrôle — à faire avant de continuer
Reprenez l'exercice III.6 et retirez l'option DSD. Comparez le nombre d'observations obtenu et regardez la LOG. Vous devez être capable d'expliquer la différence avant de passer au module IV.
Pour valider ce module
  • QCM — QCM Module III — 5 questions, auto-évaluation
Modifié le: jeudi 10 septembre 2026, 12:08
Accessibilité

Couleur de fond Couleur de fond

Police Police

Crénage de la police Crénage de la police

Visibilité de l’image Visibilité de l’image

Hauteur de ligne Hauteur de ligne

1.2

Surbrillance de lien Surbrillance de lien

Alignement du texte Alignement du texte

Taille de police Taille de police

1

Espacement des lettres Espacement des lettres

0

Couleur de texte Couleur de texte

Largeur de paragraphe Largeur de paragraphe

0