Professional Documents
Culture Documents
INITIATION A SAS
__________________
Cyrille Hagneré
Novembre 2004
Initiation à SAS (C. Hagneré) 2
──────────────────────────────────────────────────────
1. INTRODUCTION.................................................................................................................. 3
2. PREMIERS PAS .................................................................................................................... 4
L’interface........................................................................................................................................... 4
Structure d’un programme .................................................................................................................. 5
Quelques éléments de syntaxe ............................................................................................................ 5
L’exécution d’un programme ............................................................................................................. 5
Les commentaires ............................................................................................................................... 5
Les opérateurs de base ........................................................................................................................ 6
Les fonctions de base .......................................................................................................................... 6
3. LES DONNEES ..................................................................................................................... 7
Les tables SAS .................................................................................................................................... 7
Les librairies ....................................................................................................................................... 7
Utilisation d’une base de données dans SAS ...................................................................................... 8
4. L’ETAPE DATA.................................................................................................................. 10
Création d’une table.......................................................................................................................... 10
Création d’une variable..................................................................................................................... 11
Suppression de variables................................................................................................................... 11
Suppression d’observations .............................................................................................................. 12
Les conditions : IF <condition> THEN <instruction A>; ELSE <instruction B>; ........................ 12
Les boucles : DO <variable> = <entier naturel> TO <entier naturel>; <instructions>; END; ... 13
Les labels .......................................................................................................................................... 13
Conversion d’une variable numérique en alphanumérique et vice versa.......................................... 14
Les vecteurs : ARRAY ..................................................................................................................... 14
Fusion de deux tables SAS ............................................................................................................... 16
L’instruction RETAIN : mise en mémoire, cumul ........................................................................... 17
5. LES PROCEDURES DE GESTION DES DONNEES ....................................................... 18
PROC CONTENTS : affichage des caractéristiques d’une table ..................................................... 18
PROC PRINT : affichage du contenu d’une table ............................................................................ 18
PROC SORT : tri d’une table ........................................................................................................... 18
PROC TRANSPOSE : transposition d’une table.............................................................................. 18
6. LES PROCEDURES DE STATISTIQUE DESCRIPTIVE ................................................ 19
PROC MEANS : statistiques descriptives sur une liste de variables................................................ 19
PROC CORR : corrélation entre différentes variables ..................................................................... 20
PROC FREQ : tableaux de fréquence à une ou plusieurs dimensions.............................................. 21
PROC UNIVARIATE : statistiques descriptives détaillées sur une variable ................................... 21
7. LES PROCEDURES GRAPHIQUES ................................................................................. 23
PROC GPLOT : NUAGES DE POINTS ET COURBES ................................................................ 23
PROC GCHART : HISTOGRAMME, CAMEMBERT................................................................... 24
PROC G3D : GRAPHIQUE EN 3D................................................................................................. 25
Initiation à SAS (C. Hagneré) 3
──────────────────────────────────────────────────────
1. INTRODUCTION
Les possibilités offertes par SAS sont colossales. Il serait donc illusoire de vouloir présenter
l’ensemble des capacités du logiciel de manière exhaustive. L’objectif de ce guide n’est même
pas de faire un tour d’horizon de ces capacités. En effet, SAS étant un logiciel modulaire, les
domaines d’application sont très variés et certaines procédures peuvent s’avérer très
spécifiques. L’objectif est de présenter les outils essentiels à une bonne utilisation de SAS.
Après avoir parcouru ce guide, l’utilisateur novice ne sera donc pas un expert ès SAS mais aura
les connaissances qui devraient lui permettre d’aborder un grand nombre de problèmes
empiriques.
Les outils présentés s’appuient sur des exemples simples, l’idée étant de se focaliser sur l’outil
et ses capacités plutôt que sur les résultats. SAS possède un grand nombre de procédures ;
seules quelques-unes sont abordées. En outre, chaque procédure présente un nombre important
d’options dont il est impossible de faire le tour dans ce guide. Il faut garder à l’esprit que les
procédures évoluent au fil des versions du logiciel, il est donc rare qu’un problème ne trouve
pas de réponse. Par conséquent, il ne faudra pas hésiter à consulter la documentation relative à
chacune des procédures.
Documentation
- Aide en ligne
- Documentation diverse, exemples … : cf. Internet.
- Manuel en français: Emmanuel DUGUET, « Introduction à SAS », Economica, 2004.
2. PREMIERS PAS
L’interface
- editor : fenêtre où l’on tape les instructions, i.e. les commandes qui vont permettre de
manipuler les données ou de les analyser.
- log : c’est une sorte de fenêtre de déboguage, i.e. c’est là que SAS fait savoir si les
instructions que l’on a tapées sont correctes ou erronées.
Æ en bleue : pas de problème.
Æ en vert : warning donc il y a peut-être quelque chose à vérifier dans le programme.
Æ en rouge : gros problème, il faut chercher l’erreur !
- results : table des matières des résultats qui sont affichés dans la fenêtre output.
- explorer : le principe est le même que l’explorateur de windows, il s’agit donc de naviguer
dans des répertoires pour y trouver des fichiers.
Répertoires dans SAS = LIBRAIRIES.
Fichiers dans SAS = surtout des tables de données (sur le disque, l’extension est
SAS7BDAT) et éventuellement des fichiers générés par SAS tels que des graphiques.
Les noms de table et de variable acceptent les 26 lettres de l’alphabet, les chiffres et le
caractère « _ », mais ne peuvent pas commencer par un chiffre.
SAS ne fait pas la distinction entre majuscules et minuscules. Il faut toutefois respecter les
minuscules et majuscules quand on fait référence à la valeur d’une variable alphanumérique.
Un programme est composé d’un ensemble d’instructions, qui sont elles-mêmes constituées
d’un ensemble d’éléments syntaxiques (if, then, else, and, or, do, end, …).
Le point-virgule met fin à toute instruction. C’est une habitude à prendre. Aller à la ligne ne
suffit pas. Dans SAS, aller à la ligne c’est comme mettre un espace. Il est donc indispensable
de séparer les instructions par un point-virgule.
L’exécution d’un programme s’effectue en appuyant sur la touche F8 (le curseur devant être
dans la fenêtre Editor). SAS n’exécute que les lignes sélectionnées. Si rien n’est sélectionné,
l’ensemble du programme est exécuté.
Un bloc d’instructions est exécuté dès lors qu’il est clos par l’instruction « RUN ; ».
Pour qu’une étape DATA ou PROC soit exécutée, il faut sélectionner le bloc complet (à partir
du DATA ou du PROC).
Les commentaires
Il peut être utile de commenter un programme. Les commentaires sont des morceaux de
programme qui ne sont pas exécutés par SAS. Ils apparaissent en vert à l’écran.
Un programme peut rapidement contenir des dizaines ou des centaines de lignes de code. Sans
description, on peut perdre un temps précieux à essayer de se remémorer ce que l’on a voulu
obtenir en tapant telle ou telle instruction.
/* Exemple de commentaire */
Plutôt utilisé dans le premier cas. Permet aussi de neutraliser un morceau d’instruction.
Exemple : KEEP /*PRENOM*/ IMC ;
Æ L’instruction KEEP n’est appliquée que sur la variable IMC.
* Exemple de commentaire ;
Plutôt utilisé dans le second cas. Permet de neutraliser une instruction.
Exemple : * KEEP PRENOM IMC ;
Æ SAS n’applique pas l’instruction KEEP.
3. LES DONNEES
Une base de données se présente comme un tableau. Pour SAS, on parlera de table.
variables
observations
En colonne, on a des variables. Par exemple, si les observations sont des individus, on pourra
avoir comme variables le sexe, l’âge, le niveau d’études, le salaire, etc… Les variables peuvent
être de type numérique ou alphanumérique.
Les tables constituent l’élément central de SAS ; c’est la matière première. Les instructions
SAS sont utilisées pour façonner cette matière ou pour en tirer des informations plus ou moins
synthétiques.
Les librairies
Pour accéder à une table de données SAS, on doit passer par une librairie, qui elle-même est
associée à un répertoire physique de windows. Ainsi, pour accéder à la table TEST stockée
dans le répertoire H:\SAS, on devra créer une librairie (que l’on appelle par exemple LIB)
associée au répertoire H:\SAS. On utilise pour cela l’instruction LIBNAME.
La librairie WORK
Quand on regarde la liste des librairies (cliquer 2 fois sur LIBRARIES dans explorer) avant
même d’en avoir créées, on peut remarquer qu’il existe une librairie WORK.
WORK est la librairie par défaut. Ainsi, si on omet de préciser un nom de librairie quand on
fait appel à une table, il est supposé que cette table se trouve dans WORK.
La librairie WORK est un peu particulière car elle est temporaire ; autrement dit, le répertoire
associé est créé à l’ouverture de SAS et supprimé à la fermeture. Par conséquent, toutes les
tables de données que l’on aura créées dans la librairie WORK seront détruites quand on
fermera SAS. On peut le vérifier de la manière suivante :
1) Cliquer à droite sur la librairie WORK ;
2) Cliquer sur properties ;
3) La zone de liste déroulante « General properties » contient le chemin d’accès du répertoire
associé à la librairie ; le nom du répertoire est du type « _TDxxxx » ;
4) Avec l’Explorateur Windows, accéder au répertoire _TDxxxx ;
5) Fermer SAS Æ le répertoire _TDxxxx.disparaît.
Supposons que l’on dispose d’une table « masse.sas7bdat » stockée dans le répertoire
H:\SAS. Alors, après avoir déclarer une librairie associée à ce répertoire (LIBNAME LIB
‘H:\SAS’), on peut par exemple créer une table nommée IMC à partir des données de la
table MASSE :
B - on dispose d’une base de données qui n’est pas au format SAS (texte, excel…)
Æ on utilise un logiciel de conversion (de type Stat Transfer) ou la procédure PROC
IMPORT (que l’on peut générer par le « wizard » du menu File/ImportData.
Supposons par exemple que l’on dispose d’un fichier texte « masse.txt » dans lequel les
colonnes (i.e. les variables) sont séparées par des tabulations.
Initiation à SAS (C. Hagneré) 9
──────────────────────────────────────────────────────
Les champs remplis dans le wizard permettent en réalité de définir les options de la procédure
PROC IMPORT. En effet, concrètement, le wizard « Import Data » exécute la procédure
PROC IMPORT. Le fichier imc.sas contient les instructions associées :
Autrement dit, exécuter cette procédure ou passer par le wizard revient exactement au même.
4. L’ETAPE DATA
Dans la librairie WORK, on crée une table SAS qui reprend les données contenues dans la
table MASSE appartenant à la librairie LIB.
DATA X ; SET Y Z ;
/* instructions éventuelles */
RUN ;
DATA IMC ;
LENGTH PRENOM $9 SEXE $1 ;
INPUT PRENOM $ SEXE $ TAILLE POIDS ;
CARDS ;
ALAIN H 180 82
ALBERT H 175 80
BRUNO H 181 75
CATHERINE F 158 48
CHARLES H 168 71
FRANCOISE F 173 64
ISABELLE F 162 52
JEAN H 178 78
LAURENT H 170 72
MARIE F 164 54
NATHALIE F 169 53
NICOLAS H 178 76
PHILIPPE H 177 74
PIERRE H 178 80
REJANE F 163 46
REMY H 174 75
SABINE F 162 53
SANDRINE F 178 65
STEPHANIE F 169 58
VALERIE F 171 62
;
RUN;
Initiation à SAS (C. Hagneré) 11
──────────────────────────────────────────────────────
Exemple : création d’une table de 1000 observations contenant une variable appelée NUMERO
prenant les valeurs 1,2,3,…,1000.
DATA TEST ;
DO NUMERO=1 TO 1000;
OUTPUT;
END;
RUN ;
Suppression de variables
ou
Initiation à SAS (C. Hagneré) 12
──────────────────────────────────────────────────────
Suppression d’observations
ou
Exemple : créer une variable SANTE qui prend la valeur « insuffisant » si IMC<20,
« normal » si 20≤IMC≤25, « excessif » si IMC>25.
On peut écrire des conditions multiples à l’aide des opérateurs AND et OR. Les
parenthèses peuvent être utilisées pour les conditions complexes.
Initiation à SAS (C. Hagneré) 13
──────────────────────────────────────────────────────
Exemple : générer 10000 valeurs issues d’un tirage dans une loi normale de moyenne 3
et d’écart type 5.
DATA NORMAL ;
DO I=1 TO 10000 ;
X=3 + 5*RANNOR(1) ;
OUTPUT ;
END ;
RUN ;
NB : - RANNOR(.) est une fonction qui tire aléatoirement dans une loi normale
centrée réduite. On peut aussi utiliser la fonction NORMAL(.).
- Le paramètre θ dans la fonction RANNOR(θ) est ce que l’on appelle la
semence du générateur. A priori, étant donné que les valeurs sont tirées
aléatoirement, il n’y a aucune chance pour que l’on puisse régénérer les 10000
mêmes valeurs. La semence est faite pour ça : tant que θ ne change pas,
l’échantillon tiré est toujours le même.
- Par défaut, à chaque itération, I est incrémenté d’une unité. On peut modifier la
valeur de cet incrément à l’aide de l’expression BY (ex : DO I=1 TO 2 BY 0.1).
DO WHILE <condition>
DATA NORMAL ;
I=1;
DO WHILE (I<=10000) ;
X=3 + 5*RANNOR(1) ;
I=I+1;
OUTPUT ;
END ;
RUN ;
DO UNTIL <condition>
DATA NORMAL ;
I=1;
DO UNTIL (I>10000) ;
X=3 + 5*RANNOR(1) ;
I=I+1;
OUTPUT ;
END ;
RUN ;
Les labels
Les noms de variable ne sont pas toujours très parlant. Il peut donc être utile de créer des labels
afin de décrire plus précisément les variables.
Initiation à SAS (C. Hagneré) 14
──────────────────────────────────────────────────────
NB : - les labels sont utilisés en priorité pour définir les entêtes de colonne lors de la
visualisation d’une table (après ouverture à partir de l’explorer). Si le label
n’existe pas, SAS utilise le nom de la variable. On peut toujours permuter entre
label et nom de colonne à l’aide du menu View | Column Labels / Column
Names.
- Les labels apparaissent également dans les résultats des procédures d’analyse
et sont utilisés en priorité pour les annotations des graphiques (titres des axes par
exemple).
numérique Æ alphanumérique
RUN ;
alphanumérique Æ numérique
RUN ;
Variables indicées
Exemple : on génère 10 séries X1, X2, …., X10 comprenant chacune 10000 valeurs issues
d’un tirage dans une loi normale centrée réduite.
DATA NORMALb ;
ARRAY X(10);
DO I=1 TO 10000 ;
DO J=1 TO 10;
X(J)= RANNOR(1) ;
END;
OUTPUT ;
END;
RUN;
Initiation à SAS (C. Hagneré) 15
──────────────────────────────────────────────────────
Liste de variables
Exemple : on arrondit à 1 chiffre après la virgule toutes les variables numériques contenues
dans la table NORMALb2 (générée précédemment).
1) On trie les 2 tables par ordre croissant (ou décroissant) des valeurs de la variable de fusion
(ie. la variable commune aux deux tables), ici la variable PRENOM.
Dans une étape DATA, SAS applique les instructions ligne par ligne de la première
observation de la table à la dernière. Les observations sont donc a priori indépendantes. Il
existe toutefois une instruction qui permet de mémoriser des informations au fil des
observations : l’instruction RETAIN.
Exemple : création d’une variable compteur, nommée NUMERO, attribuant un numéro d’ordre
en fonction du classement alphabétique du prénom.
PROC SORT DATA=IMC4; BY PRENOM; RUN; /* Tri par ordre alphabétique du prénom */
DATA IMC4b ; SET IMC4 ;
RETAIN NUMERO 0;
NUMERO +1;
RUN ;
On peut également créer un compteur par catégorie. Il faut dans ce cas trier au préalable la
table selon la variable de catégorie. Dans l’étape DATA, il faut alors réinitialiser le compteur à
chaque fois que l’on « passe » à une nouvelle catégorie. Pour ce faire, on utilise la commande
FIRST. Par exemple, prenons comme variable de catégorie la variable SEXE.
De manière analogue, il existe une commande LAST qui permet d’exécuter des instructions
lorsque l’on arrive à la dernière observation d’une catégorie. L’exemple suivant crée une table
de deux observations (une par sexe) qui indique le nombre de personnes de chaque sexe qui ont
un prénom composé de 6 lettres.
NB : Si « DATA=… » est omis, la procédure est appliquée sur la dernière table créée.
NB : - Dans cet exemple, seules les 10 premières observations sont affichées. Pour
afficher l’ensemble des observations, il suffit de supprimer l’option
« (OBS=10) ».
- Dans cet exemple, seules les variables PRENOM et IMC sont affichées. Pour
afficher l’ensemble des variables, il suffit de supprimer l’instruction VAR….
NB : - OUT=… est optionnel. S’il n’est pas précise, SAS remplace la table indiquée
dans DATA=….
- L’option DESCENDING signifie que le tri est effectué par ordre décroissant.
Par défaut, le tri se fait par ordre croissant.
NB : - NAME=XXX : XXX est le nom de la variable dans laquelle sont stockées les
noms de colonnes de la table IMC4. (par défaut _NAME_)
- LABEL=XXX : XXX est le nom de la variable dans laquelle sont stockées les
labels des colonnes de la table IMC4. (par défaut _LABEL_)
- l’instruction ID… signifie que les valeurs de la variable PRENOM sont
utilisées pour nommer les variables. (par défaut COL1, COL2, etc…).
Initiation à SAS (C. Hagneré) 19
──────────────────────────────────────────────────────
Par défaut, SAS affiche le nombre d’observations qui ont une valeur non manquante (N), la
moyenne de la variable (Mean), l’écart type (Std Dev), le minimum (Min) et le maximum
(Max). D’autres statistiques peuvent être sorties. Le tableau suivant reprend l’ensemble des
statistiques :
Par exemple, pour afficher la somme, la médiane, le 1er décile et l’intervalle de confiance à
90%, il faut écrire :
PROC MEANS DATA=IMC4 SUM MEDIAN P10 CLM ALPHA=0.9; VAR IMC ; RUN ;
Analyse pondérée
Par défaut, SAS considère que toutes les observations ont le même poids. Dans les données
d’enquête, il existe en général une variable de pondération qui permet de redresser
l’échantillon. Dons notre exemple, cette variable s’appelle PONDER :
Instruction BY
On peut souhaiter afficher les résultats en ventilant l’échantillon selon les valeurs d’une
certaine variable, par exemple selon les valeurs de la variable SEXE. Pour ce faire, il faut au
préalable trier les données par ordre croissant de cette variable, puis utiliser l’instruction BY…
L’instruction CLASS
Par défaut, les résultats de la procédure sont affichés dans la fenêtre output. On peut également
stocker les résultats dans une table SAS. Ceci peut permettre de récupérer les résultats pour les
utiliser dans d’autres étapes DATA et/ou PROC.
Pour stocker les résultats dans une table (par exemple la table FREQUENCE), on utilise
l’option OUT :
Graphique de la distribution
Quantiles
Les centiles définissent l’abscisse. L’ordonnée correspondant au nième centile est égal à
n/100. Les données sont pour l’instant en ligne. Pour pouvoir représenter la fonction, il
faut des données en colonne. On commence donc par transposer la table QUANTILES.
DATA F; SET F ;
RENAME COL1 = x;
Y = _N_/100;
RUN ;
Initiation à SAS (C. Hagneré) 23
──────────────────────────────────────────────────────
NB : Par défaut, SAS affiche un nuage de points. Pour obtenir une courbe il faut
redéfinir l’option symbol comme ci-dessous. La courbe est tracée selon l’ordre
des observations dans la table. Il pourra donc être nécessaire de trier la table
selon la variable d’abscisse.
SYMBOL I=JOIN;
L’exemple suivant permet de tracer 2 courbes sur un même graphique. Si l’option OVERLAY
est omise, SAS génère deux graphiques distincts.
Histogramme
SAS définit lui-même le nombre de classes et leur largeur mais il les possible de les
spécifier à l’aide de l’option MIDPOINTS, qui définit les centres de classe :
Les variables numériques sont traitées comme des variables continues. Pour que chaque
valeur de la variable étudiée soit traitée comme une classe, il suffit de spécifier l’option
DISCRETE.
Par défaut, le graphique représente le nombre d’observations dans chaque classe. Il est
possible de représenter la statistique (somme ou moyenne) d’une variable annexe
calculée pour chacune des classes. L’exemple suivant représente la moyenne du poids
par classe d’indice de masse corporel.
Par ailleurs, on peut subdiviser les barres de l’histogramme en fonction des valeurs
d’une variable discrète annexe. L’exemple suivant représente la distribution de la
variable IMC en attribuant une couleur différente aux hommes et aux femmes.
Camembert
NB : Pour définir l’apparence des parts d’un camembert (ou des barres d’un
histogramme), on utilise l’instruction PATTERN. L’exemple suivant
redéfinit les couleurs des trois premières parts (ou barres) utilisées.
PATTERN1 C=GREEN;
PATTERN2 C=BLUE;
PATTERN3 C=VIOLET;
Exemple : tracer la distribution d’une loi normale bivariée d’espérance (10,20), d’écart type
(2,3) et de corrélation 0.5.
/* Graphique */
PROC G3D;
PLOT X1*X2=F / GRID ROTATE=0 TO 90 BY 10;
RUN;