SAS Base  •  Module VIIbis  •  Ressource
Bonnes pratiques de programmation
M2 TIDE — Stage de programmation SAS — Enseignement 100 % distanciel
Objectifs du module
  • Adopter les réflexes qui rendent un programme SAS lisible, robuste et rapide à corriger
  • Reconnaître les messages d'erreur les plus fréquents dans la LOG et savoir les corriger

1. Les bonnes pratiques de programmation

Cette page rassemble des réflexes de programmation à prendre le plus tôt possible : ils ne sont pas propres à un module en particulier, mais utiles depuis le module III et jusqu'au dernier programme que vous écrirez ce semestre.

Le cartouche d'en-tête. Un bloc de commentaires au début du programme permet aux autres utilisateurs de reprendre rapidement le travail et identifie l'objectif et les paramètres. Y figurent le nom du programme, l'auteur, la date de création, les dates et sujets des modifications, la description, et les macros ou programmes appelés.

La taille des variables. Ajuster leur longueur économise l'espace disque et améliore les performances. Pour une variable caractère, chaque lettre occupe un octet, et la longueur doit toujours au moins correspondre à la valeur la plus longue attendue. LENGTH et ATTRIB sont à positionner avant la lecture de la table.

data WORK.EXEMPLE ;
    attrib NOM length = $24  label = "Nom des societaires" ;
    length AGE 3 ;
    set DONNEES.PERSONNE ;
run ;

Modifier les caractéristiques d'une variable. Pour changer la longueur ou le libellé d'une variable sur une table de deux millions d'observations, une étape DATA relit tout le contenu. La PROC DATASETS modifie la structure sans parcourir les données.

La gestion des variables. Ne garder que les variables nécessaires, et le faire à la lecture :

/* A eviter */
data DONNEES.Personne2 ;
    set DONNEES.Personne ;
    keep NOM PRENOM TELEPHONE ;
run ;

/* A faire */
data DONNEES.Personne2 (keep = NOM PRENOM TELEPHONE) ;
    set DONNEES.Personne (drop = CODEPOSTAL VILLE) ;
run ;

La gestion des tests conditionnels. Enchaîner des IF indépendants oblige SAS à tous les évaluer ; ELSE IF s'arrête au premier vrai.

/* A eviter */
if NOM = "Dupond" then ... ;
if NOM = "Dupont" then ... ;

/* A faire */
if NOM = "Dupond" then ... ;
else if NOM = "Dupont" then ... ;

La gestion des étapes DATA. Toutes les étapes DATA ne nécessitent pas la création d'une table. Lorsque le seul but est de produire un effet de bord — créer une macro-variable, écrire dans la LOG — l'instruction _NULL_ évite des écritures inutiles.

data _null_ ;
    set DONNEES.PERSONNE ;
    if NOM = "Dupond" then call symput("Prenom", PRENOM) ;
run ;

Le suivi des ressources. L'option FULLSTIMER affiche le temps réel, le temps CPU utilisateur et système, et la mémoire utilisée en kilo-octets.

2. Les erreurs les plus fréquentes dans la LOG

La LOG est votre premier outil de diagnostic. Le tableau suivant recense les messages les plus fréquemment rencontrés, dans SAS Base comme en macro-langage.

Message Signification
Expecting a ; Il manque un point-virgule à cet endroit
Syntax error, expecting one of the following... Il manque un point-virgule ou une parenthèse, ou les options ne sont pas utilisées à bon escient
No matching DO/SELECT statement Un END; a été placé sans DO; ou SELECT; correspondant
There was 1 unclosed DO block Le END; a été oublié
The variable m in the DROP, KEEP, or RENAME list has never been referenced Faute de frappe, variable inexistante, ou renommée plus haut dans l'étape DATA
Libname malib is not assigned La librairie n'existe pas
Variable o is uninitialized / Missing values were generated... Une variable sans valeur affectée est utilisée — souvent la lettre o au lieu du chiffre 0
You cannot open WORK.X for output access... in use by you La table est ouverte dans une fenêtre ViewTable ; fermez-la
Statement is not valid or it is used out of proper order Instruction inexistante, mal orthographiée, inappropriée au contexte, ou point-virgule manquant avant
Data set was not specified on the DATA statement Le mot suivant OUTPUT ne correspond à aucune table créée dans l'étape DATA
Undeclared array referenced: x La notation x(i) a été utilisée hors du cas d'un tableau ARRAY
User does not have appropriate authorization level for file... Droits d'accès insuffisants sur le répertoire de la librairie
Réflexe à acquérir dès maintenant : quand la LOG affiche plusieurs erreurs, ne traitez que la première et relancez. Les suivantes sont presque toujours des conséquences en cascade.
Point de contrôle — à faire avant de continuer
Reprenez l'un de vos programmes des modules III à VII et ajoutez-lui un cartouche, remplacez les KEEP en écriture par des KEEP en lecture, et remplacez toute série de IF indépendants par des ELSE IF. Ce programme propre vous servira de base au module IX.
Modifié le: mardi 11 août 2026, 14:17
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