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.
Last modified: Tuesday, 11 August 2026, 2:17 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