25
__________________ INITIATION A SAS __________________ Cyrille Hagneré Novembre 2004

Initiations As

Embed Size (px)

Citation preview

Page 1: Initiations As

__________________

INITIATION A SAS

__________________

Cyrille Hagneré

Novembre 2004

Page 2: Initiations As

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

Page 3: Initiations As

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

Page 4: Initiations As

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

Page 5: Initiations As

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.

Page 6: Initiations As

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

Page 7: Initiations As

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

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

observations

Page 8: Initiations As

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.

Page 9: Initiations As

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.

Page 10: Initiations As

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;

Page 11: Initiations As

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

Page 12: Initiations As

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.

Page 13: Initiations As

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.

Page 14: Initiations As

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;

Page 15: Initiations As

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.

Page 16: Initiations As

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.

Page 17: Initiations As

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

Page 18: Initiations As

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

Page 19: Initiations As

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, P95, P99

Pn : nème centile

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 ;

Page 20: Initiations As

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.

Page 21: Initiations As

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 :

Page 22: Initiations As

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, P95, P99

Pn : nème centile

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 ;

Page 23: Initiations As

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

Page 24: Initiations As

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.

Page 25: Initiations As

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.