SAS Base  •  Module II  •  2 h
Variables, formats et informats
M2 TIDE — Stage de programmation SAS — Enseignement 100 % distanciel
Objectifs du module
  • Énumérer les attributs obligatoires et facultatifs d'une variable SAS
  • Distinguer un format (masque d'affichage) d'un informat (masque de lecture)
  • Lire et écrire les formats numériques et caractères standards
  • Manipuler les dates SAS et leurs formats spécifiques

1. Définition d'une variable

Une variable SAS est obligatoirement définie par trois attributs :

Attribut Précisions
Un nom SAS 32 caractères au maximum
Un type Caractère ou numérique — il n'y en a que deux
Une longueur de stockage Numérique : de 3 à 8 octets. Caractère : de 1 à 32 767 octets

Elle possède également des caractéristiques optionnelles.

Un format définit le masque d'affichage des données.

Un informat définit le masque de saisie ou de lecture des données.

Un label est un intitulé long associé à la variable, 256 caractères maximum.

Trois propriétés à mémoriser :

Propriété Conséquence
Une variable numérique est toujours stockée sur 8 octets Quelle que soit la valeur : 1 ou 3,14159 occupent la même place
Une date SAS est une variable numérique Elle vaut le nombre de jours écoulés depuis le 1er janvier 1960
Une variable caractère peut contenir lettres, chiffres et caractères spéciaux Longueur maximale 32 767 octets
Le fait qu'il n'existe que deux types explique beaucoup de comportements de SAS. Une date n'est pas un type : c'est un nombre auquel on a collé un format. Un code postal stocké en numérique perdra son zéro initial. Un identifiant à 20 chiffres stocké en numérique perdra de la précision.

2. Les formats

Un format est une instruction que le système SAS utilise pour écrire la valeur des données. Appliquer un format ne modifie jamais la valeur stockée dans la table : c'est un masque, pas une transformation.

La notation générale utilise deux paramètres.

La lettre w désigne un entier positif qui représente toujours le nombre total de caractères de la donnée formatée.

La lettre d désigne le nombre de décimales.

Type Notation Exemple Rendu
Chaîne de caractères $w. avec w de 1 à 200 $7. abcdefg — aligné à gauche en lecture
Numérique w.d avec w de 1 à 32 et d de 1 à 31 8.2 12345.67
Nombre à virgule COMMAw.d COMMA9.2 12,234.21
Montant en dollars DOLLARw.d DOLLAR10.2 $12,234.21
Si le format précisé ne contient pas la largeur suffisante pour lire la valeur, elle sera affichée mais automatiquement tronquée. C'est une source classique de résultats faux qui ne déclenchent aucune erreur dans la LOG.

3. Le cas particulier des formats de date

Les valeurs de date sont stockées comme des variables numériques spéciales.

La valeur d'une date SAS est le nombre de jours entre le 1er janvier 1960 et la date indiquée.

De la même manière, une valeur datetime est le nombre de secondes écoulées depuis le 1er janvier 1960.

Pour faciliter la lecture, il est vivement conseillé d'appliquer des formats de date prédéfinis :

Format Description Exemple
DATEw. Jour, mois (3 premières lettres en anglais), année. En écriture w de 5 à 9 : si w < 7 l'année ne figure pas, si w ≥ 9 le siècle figure 1er avril 1990 en DATE7. donne 01APR90
DDMMYYw. Identique, mois en deux chiffres 14 juillet 2012 en DDMMYY5. donne 14/07/12
YYMMDDw. Positions du jour et de l'année échangées 14 juillet 2012 en YYMMDD8. donne 12-07-14
MONYYw. Format DATEw. restreint au mois et à l'année JUL2012
YYQxw. Année et trimestre, x étant la première lettre du séparateur (Colon, Dash, Period, Slash) 3e trimestre 2001 en YYQC4. donne 01:3
En lecture, si le siècle est absent il est mis à 1900. Des blancs ou des caractères spéciaux peuvent séparer les différents éléments de la date.

4. Les informats

Un informat permet de lire des données brutes et de les stocker dans des tables SAS.

Là où le format répond à la question « comment afficher cette valeur ? », l'informat répond à « comment interpréter les caractères que je suis en train de lire ? ».

Un informat définit la largeur du champ d'entrée et la façon de lire les valeurs de données emmagasinées dans ce champ. Nous les manipulerons concrètement au module III avec l'instruction INPUT, dans une étape DATA qui lit un fichier externe.

La notation générale ressemble à celle des formats, avec les mêmes lettres w et d :

Type Notation Exemple Effet en lecture
Chaîne de caractères $w. avec w de 1 à 200 $15. Lit les 15 premiers caractères du champ comme du texte
Numérique standard w.d avec w de 1 à 32 et d de 0 à 31 8.2 Lit 8 caractères et place le point décimal 2 positions avant la fin s'il n'est pas déjà présent dans le texte lu
Date au format jour/mois/année DDMMYYw. DDMMYY10. Lit une date écrite 14/07/2012 et la stocke comme le nombre de jours depuis 1960
Date au format année-mois-jour YYMMDDw. YYMMDD10. Lit une date écrite 2012-07-14
Nombre avec séparateurs de milliers COMMAw.d COMMA9.2 Lit un nombre écrit avec des virgules ou espaces de séparation, comme 12,234.21

Un informat de date ne produit pas un texte affichable : il produit la valeur numérique interne (le nombre de jours depuis 1960). C'est ensuite un format, appliqué séparément, qui permettra de l'afficher lisiblement.

/* Lecture d'une date ecrite 14/07/2012 dans un fichier texte */
informat date_vente DDMMYY10. ;
format   date_vente DATE9. ;

Dans cet exemple, l'informat sert à interpréter la chaîne lue et le format à réafficher la même valeur sous une autre forme (14JUL2012).

Vous pouvez tester un informat sans même lire de fichier, grâce à la fonction INPUT, qui applique un informat à une chaîne de caractères directement dans une étape DATA :
data _null_ ;
    date_sas = input("14/07/2012", ddmmyy10.) ;
    put date_sas date9. ;
run ;

/* La LOG affiche : 14JUL2012 */

5. Récapitulatif : format ou informat ?

Les deux notions se ressemblent et se confondent facilement en début d'apprentissage. Le tableau suivant résume la distinction à retenir avant de passer au module III.

  Format Informat
Rôle Écrire / afficher une valeur déjà stockée Lire une donnée brute et la stocker
Répond à la question Comment afficher cette valeur ? Comment interpréter ce que je lis ?
S'utilise avec PUT, ou en propriété d'affichage d'une variable INPUT, ou en propriété de lecture d'une variable
Modifie-t-il la valeur stockée ? Non, jamais Oui : il détermine la valeur stockée au moment de la lecture
Une même famille de mots-clés (DATEw., DDMMYYw., YYMMDDw. ...) peut servir de format ou d'informat : c'est le contexte — instruction FORMAT ou instruction INFORMAT, fonction PUT ou fonction INPUT — qui détermine son rôle.

6. Exercices d'application

Exercice II.1 — Ouvrir la table SASHELP.RETAIL et visualiser les différents formats existants sur ses variables.
Voir le corrigé
proc contents data = sashelp.retail ;
run ;

Dans la sortie, la colonne Format liste, pour chaque variable, le format qui lui est appliqué (par exemple DATE9. pour une variable de date).
Exercice II.2 — Calculer la valeur numérique correspondant au 14/02/1984. Vérifier votre réponse dans SAS.
Voir le corrigé
data _null_ ;
    d = mdy(2, 14, 1984) ;
    put d= ;
run ;

La LOG affiche d=8810 : le 14 février 1984 correspond à 8810 jours après le 1er janvier 1960.
Exercice II.3 — Appliquer successivement les formats DATE7., DATE9., DDMMYY10. et MONYY7. à une même variable date et observer les rendus.
Voir le corrigé
data _null_ ;
    d = mdy(7, 14, 2012) ;
    put d date7. ;
    put d date9. ;
    put d ddmmyy10. ;
    put d monyy7. ;
run ;

La LOG affiche successivement 14JUL12, 14JUL2012, 14/07/2012 puis JUL2012 : c'est exactement la même valeur numérique stockée (19188), seul l'affichage change d'un PUT à l'autre.
Exercice II.4 — Créer une variable numérique valant 1234567,891 et l'afficher avec les formats 8.2, COMMA12.2 et DOLLAR14.2. Que se passe-t-il avec le format 6.2 ?
Voir le corrigé
data _null_ ;
    x = 1234567.891 ;
    put x 8.2 ;
    put x comma12.2 ;
    put x dollar14.2 ;
    put x 6.2 ;
run ;

Avec 8.2, la valeur s'affiche tronquée : 8 caractères ne suffisent pas pour écrire 1234567.89 (10 caractères, point compris). Avec 6.2 la troncature est encore plus sévère. C'est l'illustration directe de la remarque de la section 2 : SAS n'émet aucune erreur dans la LOG, il affiche simplement ce qu'il peut dans la largeur impartie.
Exercice II.5 — Sans lire aucun fichier, utiliser la fonction INPUT pour convertir la chaîne de caractères "14/07/2012" en date SAS grâce à l'informat DDMMYY10., puis afficher le résultat avec le format DATE9..
Voir le corrigé
data _null_ ;
    date_sas = input("14/07/2012", ddmmyy10.) ;
    put date_sas date9. ;
run ;

La LOG affiche 14JUL2012. L'informat DDMMYY10. a servi à interpréter la chaîne lue par INPUT ; le format DATE9. a ensuite servi à afficher cette même valeur numérique sous une forme lisible. C'est la même mécanique que vous emploierez au module III, mais appliquée cette fois à un fichier entier plutôt qu'à une seule chaîne.
Point de contrôle — à faire avant de continuer
Pouvez-vous expliquer en une phrase pourquoi appliquer le format DATE9. à une variable ne change rien au contenu réel de la table ? Si la réponse ne vient pas immédiatement, relisez la section 2.
Pour valider ce module
  • QCM — QCM Module II — 5 questions, auto-évaluation
Last modified: Tuesday, 11 August 2026, 2:12 PM
Accessibility

Background Colour Background Colour

Font Face Font Face

Font Kerning Font Kerning

Image Visibility Image Visibility

Line Height Line Height

1.2

Link Highlight Link Highlight

Text Alignment Text Alignment

Font Size Font Size

1

Letter Spacing Letter Spacing

0

Text Colour Text Colour

Paragraph Width Paragraph Width

0