You are on page 1of 25

__________________

INITIATION A SAS

__________________

Cyrille Hagneré

Novembre 2004
Initiation à SAS (C. Hagneré) 2
──────────────────────────────────────────────────────

Table des matières

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

SAS (Statistical Analysis Software) est un logiciel multitâches pour le traitement de


données quantitatives et qualitatives. Il est notamment utilisé dans les cadres suivants :
- Gestion des bases de données (manipulation des données, création de données …) ;
- Statistiques descriptives ;
- Econométrie ;
- Analyse en Composantes Principales… ;
- Programmation (Æsimulations, programmation matricielle …).

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.

Note aux lecteurs de ce guide


- Les blocs d’instructions SAS sont précédés d’une barre verticale. Ils sont exécutables tels
quels dans SAS.
- Les éléments syntaxiques sont indiqués en gras (pour les isoler des noms de table, de
variables, des nombres…).
Initiation à SAS (C. Hagneré) 4
──────────────────────────────────────────────────────

2. PREMIERS PAS

L’interface

Cadre de droite Æ 3 fenêtres :

- 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 !

- output : fenêtre où SAS affiche les résultats.

NB : Le texte contenu dans ces 3 fenêtres peut être sauvegardé (File|SaveAs et


File|Save). Les fichiers ainsi sauvegardés sont de simples fichiers texte qui
peuvent être ouverts avec n’importe quel éditeur. Par défaut, les fichiers
d’édition (pour faire court, les programmes) ont l’extension « sas », les fichiers
log l’extension « log » et les fichiers « output » l’extension « lst ». Un
programme peut être réutilisé dans une autre session de SAS (File|Open).
Initiation à SAS (C. Hagneré) 5
──────────────────────────────────────────────────────

Cadre de gauche Æ 2 onglets :

- 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.

Structure d’un programme

Dans SAS, il existe deux grands ensembles d’instructions :


- les étapes DATA, qui permettent de manipuler les données (création de tables,
création/suppression de variables…)
- les étapes PROC (les procédures), qui permettent d’analyser les données (statistiques
descriptives, économétrie…). Il existe également quelques procédures pour la manipulation des
données (PROC SORT, PROC TRANSPOSE, PROC IMPORT…).

Quelques éléments de syntaxe

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

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.

1) Les commentaires facilitent la relecture du programme.


Initiation à SAS (C. Hagneré) 6
──────────────────────────────────────────────────────

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.

2) La mise en commentaire permet également de neutraliser des instructions.


Par exemple, si on veut relancer l’exécution d’une procédure en laissant de côté certaines
options, il suffit de mettre ces options sous forme de commentaire.

2 façons de mettre en commentaire

/* 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.

Les opérateurs de base

Comparaison : <,>,<=,>=,=, ^= (différent)


Appartenance : IN (<élément 1>,<élément 2>,…), NOT IN (<élément 1>,<élément 2>,…)
Concaténation : ||
Logique : and, or

Les fonctions de base

Logarithme népérien : LOG(<nombre>)


Exponentiel : EXP(<nombre>)
Puissance : **<nombre>
Racine carrée : SQRT(<nombre>)
Valeur absolue : ABS(<nombre>)
Partie entière : INT(<nombre>)
Arrondi : ROUND(<nombre>,<unités d’arrondi>)
Longueur d’une chaîne de caractères : LENGTH(<chaîne de caractères>)
Mise en majuscule : UPCASE(<chaîne de caractères>)
Mise en minuscule : LOWCASE(<chaîne de caractères>)
Extrait d’une chaîne de caractères :
SUBSTR(<chaîne de caractères>,<début de l’extraction>,<nombre de caractères>)
Initiation à SAS (C. Hagneré) 7
──────────────────────────────────────────────────────

3. LES DONNEES

Les tables SAS

Une base de données se présente comme un tableau. Pour SAS, on parlera de table.

variables

observations

En ligne, on a des enregistrements (terme informatique) ou observations (terme généralement


utilisé pour les données d’enquête, c'est-à-dire les données micro). Par exemple, des individus,
des ménages, des biens de consommation, des types de revenus…

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.

NB : Certaines variables ne contiennent que des nombres et sont pourtant codées en


format alphanumérique. Pour le bon fonctionnement de certaines procédures
(par exemple PROC MEANS), il pourra être nécessaire de les convertir en
numérique (cf. infra la fonction INPUT).

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.

LIBNAME LIB ‘H:\SAS’ ;

On accédera alors à la table TEST en écrivant « LIB.TEST ».


Initiation à SAS (C. Hagneré) 8
──────────────────────────────────────────────────────

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.

Utilisation d’une base de données dans SAS

A - on dispose d’une table SAS


Æ on accède alors directement à la table par le biais d’une librairie.

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 :

DATA IMC ; SET LIB.MASSE ; RUN ;

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
──────────────────────────────────────────────────────

On peut utiliser la procédure PROC IMPORT ou utiliser le « wizard » associé :

Menu File/Import Data :


Data source : tab delimited file (.txt)
Where is it located : H:\SAS\masse.txt
Destination : library = WORK, member = IMCimport
File containing PROC IMPORT : imc.sas

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 :

PROC IMPORT OUT= WORK.IMCimport


DATAFILE= "H:\SAS\masse.txt";
DBMS=TAB REPLACE;
GETNAMES=YES;
DATAROW=2;
RUN;

Autrement dit, exécuter cette procédure ou passer par le wizard revient exactement au même.

C - on ne dispose pas de fichier de données

C1 – saisie des données


Æ soit on les saisit dans un logiciel tiers (par exemple excel) et on se retrouve dans la
situation B ;
Æ soit on les saisit dans une étape DATA à l’aide de l’instruction CARDS (ou
DATALINES). Cf.section 4.

C2 – génération des données


Æ on peut générer des données dans une étape DATA à l’aide de boucles et de
l’instruction OUTPUT. Cf.section 4.
Initiation à SAS (C. Hagneré) 10
──────────────────────────────────────────────────────

4. L’ETAPE DATA

Création d’une table

A partir d’une table SAS

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 IMC ; SET LIB.MASSE ;


/* instructions éventuelles */
RUN ;

NB : - LIB.MASSE = table sas MASSE stockée dans la librairie LIB.


- IMC n’est précédé d’aucun nom de librairie, la table IMC est donc placée par
défaut dans la librairie WORK.
- si on écrit « DATA X ; SET X ; » alors X est remplacée par la nouvelle table.

A partir de plusieurs tables

DATA X ; SET Y Z ;
/* instructions éventuelles */
RUN ;

NB : si Y contient une variable que Z ne contient pas (ou inversement), alors X


contiendra des valeurs manquantes pour les observations provenant de Z (ou de
Y dans le cas inverse).

En saisissant les données

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
──────────────────────────────────────────────────────

NB: - CARDS peut être remplacé par l’instruction DATALINES.


- L’instruction LENGTH … définit la longueur des variables PRENOM et
SEXE. Par défaut, une variable alphanumérique contient au maximum 8
caractères. Dans notre exemple, la variable PRENOM peut contenir jusqu’à 9
caractères. Il est donc nécessaire de spécifier la longueur pour ne pas avoir une
variable tronquée.
- Les « $ » dans l’instruction INPUT signifient que SEXE et PRENOM sont des
variables alphanumériques.

En générant les données

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 ;

NB : - L’instruction DO…TO…END permet d’exécuter une boucle (cf. infra.).


- L’instruction OUTPUT permet de générer une observation dans la table. En
l’occurrence, dans cet exemple, on génère une observation à chaque itération de
la variable NUMERO.

Création d’une variable

Exemple : calcul de l’Indice de Masse Corporelle = poids (kg) / taille (m) ².

DATA IMC ; SET LIB.MASSE ;


IMC = ROUND ( POIDS / (TAILLE/100)**2, 0.1) ;
RUN ;

NB : - la fonction X**2 est la fonction puissance 2.


- la fonction ROUND(X,0.1) permet d’arrondir X à un chiffre après la virgule.

Création d’une indicatrice

DATA IMCa ; SET IMC ;


LOURD=(IMC>25) ; /* LOURD=1 si IMC>25, 0 sinon */
RUN ;

Suppression de variables

Exemple : on ne souhaite garder que les variables PRENOM et IMC.

DATA IMCb ; SET IMC ;


KEEP PRENOM IMC; /* variables à garder */
RUN ;

ou
Initiation à SAS (C. Hagneré) 12
──────────────────────────────────────────────────────

DATA IMCb ; SET IMC ;


DROP POIDS TAILLE; /* variables à supprimer */
RUN ;

NB : De manière analogue, on peut aussi écrire :

DATA IMCb (KEEP = PRENOM IMC); SET IMC ; RUN ;


ou
DATA IMCb (DROP = POIDS TAILLE); SET IMC ; RUN ;

Suppression d’observations

Exemple : on ne souhaite garder que les individus qui vérifient IMC≤24.

DATA IMCc ; SET IMC ;


IF IMC<=24; /* individus à garder */
RUN ;

ou

DATA IMCc ; SET IMC ;


IF IMC>24 THEN DELETE; /* individus à supprimer */
RUN ;

Les conditions : IF <condition> THEN <instruction A>; ELSE <instruction B>;

Exemple : créer une variable SANTE qui prend la valeur « insuffisant » si IMC<20,
« normal » si 20≤IMC≤25, « excessif » si IMC>25.

DATA IMC2 ; SET IMC ;


IF IMC<20 THEN SANTE = “INSUFFISANT”;
ELSE IF IMC<=25 THEN SANTE = “NORMAL”;
ELSE SANTE = “EXCESSIF”;
RUN ;

NB : si le résultat de la condition est un bloc d’instructions, on utilise alors la syntaxe


do ; <instruction 1> ; <instruction 2> ; … ;<instruction n> ; end ;

DATA IMC2 ; SET IMC ;


IF IMC<20 THEN DO;
SANTE = “INSUFFISANT”;
SOLUTION = “GROSSIR”;
END ;
ELSE IF IMC<=25 THEN SANTE = “NORMAL”;
ELSE DO ;
SANTE = “EXCESSIF”;
SOLUTION = “MAIGRIR”;
END;
RUN ;

Les opérateurs logiques

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
──────────────────────────────────────────────────────

Les boucles : DO <variable> = <entier naturel> TO <entier naturel>; <instructions>; END;

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).

Les exemples suivants utilisent les instructions DO WHILE et DO UNTIL pour un


résultat identique.

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
──────────────────────────────────────────────────────

DATA IMC3 ; SET IMC2 ;


LABEL TAILLE = "Taille de l’individu"
POIDS = "Poids de l’individu"
IMC = "Indice de masse corporel de l’individu" ;
RUN ;

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).

Conversion d’une variable numérique en alphanumérique et vice versa

numérique Æ alphanumérique

DATA IMCalpha ; SET IMC2 ;


TAILLEalpha = PUT(TAILLE,3.);
POIDSalpha = PUT(TAILLE,2.);

RUN ;

NB : le paramètre 3 (resp. 2) est la longueur de la variable TAILLE (resp. POIDS).

alphanumérique Æ numérique

DATA IMCnum ; SET IMC2alpha;


TAILLEnum = INPUT(TAILLEalpha,3.);
POIDSnum = INPUT(POIDSalpha,2.);

RUN ;

NB : Dans ce contexte, on peut remplacer les paramètres « 3 » et « 2 » par « BEST ».


SAS convertit alors dans le format le plus adéquat.

Les vecteurs : ARRAY

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 : A partir de la table NORMALb (générée précédemment), on transforme les valeurs


des variables X3 à X8 de telle sorte qu’elles soient issues d’un tirage dans une loi normale
d’espérance 3 et d’écart type 5.

DATA NORMALb2 ; SET NORMALb ;


ARRAY Y X3-X8;
DO OVER Y ;
Y=3+5*Y;
END;
RUN;

NB : - « ARRAY Y X3-X8 » signifie que l’on créé un vecteur de 6 éléments dont le


premier élément correspond à la variable X3, le second à la variable X4, … et le
sixième à la variable X8.
- L’instruction DO OVER <instructions> END permet d’appliquer les
<instructions> à chaque élément de Y, en l’occurrence ici, à X3, X4,…, X8. De
manière analogue, on aurait pu écrire :

DATA NORMALb2 ; SET NORMALb ;


ARRAY Y X3-X8;
DO I=1 TO 5 ;
Y(I)=3+5*Y(I);
END;
RUN;

Conversion d’une liste de variables alphanumériques en variables numériques


Æ cf. supra la table IMCalpha.

DATA IMCconvert ; SET IMCalpha ;


ARRAY VARAN TAILLEalpha POIDSalpha;
ARRAY VARN TAILLEnum POIDSnum;
DO I=1 TO 2 ;
VARN(I)=INPUT(VARAN(I),BEST.);
END;
RUN;

Liste des variables numériques / Liste des variables alphanumériques

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).

DATA NORMALb3 ; SET NORMALb2 ;


ARRAY NUM _NUMERIC_ ;
DO OVER NUM ;
NUM=ROUND(NUM,0.1);
END;
RUN;

NB : - Ici, toutes les variables de la table sont numériques, on aurait donc pu


remplacer _NUMERIC_ par _ALL_.
- De la même manière, on utilise l’option _CHARACTER_ pour sélectionner les
variables alphanumériques.
Initiation à SAS (C. Hagneré) 16
──────────────────────────────────────────────────────

- Quand on ne connaît pas la dimension d’un vecteur, on utilise la fonction DIM.


Par exemple, on aurait pu écrire :

DATA NORMALb3 ; SET NORMALb2 ;


ARRAY NUM _NUMERIC_ ;
DO I=1 TO DIM(NUM) ;
NUM(I)=ROUND(NUM(I),0.1);
END;
RUN;

Fusion de deux tables SAS

Exemple : on dispose d’une table PONDER associant une pondération à chaque


individu. On souhaite ajouter cette information à la table IMC3.
DATA PONDER ;
LENGTH PRENOM $9 ;
INPUT PRENOM $ PONDER ;
CARDS ;
ALAIN 9
ALBERT 5
BRUNO 6
CATHERINE 3
CHARLES 10
FRANCOISE 4
ISABELLE 6
JEAN 5
LAURENT 4
MARIE 5
NATHALIE 4
NICOLAS 5
PHILIPPE 6
PIERRE 3
REJANE 4
REMY 3
SABINE 6
SANDRINE 4
STEPHANIE 2
VALERIE 6
JEROME 5
;
RUN;

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.

PROC SORT DATA = PONDER ; BY PRENOM ; RUN ;


PROC SORT DATA = IMC3 ; BY PRENOM ; RUN ;

2) On fusionne les deux tables.

DATA IMC4 ; MERGE IMC3 (IN=OK) PONDER ; BY PRENOM ; IF OK; RUN ;

NB : La table PONDER contient une observation en plus (JEROME). Or seuls les


individus contenus dans IMC3 nous intéressent. On crée donc une variable de
sélection (nommée ici OK) qui permet de ne sélectionner (à l’aide de
l’instruction « IF OK ») que les observations appartenant à la table IMC3.
Initiation à SAS (C. Hagneré) 17
──────────────────────────────────────────────────────

L’instruction RETAIN : mise en mémoire, cumul

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 ;

NB : - Le « +1 » à la 4ème ligne signifie qu’à chaque nouvelle observation on


incrémente la variable NUMERO de 1.
- Le chiffre « 0 » à la 3ème ligne signifie que la variable NUMERO est initialisée
à 0. La variable NUMERO prend donc les valaures 1,2,3…Pour que le compteur
commence à 0, on remplacerait le « 0 » par « -1 ».

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.

PROC SORT DATA=IMC4; BY SEXE PRENOM; RUN;


DATA IMC4c ; SET IMC4 ; BY SEXE;
RETAIN;
IF FIRST.SEXE THEN NUMERO=0;
NUMERO +1;
RUN ;

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.

PROC SORT DATA=IMC4; BY SEXE PRENOM; RUN;


DATA IMC4d ; SET IMC4 ; BY SEXE;
RETAIN;
IF FIRST.SEXE THEN NB6LET=0;
IF PRENOM=SUBSTR(PRENOM,1,6)
AND PRENOM^=SUBSTR(PRENOM,1,5) THEN NB6LET +1;
IF LAST.SEXE THEN OUTPUT ;
KEEP SEXE NB6LET;
RUN ;

NB : - La fonction SUBSTR(X,d,k) renvoie la partie de la variable X qui commence


au caractère n° d et se termine au caractère n° d+k-1.
- La condition PRENOM^=SUBSTR(PRENOM,1,5) permet de ne pas compter
les prénoms qui ont moins de 6 caractères car ceux-ci vérifient la condition
PRENOM=SUBSTR(PRENOM,1,6).
Initiation à SAS (C. Hagneré) 18
──────────────────────────────────────────────────────

5. LES PROCEDURES DE GESTION DES DONNEES

Toutes les procédures ont la structure suivante :

PROC <nom de la procédure> DATA=<nom de la table> <options de la procédure>;


<instruction><options> / <options> ;

NB : Si « DATA=… » est omis, la procédure est appliquée sur la dernière table créée.

PROC CONTENTS : affichage des caractéristiques d’une table


Æ affiche en particulier le nombre d’observations de la table, la liste des variables, les labels
éventuels, le format des variables (numérique ou alphanumérique), leur longueur (8 pour les
numériques, nombre de caractères pour les alphanumériques).

PROC CONTENTS DATA=IMC4; RUN;

PROC PRINT : affichage du contenu d’une table

PROC PRINT DATA=IMC4 (OBS=10); VAR PRENOM IMC; RUN;

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….

PROC SORT : tri d’une table

PROC SORT DATA=IMC4 OUT=IMC4bysexe; BY DESCENDING SEXE; RUN;

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.

PROC TRANSPOSE : transposition d’une table


ÆLes observations deviennent des variables et les variables des observations.

PROC TRANSPOSE DATA=IMC4 OUT=IMC4trans NAME=VARIABLE LABEL=DESCRIPTION;


ID PRENOM;
RUN;

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
──────────────────────────────────────────────────────

6. LES PROCEDURES DE STATISTIQUE


DESCRIPTIVE

PROC MEANS : statistiques descriptives sur une liste de variables

PROC MEANS DATA=IMC4 ; VAR IMC ; RUN ;

NB : Dans cet exemple, la procédure calcule les statistiques descriptives de la variable


IMC. Lorsque l’instruction VAR… n’est pas spécifiée, la procédure est
appliquée sur l’ensemble des variables numériques.

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 :

N Nombre de valeurs non manquantes


NMISS Nombre de valeurs manquantes
MEAN Moyenne
MIN Minimum
MAX Maximum
RANGE Etendue
STD (ou STDDEV) Ecart type
VAR Variance
CV Coefficient de variation
CLM, LCLM, UCLM Intervalle de confiance à 95%, borne inférieure, borne supérieure.
NB : pour changer la probabilité de l’intervalle, on utilise l’option
ALPHA=<nombre entre 0 et 1>.
SUM Somme
SKEWNESS Symétrie
KURTOSIS Aplatissement
STDERR Ecart type de la moyenne
SUMWGT Somme des poids
CSS Somme des carrés corrigée
USS Somme des carrés non corrigée
MEDIAN Médiane
Q1,Q3 1er quartile, 3ème quartile
P1, P5, P10, P25, P50, P75, P90, Pn : nème centile
P95, P99
QRANGE Intervalle interquartile

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 :

PROC MEANS DATA=IMC4 ; VAR IMC ; WEIGHT PONDER; RUN ;


Initiation à SAS (C. Hagneré) 20
──────────────────────────────────────────────────────

Analyse sur un sous-échantillon

Il est possible d’appliquer la procédure sur un sous-échantillon grâce à l’instruction « WHERE


<condition> ». Par exemple, si on veut sortir les statistiques uniquement sur les femmes :

PROC MEANS DATA=IMC4 ; VAR IMC ; WHERE SEXE=’F’; RUN ;

Analyse par catégories

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…

PROC SORT DATA=IMC4; BY SEXE; RUN;


PROC MEANS DATA=IMC4 ; VAR IMC ; BY SEXE; RUN ;

NB : Les instructions WEIGHT, WHERE et BY valent pour


l’ensemble des procédures d’analyse statistique et économétriques.

L’instruction CLASS

Il existe une alternative à l’instruction BY : l’instruction CLASS. L’avantage de CLASS par


rapport à BY est qu’il n’est pas nécessaire de trier les données. Par contre, cette instruction ne
s’applique pas à toutes les procédures.

PROC MEANS DATA=IMC4 ; VAR IMC ; CLASS SEXE; RUN ;

Sortie des résultats dans une table

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.

PROC MEANS DATA=IMC4 NOPRINT;


OUTPUT OUT=STATS MEAN(IMC)=IMC_mean MEDIAN(IMC)=IMC_median;
BY SEXE ;
RUN ;

NB : - Le nom de la table de sortie (STATS) et ceux des statistiques (IMC_mean et


IMC_median) sont laissés à la discrétion de l’utilisateur.
- L’option « NOPRINT » indique qu’aucun résultat ne doit être affiché à l’écran.

PROC CORR : corrélation entre différentes variables

PROC CORR DATA=IMC4 OUTP=STATS; VAR TAILLE POIDS IMC; RUN ;

NB : L’option OUTP=… permet de stocker les résultats dans une table.


Initiation à SAS (C. Hagneré) 21
──────────────────────────────────────────────────────

PROC FREQ : tableaux de fréquence à une ou plusieurs dimensions

Tableau à une dimension

PROC FREQ DATA=IMC4 ; TABLES SANTE; RUN ;

Tableau à deux dimensions

PROC FREQ DATA=IMC4 ; TABLES SOLUTION* SEXE MISSING; RUN ;

NB : L’option MISSING permet d’afficher la fréquence des observations


manquantes.

Sortie des résultats dans une table

Pour stocker les résultats dans une table (par exemple la table FREQUENCE), on utilise
l’option OUT :

PROC FREQ DATA=IMC4 ; TABLES SANTE* SEXE / OUT=FREQUENCE; RUN ;

PROC UNIVARIATE : statistiques descriptives détaillées sur une variable

PROC UNIVARIATE DATA=IMC4 ; VAR IMC; RUN ;

Graphique de la distribution

L’instruction HISTOGRAM permet de tracer la distribution de la variable :

PROC UNIVARIATE DATA=NORMAL; VAR x;


HISTOGRAM / NORMAL KERNEL;
RUN ;

NB : - L’option « NORMAL » trace une courbe représentant la distribution d’une loi


normale dont la moyenne et l’écart type sont ceux de x. De même, on peut
utiliser les options LOGNORMAL, GAMMA, EXP, BETA, WEIBULL.
- L’option « KERNEL » trace une courbe issue d’une estimation non
paramétrique de la distribution de x.

Sortie des résultats dans une table

PROC UNIVARIATE DATA=IMC4 ; VAR IMC;


OUTPUT OUT=STATS MEDIAN=median_imc MODE=mode_imc;
RUN ;

NB : - On doit attribuer un nom de variable à chacune des statistiques sorties.


- On peut sortir les statistiques suivantes :
Initiation à SAS (C. Hagneré) 22
──────────────────────────────────────────────────────

N Nombre de valeurs non manquantes


NMISS Nombre de valeurs manquantes
NOBS Nombre d’observations
MEAN Moyenne
MIN Minimum
MAX Maximum
RANGE Etendue
MODE Mode
STD (ou STDDEV) Ecart type
VAR Variance
CV Coefficient de variation
SUM Somme
SKEWNESS Symétrie
KURTOSIS Aplatissement
STDERR Ecart type de la moyenne
SUMWGT Somme des poids
CSS Somme des carrés corrigée
USS Somme des carrés non corrigée
MEDIAN Médiane
Q1,Q3 1er quartile, 3ème quartile
P1, P5, P10, P25, P50, P75, P90, Pn : nème centile
P95, P99
QRANGE Intervalle interquartile

Quantiles

La procédure UNIVARIATE permet de sortir l’ensemble des quantiles d’une variable,


L’exemple suivant stocke dans la table QUANTILES les centiles de la variable x.

PROC UNIVARIATE DATA=NORMAL; VAR x;


OUTPUT OUT=QUANTILES PCTLPTS=1 TO 100 BY 1 PCTLPRE=P;
RUN ;

NB : - La table QUANTILES contient une ligne et autant de variables que de


quantiles. PCTLPRE définit le préfixe des noms de variable. Dans l’exemple,
les variables vont donc se nommer P1, P2, P3, …, P100.
- Pour générer les déciles, on écrirait PCTLPTS=10 TO 100 BY 10.

Comment construire une fonction de répartition ?

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.

PROC TRANSPOSE DATA=QUANTILES OUT=F; RUN ;

La procédure a généré une variable COL1. On va la renommer en x. Ensuite, on va


créer la variable y qui définit les ordonnées. Pour ce faire, on va utiliser une variable
« interne à SAS » qui stocke le numéro des observations : la variable _N_.

DATA F; SET F ;
RENAME COL1 = x;
Y = _N_/100;
RUN ;
Initiation à SAS (C. Hagneré) 23
──────────────────────────────────────────────────────

7. LES PROCEDURES GRAPHIQUES

PROC GPLOT : NUAGES DE POINTS ET COURBES

PROC GPLOT DATA=IMC4;


PLOT TAILLE*POIDS;
RUN ;

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.

PROC SORT DATA=IMC4; BY POIDS; RUN;


PROC GPLOT DATA=IMC4;
PLOT TAILLE*POIDS IMC*POIDS / OVERLAY;
RUN ;

NB : Pour définir l’apparence de chaque courbe, on utilise les instructions symbol1,


symbol2, symbol3… (pour la 1ère courbe, la seconde, la 3ème ….).
Dans l’exemple suivant, la première courbe est en pointillés de couleur bleue.
La seconde courbe est représentée par un nuage de points symbolisés par des
astérisques rouges.

SYMBOL1 I=JOIN LINE=2 CI=BLUE VALUE=‘ ’;


SYMBOL2 I= C=RED VALUE=STAR;

Il est également possible de tracer un graphique à double échelle en utilisant l’instruction


PLOT2.

PROC GPLOT DATA=IMC4;


PLOT TAILLE*POIDS;
PLOT2 IMC*POIDS;
RUN ;

Représentation d’une courbe de regression

L’exemple suivant montre comment représenter la courbe de régression quadratique qui


lie l’IMC au poids.

SYMBOL1 I=RQCLM95 C=RED CI=BLUE CO=GREEN VALUE=STAR;


PROC GPLOT DATA=IMC4;
PLOT IMC*POIDS / REGEQN;
RUN ;

NB : - Dans l’option RQCLM95, RQ signifie que l’on effectue une Régression


Quadratique (RL pour une régression linéaire, RC pour une régression
cubique). CLM95 permet de représenter l’intervalle de confiance à 95%.
Initiation à SAS (C. Hagneré) 24
──────────────────────────────────────────────────────

- L’option REGEQN permet d’indiquer l’équation de régression sur le


graphique.

PROC GCHART : HISTOGRAMME, CAMEMBERT

Histogramme

PROC GCHART DATA=NORMAL;


VBAR X;
RUN ;

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 :

PROC GCHART DATA=NORMAL;


VBAR X / MIDPOINTS=-14 TO 22 BY 2;
RUN ;

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.

PROC GCHART DATA=IMC4;


VBAR TAILLE / DISCRETE;
RUN ;

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.

PROC GCHART DATA=IMC4;


VBAR IMC / SUMVAR=POIDS TYPE=MEAN ;
RUN;

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.

PROC GCHART DATA=IMC4;


VBAR IMC / SUBGROUP=SEXE;
RUN ;

Il ne faut pas confondre l’option SUBGROUP avec l’option GROUP. L’option


SUBGROUP se contente de subdiviser l’histogramme alors que l’option GROUP
disjoint les différentes catégories définies par la variable de groupe.

PROC GCHART DATA=IMC4;


VBAR IMC / GROUP=SEXE;
RUN ;

L’ensemble de ces options peuvent être combinées. L’exemple suivant permet de


représenter le poids moyen par sexe selon que l’IMC est normal, insuffisant ou excessif.
Initiation à SAS (C. Hagneré) 25
──────────────────────────────────────────────────────

PROC GCHART DATA=IMC4;


VBAR SEXE / GROUP=SANTE SUBGROUP=SEXE
SUMVAR=POIDS TYPE=MEAN;
RUN ;

Camembert

PROC GCHART DATA=IMC4;


PIE SANTE;
RUN ;

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;

PROC G3D : GRAPHIQUE EN 3D

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.

/* Construction de la fonction de densité de la loi normale bivariée */


DATA BINORMAL (KEEP=X1 X2 F);
mu1 = 10; mu2 = 20; sigma1 = 2; sigma2 = 3; rho = 0.5;
min1 = mu1 – 4 * sigma1; max1 = mu1 + 4 * sigma1;
min2 = mu2 – 4 * sigma2; max2 = mu2 + 4 * sigma2;
DO X1=min1 TO max1 BY 0.1;
DO X2=min2 TO max2 BY 0.1;
Z1 = (X1 - mu1) / sigma1;
Z2 = (X2 - mu2) / sigma2;
F = EXP( -(Z1**2 + Z2**2 - 2*rho*Z1*Z2) / (2*(1- rho**2)) )
/ ( 2*ARCOS(-1) *sigma1*sigma2* SQRT( (1-rho**2)) );
OUTPUT;
END;
END;
RUN;

/* Graphique */
PROC G3D;
PLOT X1*X2=F / GRID ROTATE=0 TO 90 BY 10;
RUN;

NB : - Z1 et Z2 sont des variables d’espérance nulle et d’écart type 1.


- Dans cet exemple, les intervalles de définition des variables Xi sont
[µ(Xi) ± 4*σ(Xi)].
- ARCOS(.) est la fonction COS-1(.). Donc ARCOS(-1)=π.
- L’option GRID permet de tracer un quadrillage.
- L’option ROTATE=<nombre> TO <nombre> BY <nombre> permet de tracer
de tracer des rotations du graphique.

You might also like