Vous êtes sur la page 1sur 42

INSTITUT DE STATISTIQUE

de lUniversit Pierre et Marie Curie

Cycle Suprieur 2me anne 2008-09

Introduction au logiciel SAS


Franois-Xavier LEJEUNE

Plan du cours
Sance n1 Sance n2 Sance n3 Sance n4 Sance n5 Annexe : Dbuts en SAS : Gnralits - Prsentation - tape DATA............ 4 Procdures usuelles - Graphiques.................................................... 10 Proc REG - SAS / Insight ................................................................. 16 Programmation en SAS (1) : macro-langage - O.D.S. ................... 22 Programmation (2) : calcul matriciel avec SAS / IML .................. 28 Projet SAS (sujets) ............................................................................ 36

Dernire modification le 24 novembre 2008

F.-X. Lejeune

F.-X. Lejeune

F.-X. Lejeune

Sance n1 Dbuts en SAS : Gnralits - Prsentation - tape DATA


Lobjectif de ce cours est de proposer une entre en matire lutilisation du logiciel SAS, tout en illustrant divers lments de Statistique lmentaire. Laspect initiation est important : la matrise de SAS est aujourdhui indispensable dans la plupart des offres de stages et demplois destines aux tudiants issus de filire Statistique ; mais, un peu dlicate acqurir, elle ncessite une formation approprie.

0. Gnralits sur SAS


SAS - Statistical Analysis System - est un logiciel polyvalent qui traite pratiquement tous les domaines de la Statistique. De conception amricaine, il est dvelopp par la socit SAS-Institute base Cary, en Caroline du Nord ; et a acquis, depuis sa mise sur le march en 1976, une situation dominante dans de nombreuses branches dactivits conomiques. SAS est donc un logiciel multi-facettes capable de grer de gros volumes de donnes (tableaux de plusieurs gigaoctets) des fins danalyse ou de reporting automatis. Un avantage important sur dautres logiciels de Statistique prsents dans lindustrie comme SPSS, Spad, Simca-P (en chimiomtrie), etc., est la possibilit de programmer sous SAS ses propres procdures. Malheureusement, SAS compte aussi certaines faiblesses : cot lev, langage de programmation peu avanc, graphiques moyens, etc. Cre en 1983, la filiale franaise est base Grgy-sur-Yerres (Seine-etMarne). Des versions quivalentes de SAS existent pour chacun des environnements Unix et Windows (depuis 1990). La dernire version V9 (2003) est distribue en France depuis 2004 ; sa toute dernire volution V9.2 est sortie en 2008.

1. Mise en route et prsentation


Pour activer la version Windows disponible lISUP, aller dans dmarrer > Tous les programmes > SAS > SAS 9.1 (English) ou bien, partir du bureau, cliquer directement sur le pictogramme du logiciel SAS. Lenvironnement SAS est constitu de 3 fentres principales : SAS Program Editor (F5) SAS Log (F6) SAS Output (F7) diteur de texte de SAS dans lequel on crit les commandes excuter ; fentre de gestion de la session, compilation des commandes ligne par ligne ; listing des sorties dun programme SAS.

Remarques La fentre Log est trs importante pour sassurer de la bonne excution dun programme avec les notes en bleu, les avertissements (warnings) en vert et les erreurs en rouge ! Notons aussi que les fentres Log et Output ne sont pas purges automatiquement par SAS entre les excutions. Il est conseill den effacer rgulirement le contenu en utilisant la commande Edit > Clear all ou licne page blanche dans les Tools. Dautres fentres sont aussi utiles : SAS Explorer SAS Toolbox SAS Results pour visualiser et manipuler les fichiers et les bibliothques SAS ; pour donner des ordres linterface SAS ; arborescence pour accder directement aux sorties textuelles et graphiques.

F.-X. Lejeune

Dans la fentre Program Editor (ou Enhanced Editor sous Windows), un programme SAS sera toujours compos : 1. Dune ou plusieurs tapes DATA : dfinition / lecture / modification dun ou plusieurs tableaux de donnes ; 2. Puis dune ou plusieurs tapes PROC : toutes les procdures agissant sur les tableaux de donnes. Modules SAS : Environ 40 modules (payants) tendent complter les fonctionnalits du logiciel parmi lesquels : SAS/BASE (instructions pour la manipulation de donnes, les statistiques descriptives lmentaires, ldition de rapports et la programmation dans les langages SAS de base, SQL et macro), SAS/STAT (procdures de modlisation, de classification et de statistiques descriptives), SAS/GRAPH (dition de graphiques haute rsolution), SAS/INSIGHT (analyse statistique interactive), SAS/IML (Interactive Matrix Language), SAS/SQL (Structured Querry Language), SAS/ETS (Econometrics and Time Series : tude des sries chronologiques), SAS/AF (Application Facility : cration dinterfaces), SAS/OR (recherche oprationnelle), SAS/FSP (Full Screen Products), SAS/ASSIST (interface cliquebouton pour crer des programmes SAS) Aide sous SAS : Help > SAS Help and Documentation ou touche F1.

2. tape DATA
Un fichier de donnes ne peut tre reconnu, lu ou trait par SAS que sil est dans un format spcifique. Nous appellerons TABLE SAS un tel fichier crit dans ce format o les colonnes reprsentent les variables et les lignes les valeurs observes de chaque variable. Les tables SAS peuvent tre temporaires ou permanentes. Une squence de lecture des donnes se prsente donc de la faon suivante : DATA < nom de la table SAS >; INPUT < liste des variables >; CARDS; < les donnes sont entres " la main" > ; RUN; Linstruction CARDS quivalente DATALINES et LINES signale le dbut de la saisie des observations (une seule observation par ligne). Les donnes sont alors spares par des espaces, une valeur manquante tant reprsente par un point. Notons que, dans la liste des variables, le sparateur est encore un blanc. Enfin, linstruction RUN (facultative) termine ltape DATA.

Exemple de programme
00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 /* exemple de programme; */ ligne de commentaire DATA exemple; INPUT nom$ naiss DDMMYY10. CSP$ auto$ sin07 sin08; CARDS; Pierre 08/04/1944 lib golf 0 10 Paul 12/03/1976 arti 307 0 0 Jacques 09/10/1953 cadre C3 51 0 Carole 11/12/1964 lib twingo 27 0 Caroline 21/08/1970 cadre polo 0 0 Nathalie 14/06/1962 cadsup 607 0 5 ; RUN;

Remarque La numrotation des lignes de code est spcifique la version Unix.


5 F.-X. Lejeune

Variables SAS : Le nom des variables nominales est toujours suivi du symbole $ . Les variables numriques peuvent tre qualitatives (par ex. dichotomiques / binaires ou catgorielles) ou quantitatives (discrtes ou continues). Le nom dune variable comporte au plus 32 caractres, commence par une lettre A-Z ou _ (underscore) et ne doit pas contenir despace(s) ou de symboles spciaux tels que & , % , $ , # , etc. Lindication DDMMYY10. qui suit naiss sappelle un informat pour que SAS comprenne que la donne lue est une date crite sous la forme jj/mm/aaaa. Dans une table SAS, la date est stocke comme le nombre de jours qui la spare de la date rfrence du 1er janvier 1960 (nombre ngatif si date antrieure, nombre positif si date postrieure, la date rfrence tant la date zro). Compilation : Menu > Run > Submit ou icne bonhomme dans les Tools ou touche F3. SAS est un langage interprt. Lorsque lon lance un programme, les lignes de code dfilent une une dans la fentre Log. Dans notre exemple, un message indique la cration de la table exemple qui compte 6 lignes et 6 colonnes. Sur la version Unix, les lignes de code disparaissent de la fentre Program Editor lors de lexcution. Celles-ci peuvent tre rappeles ensuite avec la commande Menu > Run > Recall Last Submit. Bibliothques (libraries) SAS : Toute nouvelle table est par dfaut conserve dans la bibliothque temporaire Work et ne reste en mmoire que le temps de la session SAS en cours. Pour prenniser lexistence dune table, il faut lenregistrer au sein mme du programme dans une bibliothque permanente. Linstruction LIBNAME indique alors le chemin dun rpertoire o doivent tre conserves les tables en format SAS .sas7bdat .

Exemple : Cration dune bibliothque permanente malib


libname malib 'C:\Mes documents\Cours de SAS\TPSAS\datasas';
/* malib est un nom qcq faisant rfrence la bibliothque permanente */

DATA malib.exemplebis; SET exemple; RUN;

/* exemplebis est permanente */ /* exemple est temporaire */

Quelques informations sur les autres bibliothques de SAS dans Explorer :


SASHELP contient des donnes fournies par SAS des fins dexercices (comme class, air, shoes, etc.) ; SASUSER est une bibliothque personnelle (chaque utilisateur a sa propre SASUSER) permanente (contrairement WORK). Cette bibliothque contient entre autres les informations de personnalisation de la session SAS (barres doutils, par exemple). Il est possible dy crire ses donnes mme si, en gnral, il est prfrable dallouer une bibliothque spare pour le stockage des donnes.

Quelques commandes pour modifier une table SAS dans une tape DATA :
IF nom = 'Jacques' THEN naiss = -2280; RENAME naiss = naissance; KEEP nom sin07 sin08; modification dune valeur

changer le nom dune variable DROP naiss CSP auto; enlever des variables

sintotal = sin07 + sin08; age = int((today()-naiss+1)/365.25); INPUT var_sup; CARDS; ;

ajouter des variables fonctions des prcdentes

ajouter une variable supplmentaire

F.-X. Lejeune

SAS reconnat les fonctions mathmatiques et statistiques suivantes : ABS, ARCOS, ARSIN, ATAN, COS, COSH, SIN, SINH, EXP, LOG (nprien), MIN, MAX, RANGE, INT, ROUND, CEIL, FLOOR, SQRT, N (nb de valeurs disponibles), NMISS (nb de valeurs manquantes), SUM, TAN, TANH, MEAN, VAR, STD SET TAB1; SET TAB2; MERGE TAB1 TAB2;

fusionner 2 tables contenant des variables diffrentes et des individus identiques Attention ! Avant de concatner 2 tables, les lignes de chaque table doivent tre tries dans le mme ordre (avec la PROC SORT et linstruction BY). if sin06 = 0 then DELETE; enlever des observations

Importer un tableau de donnes depuis un fichier externe :


Il est possible dimporter sous SAS des fichiers Excel .xls ou .csv (Comma Separated Value : dlimiteur point-virgule). Linstruction INFILE indique le chemin du fichier contenant les donnes importer. Syntaxe pour un fichier .csv : DATA < nom de la Table SAS >; INFILE 'c: \ \ fichier.csv' delimiter = ';'; INPUT < liste des variables >; RUN;

/* ou dlm = ';' */

On peut aussi bien renseigner le chemin du fichier de donnes avant ltape DATA avec linstruction FILENAME : filename file1 'c: \ \ fichier.csv'; /* file1 est un nom qcq faisant rfrence au chemin du fichier */ DATA < nom de la Table SAS >; INFILE file1 dlm = ';'; INPUT < liste des variables >; RUN; Remarque Dans une session SAS, par souci de lisibilit, il est commode de placer lensemble des libname et des filename en tte de programme avec les options gnrales portant sur laffichage des sorties dans la fentre Output. Lemploi de linstruction filename permet en outre de modifier rapidement et simplement le chemin dun fichier dplac sans avoir chercher dans le programme... Syntaxe pour un fichier Excel : filename file2 DDE "Excel|m:\courssas\[import.xls]feuil1!L2C1:L19C4"; /* DDE pour Dynamic Data Exchange, Excel dsignant l'"Engine". */ DATA < nom de la Table SAS >; INFILE file2; INPUT < liste des variables >; RUN; Les donnes importer sont dans longlet feuil1 du fichier Excel import.xls, de la ligne 2 la ligne 19 et sur les 4 premires colonnes. Le fichier Excel doit imprativement tre ouvert pour mener cette opration.
7 F.-X. Lejeune

Plus simplement, nous pourrons encore importer des donnes depuis un fichier externe avec la commande File > Import Data en prcisant ensuite la nature et le chemin du fichier source. Enfin, il est aussi possible de rcuprer des donnes sur des pages web .html ou .htm . Pour ce faire, on peut copier (commandes copier / coller) les donnes dans un fichier via un diteur de texte (nedit ou emacs sous Unix, le bloc-note ou Word sous Windows, par exemple), puis les formater pour ensuite les importer dans SAS. Indiquons enfin une troisime possibilit qui consiste utiliser une PROC IMPORT avec la syntaxe ad hoc.

Exporter un tableau de donnes dans un fichier externe :


Pour la dmarche inverse, une tape data peut aussi servir crer un fichier externe avec les donnes dune table SAS existante. Cette tape DATA diffre de celles vues prcdemment puisque lobjectif nest pas ici de construire une nouvelle table mais dutiliser les lments dune table SAS pour gnrer un fichier texte .txt ; on utilisera alors une instruction DATA _NULL_;. Linstruction FILE indique ensuite le chemin avec le nom du fichier qui doit recevoir les donnes exportes. Linstruction PUT sutilise de manire analogue linstruction INPUT pour indiquer le nom des variables considrer. Elle permet, si on le souhaite, dcrire les donnes en utilisant un pointeur dcriture (position relative ou absolue pour lcriture dune valeur sur la ligne dun individu) ainsi quun format dcriture (la forme sous laquelle on va crire la valeur). Ce format pourra aussi bien tre un format SAS prdfini quun format utilisateur pralablement dfini avec une PROC FORMAT (cf. exercice 2, sance n2). La valeur exporte sera alors la valeur formate au lieu de celle stocke suivant le format par dfaut de SAS. Contrairement INPUT, il nest pas ncessaire de signaler les variables nominales par un $ ; lors de lexport, le type des variables SAS est dj connu. Syntaxe pour un fichier .txt : filename file3 'c: \ \ fichier.txt'; DATA _NULL_; SET < nom de la table SAS >; FILE 'c: \ \ fichier.txt' dlm = 'dlimiteur'; /* ou FILE file3 avec filename */ PUT < pos_point_1 > < var_1 > : < format_1 > < pos_point_p > < var_p > : < format_p >; RUN;

Exemple dexport de donnes


DATA _NULL_; SET exemple; FILE 'm:\courssas\exemple.txt'; PUT nom 1-6 @9 naiss:DATE9. +1 sin08; RUN;

Dans lexemple, les donnes relatives la variable nom sont affiches sur les colonnes 1 6 de la ligne dun individu (tant pis si le nom a plus de 6 caractres !). Le curseur se place ensuite en position 9 (soit en 8me colonne) pour afficher la date de naissance naiss dans le format prdfini DATE.9. Enfin, lorsquune valeur est inscrite, le curseur laisse (par dfaut) un espace pour inscrire la valeur suivante ; avec la commande +1, le curseur est dplac dune colonne supplmentaire pour finalement afficher les donnes de sin08.
Pour exporter des donnes dans un fichier externe, nous pourrons encore utiliser la commande File > Export Data (plus simple) ou bien une PROC EXPORT (plus compliqu).

F.-X. Lejeune

Exercice n1
Dans votre rpertoire de travail, copier le rpertoire datasas qui contient les tables SAS utilises dans ce cours. Rcuprer ensuite les fichiers champ08.txt, champ08.xls et champ08.csv dans datasas. Cette table contient les rsultats du championnat 2007/08 de football de deuxime division. Les variables indiquent respectivement pour chaque club : le nom club, le nombre total de victoires vic, de matchs nuls nul et de dfaites def, le nombre total de buts marqus bp et encaisss bc. Dans un premier temps, avec la commande INFILE, importer ces donnes sous SAS dans une table tab1 partir des trois types de fichiers sources. Donner un titre cette table (avec linstruction TITLE). Crer ensuite une table clt contenant sur une colonne rang et par ordre croissant tous les entiers compris de 1 20. Afficher les tables tab1 et clt. partir de la table tab1, crer une table tab2 qui comptera 2 variables supplmentaires : pts, le nombre total de points obtenus par une quipe sachant quune victoire rapporte 3 points et un match nul 1 point ; diff, la diffrence entre les nombres de buts marqus et encaisss. Afficher la table tab2. partir de la table tab2, crer une table tab3 qui reprend les donnes de tab2 tries par ordre dcroissant de points pts puis par ordre dcroissant de diffrence de buts diff. Afficher la table tab3. Enfin, dans une table champ, fusionner les tables clt et tab3 et ajouter une variable result qui vaut + si lquipe est classe dans les trois premires places, - si elle est classe dans les trois dernires places ou = sinon. Afficher la table champ puis effacer les tables tab1, tab2, tab3 et clt.

Exercice n2
Utiliser un moteur de recherche (par exemple, Google) pour trouver un tableau de donnes sur internet puis le rapatrier sous SAS. Indication : Rcuprer les donnes dans un fichier .txt via un diteur de texte (on pourra utiliser le blocnote, par exemple). Importer ensuite ces donnes en utilisant linstruction INFILE.

F.-X. Lejeune

Sance n2

Procdures usuelles - Graphiques

Un programme SAS est compos dune ou plusieurs tapes DATA (cf. sance n1) suivies dune ou plusieurs tapes PROC (ou procdures). Une tape PROC applique des traitements des tables et gnre des sorties, des graphiques ou encore de nouvelles tables. Les procdures PRINT, SORT et DELETE ont dj t abordes au cours de la sance n1. Dautres sont dtailles dans le polycopi de Josiane Confais.

1. Procdures usuelles
Syntaxe
Le dbut de ltape est signal par PROC suivi du nom de la procdure, puis du nom de la table traiter. Il est important de spcifier la table sur laquelle on travaille avec linstruction DATA = < nom_tab > . Par dfaut, la procdure agit sur la dernire table cre. La fin de ltape est reconnaissable linstruction RUN.
PROC < nom de la procdure > DATA = < nom de la Table SAS > < options >; ... RUN;

Exemple : impression de la table exemple.


libname malib 'C:\Mes documents\Cours de SAS\TPSAS\datasas'; proc print data=malib.exemple; run;

Quelques instructions relatives aux procdures :


Linstruction PROC (abrviation de procdure) est utilise pour appeler une procdure SAS. PROC < nom_proc > DATA = < nom_tab > < options >; Linstruction VAR (abrviation de variables) est suivie de la liste des variables considrer. VAR < liste des variables >; Linstruction BY permet le traitement par sous-groupes. BY < sous-groupe de variables >; Remarque La table SAS traite par linstruction BY doit avoir t trie suivant les variables mentionnes dans linstruction. Linstruction TITLE dfinit le texte imprimer en en-tte des pages de sortie. On peut ajouter jusqu 10 lignes de titres. TITLEn 'titre'; o le n spcifie le nime titre.

Linstruction FOOTNOTE dfinit le texte imprimer en bas des pages de sortie. On peut ajouter jusqu 10 lignes de bas de pages. FOOTNOTEn 'bas de page'; o le n spcifie le nime bas de page.

10

F.-X. Lejeune

Titres SAS : TITLE et FOOTNOTE sont des instructions globales ; elles peuvent tre utilises nimporte o dans le programme (tape DATA, tape PROC ou en dehors). Quand on modifie un titre, tous les titres hirarchiquement infrieurs sont effacs. Pour supprimer les titres, on pourra utiliser linstruction TITLE sans argument TITLE;.

Quelques exemples de procdures usuelles (liste non exhaustive) Certaines de ces procdures agissent directement sur des tables SAS :
PROC PRINT : procdure dimpression ; PROC SORT : procdure de tri ; PROC STANDARD pour centrer et rduire les donnes dune table ;
PROC STANDARD DATA=nom_tab VARDEF=df MEAN=0 STD=1 OUT=reduit; RUN; /* VARDEF prcise le diviseur dans le calcul de la variance */

PROC TRANSPOSE pour changer les variables et les observations dune table et rciproquement ;

Dautres calculent des statistiques simples :


PROC MEANS dite des statistiques simples : moyenne, cart-type, maximum et minimum sur les variables numriques uniquement. Des options permettent dobtenir des statistiques supplmentaires : SUM, SKEWNESS (coefficient dasymtrie), KURTOSIS (coefficient daplatissement), T pour un test t de Student sur la moyenne Il est possible de restreindre les variables dtude avec linstruction VAR ;
PROC MEANS RUN; DATA = nom_tab < options means >;

PROC CORR pour calculer les corrlations entre toutes les variables numriques ; PROC UNIVARIATE produit certaines statistiques univaries pour chaque variable numrique considre ; PROC FREQ pour calculer les effectifs par modalit dune variable discrte et des tests du Chi2 ;

Dautres permettent de construire des modles :


PROC REG pour effectuer un modle de rgression linaire reliant une (ou plusieurs) variables(s) explique(s) (ou dpendante(s)) avec une (ou plusieurs) variable(s) descriptive(s) (ou prdicteur(s)) ;
PROC REG DATA=tabin < options reg >; MODEL < var_dp > = < var_exp > / < options >; PLOT < var_dp > * < var_exp > = 'symbol'; OUTPUT OUT=tabout P=< nom1 > R=< nom2 >; /* sauvegarde des prdicteurs et des rsidus dans une table tabout RUN;

*/

PROC GLM pour effectuer des modles danalyse de la variance non-orthogonaux, danalyse de la covariance et des modles linaires gnraux ;
PROC GLM DATA=tabin < options glm >; CLASS < variable(s) >; MODEL < var_dp > = < var_exp >; OUTPUT OUT=tabout keyword = < nom_de_variable >; RUN;

11

F.-X. Lejeune

PROC GENMOD pour effectuer un modle de rgression linaire gnralise. La rgression logistique (disponible aussi avec la PROC LOGISTIC) est notamment une rgression linaire gnralise particulire lorsque la fonction de lien ( link function ) est la fonction LOGIT.

2. Graphiques 2 dimensions
NUAGES DE POINTS
PROC PLOT produit des graphiques en basse rsolution (avec des caractres) de nuages de points (scatter plots) 2 dimensions ;
PROC PLOT DATA = nom_tab < options plot >; PLOT < Y_var > * < X_var > = 'caractre' / < plot options >; RUN;

Les options PLOT sont nombreuses, elles permettent entre autres de prciser les axes, les marques dchelles et leurs libells, de tracer des lignes supplmentaires, dencadrer le graphe (BOX) ou de superposer plusieurs graphes (OVERLAY). Quelques options PLOT : BOX, OVERLAY, VREF = , HREF = Remarque En excutant la proc PLOT sur un exemple, on pourra apprcier les faiblesses des graphiques affichs dans la fentre Output ! On prfrera donc utiliser la PROC GPLOT qui permet dobtenir des graphiques en haute rsolution et dont la syntaxe est explicite dans lexercice n4. Mme remarque pour la proc CHART dcrite ci-dessous, on utilisera plutt la PROC GCHART.

DIAGRAMMES
PROC CHART trace en basse rsolution des histogrammes horizontaux (hbar), verticaux (vbar), bivaris (block), des camemberts (pie) et des diagrammes en toiles (star). Elle traite des variables quantitatives ou qualitatives. Les variables quantitatives sont codes explicitement ou automatiquement en classes.
PROC CHART DATA VBAR < variable HBAR < variable PIE < variables RUN; = > > > nom_tab < options chart / < chart options >; / < chart options >; / < chart options >; >; dite des histogrammes verticaux dite des histogrammes horizontaux dite des camemberts

Exemples doptions CHART :


SUMVAR = variable numrique dont le cumul ou la moyenne est reprsent ; DISCRETE spcifie que les valeurs sont de type discret (avec un nombre limit de modalits) ; MIDPOINTS = < valeurs > spcifie le point moyen de chaque bton dun histogramme, par exemple
MIDPOINTS = 10 TO 100 BY 10; dfinit un histogramme 10 btons centrs sur les valeurs 10, 20, , 100 ; MIDPOINTS = 'bleu' 'vert' 'rouge'; dfinit un histogramme 3 btons pour les valeurs discrtes cites ;

GROUP = < variable > reprsentation de plusieurs graphes cte cte suivant les modalits dune mme variable ; SUBGROUP = < variable > dcoupage des barres ou colonnes selon la contribution de chacune des modalits dune variable ; LEVELS = < nombre de classes > ; TYPE = spcifie ce que reprsente le graphique (par dfaut une frquence FREQ) ; autrement on peut choisir : CFREQ (frquence cumule), CPT (pourcentage cumule), PCT (pourcentage)
12 F.-X. Lejeune

Exercice n1
La table note est extraite de Multivariate Analysis , K.V. Mardia, J.T. Kent et J.M. Bibby. Ces notes sont relatives 88 tudiants dune universit anglaise ayant pass 5 preuves notes par des notes entires de 0 100. Les 5 preuves sont respectivement : mcanique, algbre linaire, algbre des structures, analyse et statistique. En plus des 5 colonnes correspondant aux 5 preuves, une premire colonne indique le numro de ltudiant (de 01 88). Le but de cet exercice est dobserver les effets des lignes de code ci-dessous.
options pagesize=64 linesize=78 nodate; title; footnote 'TP2: Exercice 1'; libname malib 'C:\Mes documents\Cours de SAS\TPSAS\datasas'; /* Sample Data Set: note */ proc print data=malib.note; run; proc means data=malib.note /* vardef=n */; run; proc univariate data=malib.note /* plot vardef=n */; run; proc corr data=malib.note < options >; run;

Commentaires Par dfaut, la proc CORR calcule le coefficient de corrlation de Pearson. Autrement, on pourra spcifier loption SPEARMAN : coefficient de corrlation des rangs de Spearman ; ou KENDALL : coefficient de corrlation de Kendall ; ou HOEFFDING. Dautres options sont aussi disponibles parmi lesquelles : NOSIMPLE : pour supprimer limpression des statistiques simples ; COV : pour imprimer les covariances (option incompatible avec les options SPEARMAN et KENDALL !) ; OUTP = nom_tab : pour crer une table SAS contenant les coefficients de corrlation de Pearson.
proc plot data=malib.note; plot stat*meca; plot anls*algb; run; proc standard data=malib.note vardef=df mean=0 std=1 out=reduit; run; proc print data=reduit; run; proc corr data=reduit cov vardef=df; run;

Exercice n2
options pagesize=28 nodate; title; footnote 'TP2: Exercice 2'; libname malib 'C:\Mes documents\Cours de SAS\TPSAS\datasas'; /* Sample Data Set: htwt */ /* Dcrire la table de donnes et noter l'effet de la commande "(obs=10)" */ proc print data=malib.htwt (obs=10); run; proc sort data=malib.htwt out=TRI1; by name; run; F.-X. Lejeune

13

proc print data=TRI1 (obs=10); id name; var sex age; title 'PROC SORT: Exemple 1'; run; proc sort data=malib.htwt out=TRI2; by sex age; run; proc print data=TRI2 (obs=10); id name; var sex age; title 'PROC SORT: Exemple 2'; run; proc means data=malib.htwt; title 'PROC MEANS: Exemple 1'; run; /* Notez les effets des options suivantes: n, mean, var, min, max, sum, nmiss et maxdec=1 */ proc means data=malib.htwt n mean min max sum nmiss maxdec=1; var age; class sex; title 'PROC MEANS: Exemple 2'; run; proc corr data=malib.htwt; var age height weight; title 'PROC CORR Exemple'; run; proc univariate data=malib.htwt; var age; title1 'PROC UNIVARIATE Exemple'; run; proc format; value $sexl 'M' = 'Male' 'F' = 'Female'; value agef low-29 = '1' 30-39 = '2' 40-49 = '3' 50-high = '4'; run; proc print data=htwt; format sex $sexl. age agef.; run;

Exercice n3 : comment simuler des observations suivant une loi donne ?


/* On prendra par exemple: N = 1000 et s = 10. */ title 'Simulation de 1000 observations d''une loi gaussienne'; footnote 'TP2 Exercice3';

14

F.-X. Lejeune

data simul; do i=1 to N; y=rannor(s); output; end; keep y; run;

pour un chantillon de N observations pour une distribution Gaussienne centre rduite

On pourra simuler dautres lois en utilisant les instructions : ranbin (binomiale), rancau (Cauchy), ranexp (exponentielle), rangam (gamma), ranpoi (Poisson), ranuni (uniforme [0,1]) etc. Les tirages sont des tirages pseudo-alatoires. Entre deux procdures de tirage, il importe de changer la valeur de la racine dinitialisation s (seed). Autrement, les tirages sont tous identiques ! Par dfaut, SAS choisit s=0.
proc gchart data=simul; title 'Histogramme des observations'; vbar y; /* vbar3d y; */ run; quit;

Exercice n4 : exemple dutilisation de la proc GPLOT


title; footnote 'TP2: Exercice4'; libname malib 'C:\Mes documents\Cours de SAS\TPSAS\datasas'; /***************************************************/ /* Sample Data Set: tabac */ /* Sources: Direction des Services Fiscaux, ISEE */ /***************************************************/ goptions reset=all rotate=landscape border ftext=hwdmx013 htext=0.25 cm; title1 c=blue f=hwdmx020 h=1.4 j=center 'Evolution de cigarettes francaises et etrangeres entre 1989 et 2004'; title2 c=bl f=hwdmx011 h=1 'Source: ISEE'; symbol1 symbol2 symbol3 symbol4 symbol5 symbol6 value=dot interpol=join line=1 color=blue width=2; v=circle i=join l=8 c=green w=2; v=square i=join l=15 c=red w=2; v=diamond i=splines l=22 c=yellow w=2; v=# i=needle l=29 c=black w=2; v=none i=step l=34 c=purple w=2; la consommation de

axis1 length=17 cm label=(h=1 f=hwdmx021 'Annees') value=(f=hwdmx021 h=0.8) order=(1989 to 2004 by 1) minor=(h=0.2 width=1.0 n=4); axis2 length=10.6 cm label=(h=1 f=hwdmx021 'Consommation en kg') value=(f=hwdmx021 h=0.8) order=(500 to 190500 by 10000) major=(h=0.5 width=1.5) minor=(h=0.2 width=1.0 n=4); legend1 frame cframe=ligr position=(bottom center outside); proc gplot data=malib.tabac gout=graf1; plot cigfr*annee=1 ciget*annee=2 roule*annee=3 / overlay haxis=axis1 vaxis=axis2 legend=legend1; run; quit; 15 F.-X. Lejeune

Sance n3

Proc REG - SAS / Insight

De nombreux problmes peuvent tre dcrits sous la forme dun systme entres et sorties : on peut plus ou moins agir sur les variables dentre X dun systme (variables descriptives) et on observe les variables de sortie Y (variables dpendantes). Le but de cette sance est de comprendre et de dcrire simplement les relations entre Y et X lorsquun ajustement linaire sapplique. Le modle linaire dans SAS est notamment trait par les procdures ANOVA (modles danalyse de la variance orthogonaux), REG (rgression linaire), GLM (modles danalyse de la variance non-orthogonaux, analyse de la covariance, modles linaires gnraux), GENMOD (modles linaires gnraliss), PLS (rgression Partial Least Squares ) et MIXED (modles linaires mixtes). En particulier, nous nous intressons ici la proc REG. Des exemples sont donns en exercice et nous abordons aussi la rgression logistique avec la proc LOGISTIC pour des variables Y qualitatives.

1. Proc REG
Modle : pour n observations et p descripteurs, la proc REG de SAS traite le modle de rgression :
p

Yi = a + b k X i, k + i , 1 i n ;
k =1

Y dsigne le vecteur dpendant ; X = (1n , X 1 , ..., X p ) la matrice des p descripteurs ;

2 ~ (0, Id n ) le terme derreur ;

= (a, b1 , ..., b p )' et les paramtres du modle que lon souhaite estimer.
Le modle scrit aussi sous la forme matricielle : Y = X + et par la mthode des moindres carrs
-1 ordinaires, nous obtenons un estimateur sans biais et de variance minimale pour : = ( X' X) X' Y .

Rfrence bibliographique : o J. Confais et M. Le Guen (2006) : Premiers pas en rgression linaire avec SAS, Revue modulad, n35 < http://www-rocq.inria.fr/axis/modulad/numero-35/Tutoriel-confais-35/confais-35.pdf >. La syntaxe de la proc REG est donne dans la sance n2 ; pour prolonger notre tude, nous dcrivons ici les sorties et nous donnons quelques options lies la procdure :

SORTIES : 1. Table danalyse de la variance


DF : degrs de libert associs au modle et lerreur ; Sum of Squares (SS) ; Mean Square (MS) : MS = SS / DF ; F Value : valeur de la statistique de Fisher du test du modle o tous les coefficients sont nuls contre le modle complet de rgression ; Prob>F : probabilit que la valeur dune statistique suivant la loi de Fisher dpasse la valeur du F Value ; Root MSE : estimation de , = MS Error ; Dep Mean : valeur de Y ; C.V. : coefficient de variation, CV = 100 / Y ; R-Square : part de la variance explique par le modle, R 2 = SS Model SS Corrected Total ; 2 Adj R-Sq : estimation sans biais de R , Adj. R 2 = 1 [SS Error (n p 1)] / [SS Corrected Total (n 1)] = [(n 1) / (n p 1)][1 R 2 ] .
16 F.-X. Lejeune

2. Estimation des paramtres


INTERCEP : paramtre Intercept = a ; Parameter Estimate : estimateur du vecteur , = (a, b1 , ..., b p ) ;
Standard Error : estimation de lcart type de lerreur ; T for H0 : Parameter=0 : test de Student de nullit du coefficient ; Prob>|T| : probabilit que la valeur dune statistique suivant la loi de Student dpasse T en valeur absolue ;

OPTIONS lies linstruction MODEL :


COVB : matrice des variances et covariances des estimateurs de a, b1 , ..., b p ; CP : la valeur prise par le Cp de Mallows ; P : les valeurs prdites ; R : pour obtenir une analyse des rsidus ; DW : pour calculer la statistique de test de Durbin-Watson ; TOL, VIF : colinarit dun descripteur vis vis des autres ; Influence : analyse dtaille de linfluence de chaque observation sur les valeurs estimes et prdites. Slection des descripteurs. En particulier, la proc REG offre des possibilits supplmentaires en ce qui concerne le choix automatique des descripteurs et la recherche de corrlations en termes derreurs. SELECTION = < mthode > ; pour slectionner les descripteurs du modle o mthode peut prendre les valeurs suivantes : stepwise pour une slection progressive ( pas pas ) des descripteurs ; forward pour une slection ascendante ; backward pour une limination descendante rsquare calcule tous les 2 p 1 modles possibles avec p descripteurs. On peut aussi se restreindre la recherche du meilleur modle 1 puis 2 puis 3, , puis p descripteurs au sens du critre du Cp de Mallows laide de loption selection=rsquare best=1 cp;. p fix, on choisira le modle qui donne le plus grand R2.

tude des rsidus. Ltude des rsidus est une tape essentielle pour valider un modle. En effet, les rsidus sont des estimateurs des termes derreur qui doivent vrifier les hypothses sous-jacentes au modle : indpendance, moyenne nulle, variance constante (critre dhomoscdasticit) et ventuellement de distribution Gaussienne. Pour ce faire, la proc UNIVARIATE calcule la moyenne ; et apporte des tests de normalit avec loption NORMAL : Shapiro-Wilk, Kolmogorov-Smirnov, Cramr-von Mises, AndersonDarling ou encore la droite de Henri . Une tude du graphe des rsidus par rapport aux valeurs prdites de la variable dpendante ne doit laisser apparatre aucune tendance. Loption DW de la proc REG fournit la valeur de la statistique de Durbin-Watson pour tester lautocorrlation des rsidus. Pour le critre dhomoscdasticit, loption SPEC de la proc REG produit un test du Chi2. Ltude des rsidus permet aussi de reprer dventuelles observations aberrantes ou des observations qui jouent un rle important dans la dtermination de la rgression. Sauvegarde des rsultats. Il est possible de conserver dans une table SAS certains rsultats de lanalyse tels que, par exemple, les rsidus (residual ou R) et les valeurs prdites de la variable dpendante Y (predicted ou P). Pour cela, nous ajoutons aprs la dfinition du modle la ligne :
OUTPUT OUT = < nom_tab >

R = < nom_var1 > P = < nom_var2 >;

17

F.-X. Lejeune

Exemple
DATA tension; INPUT age tension; CARDS; 35 114 45 124 55 143 65 158 75 166 ; RUN; PROC REG DATA=tension CORR SIMPLE OUTEST=estcoeff; MODEL tension = age / SPEC DW R CLI; PLOT tension*age p.*age / overlay symbol = '.'; OUTPUT OUT=sorties P=P R=R; RUN; QUIT;

La commande OUTEST= permet de crer une table SAS qui conserve les valeurs estimes des coefficients de la rgression. Loption CLI donne un intervalle de confiance 95% pour chacune des valeurs prdites de la variable dpendante. La seconde ligne de la proc REG dfinit la modlisation souhaite. Dans la troisime ligne, nous proposons aussi un graphique qui superpose le nuage de points et la droite dajustement. Exercice Excuter le programme ci-dessus et observer les sorties. Remarques sur la stabilit des coefficients cf. [Saporta G. (2006) : Probabilits, analyse des donnes et statistique, 2e dition, ditions Technip, Paris]

Lcart-type des valeurs a, b1 , ..., b p donne dj une bonne indication du caractre plus ou moins stable de
lestimation dun coefficient. Si lcart-type est du mme ordre de grandeur que la valeur estime, il est clair que celle-ci est mal dtermine !

La principale source dinstabilit pour estimer de est la multicolinarit des descripteurs (quand les descripteurs sont fortement corrls entre eux). Dans ce cas, le dterminant de la matrice X' X est proche de 0 et linverse de X' X va avoir des valeurs trs leves. Malgr une valeur leve du R2, on pourra avoir des erreurs considrables dans les prdictions. Pour palier les problmes lis la multicolinarit sans pour autant exclure des variables du modle, il existe des alternatives au modle de rgression : rgression sur composantes principales, rgression PLS ou encore la ridge regression en perturbant lgrement la diagonale de X' X par une constante k positive.

2. SAS/Insight : exploration interactive de donnes


Le module SAS/Insight est un outil dynamique pour lanalyse exploratoire et graphique dun jeu de donnes. Il se prsente sous la forme dune interface presse-boutons permettant notamment dexaminer les distributions univaries, de visualiser les donnes et de construire des modles utilisant la rgression, lanalyse de la variance et le modle linaire gnralis. Pour ce faire, lutilisateur dispose dun systme de menus droulants et de boutons pour effectuer ltude statistique sans avoir crire de code SAS dans la fentre Program Editor.

Appel de SAS/Insight
Explorer > solution > tools > analysis > Interactive Data Analysis

18

F.-X. Lejeune

Exercice n1 : un exemple de rgression linaire simple


Soit un chantillon de n=24 appartements parisiens. Pour chaque appartement, on dispose de sa surface en mtres carrs et de son prix de vente en milliers deuros. Ces donnes sont extraites de [Tenenhaus M. (2007) : Statistique, Mthodes pour dcrire, expliquer et prvoir, Dunod, Paris] ; et rappeles ci-dessous : S (m2) P (k) S (m2) P (k) 28 130 32 155 50 280 52 245 196 800 40 200 55 268 70 325 190 790 28 85 110 500 30 78 60 320 105 375 48 250 52 200 90 378 80 270 35 250 60 295 86 350 20 85 65 300 100 495

Visualiser la table SAS apparts stocke dans le rpertoire datasas en utilisant la fentre Explorer. laide de la proc UNIVARIATE (avec loption plot) ou du module SAS/Insight, procder une tude descriptive des variables Surface et Prix. Observer les sorties et, pour chaque variable, donner la moyenne, la mdiane, les quartiles, lamplitude, lcart-type et lcart interquartile. Comment obtient-on le box-plot ? Identifier les valeurs extrmes. laide de la proc CORR, justifier de la pertinence dun ajustement linaire.

On procde maintenant la rgression linaire, en prenant comme variable descriptive X la surface et comme variable dpendante Y le prix. Lancer lexcution du programme suivant :
proc reg data=lib1.apparts outest=coeffs; model prix=surface / SPEC DW R CLI; plot prix*surface p.*surface / overlay cframe=ligr; output out=sorties P=yhat R=residus; run; quit;

Questions : Pour chacune des quantits suivantes, rappeler sa signification et donner la valeur numrique partir des sorties observes : , , 2, SSM, SSE, SST, R2. Que valent les rsidus ? On estime quune observation est atypique si son rsidu studentis nest pas dans lintervalle [-2,2]. Y a-t-il des observations atypiques ?

Exercice n2 : simulation du modle linaire gaussien


On souhaite simuler un chantillon de taille N=10 du modle linaire gaussien : Yi = 2 + 1.5 X i + i , 1 i N , o les variables alatoires i sont i.i.d. de loi N(0,1), et en prenant comme valeur X i = i . Lancer lexcution du programme suivant pour N = 10 :
data simulation; do i=1 to N; X=i; Y=2 + 1.5*X + rannor(-1); output; end; run;

Quelles sont les vraies valeurs des paramtres de rgression ? Grce la proc REG de rgression linaire, donner les estimations des paramtres sur un jeu de donnes simules. Recommencer avec cinq jeux de donnes distincts. Quobserve-t-on ? Reprendre lexercice pour N = 50, 100, 250, 500, 750, 1000 . Quobserve-t-on ?
19 F.-X. Lejeune

Exercice n3 : un exemple de rgression logistique binaire


Dans lexemple suivant, nous nous proposons dtudier le lien entre la prsence (ou absence) dune maladie cardiaque coronarienne (CHD=Coronary Heart Disease) et lge au sein dun chantillon de 100 individus. Les donnes sont extraites du livre de [Hosmer D. W. & Lemeshow S. (2000) : Applied logistic regression, 2nd edition, John Wiley & Sons, New York], et les variables dtude sont les suivantes : ID : AGRP : AGE : CHD : identificateur de lindividu ; Age Group ou classe dges ; ge de lindividu en annes ; absence (0) ou prsence (1) dune maladie cardiaque coronarienne.

OPTIONS LS=64 PS=40; libname malib 'C:\Mes documents\Cours de SAS\TPSAS\datasas'; proc print data=malib.heart noobs; run; proc gplot data=malib.heart; title 'GRAPHE DE CHD PAR RAPPORT A AGE'; plot CHD*AGE; label CHD='CHD(y)' AGE='AGE(x)'; symbol1 value=dot; run; quit; proc format; value fAGRP 1='20-29' 2='30-34' 3='35-39' 4='40-44' 5='45-49' 6='50-54' 7='55-59' 8='60-69'; value fCHD 0='Absent' 1='Present'; run; proc tabulate data=malib.heart format=8.; class AGRP CHD; format AGRP fAGRP. CHD fCHD.; label AGRP='AgeGroup'; table AGRP ALL,N*(ALL CHD) / box='Frequency Table of AgeGroup by CHD' RTS=12; keylabel ALL='Total' N='Frequency'; run; proc logistic data=malib.heart; model CHD=AGE; output out=sorties predprobs=individual; run; quit; proc print data=sorties; run; proc freq data=sorties; title 'table des bien et mal classs'; table _from_*_into_ / nopercent norow nocol chisq; run;

20

F.-X. Lejeune

Exercice n4 : sur les effets nfastes du phnomne de multicolinarit en rgression logistique ordinale
Dans cet exemple, nous nous proposons dobserver linfluence de variables mtorologiques sur la qualit annuelle des vins de Bordeaux (entre 1924 et 1957). Les variables dtude de la table vins dans datasas sont les suivantes : YEAR : TEMP : SUN : HEAT : RAIN : QUALITY : anne ; somme des tempratures moyennes journalires en C ; dure dinsolation en heures ; nombre de jours de grande chaleur ; hauteur des pluies en mm ; qualit du vin 1 = bonne, 2 = moyenne, 3 = mdiocre.

En utilisant SAS/Insight, procder une tude descriptive de chacune des variables mto TEMP, SUN, HEAT, RAIN (forme des distributions, statistiques simples, box-plots, etc.). laide de la proc CORR, justifier du choix des descripteurs retenus pour prdire la qualit. Noter les signes des coefficients de corrlation reliant la variable QUALITY chacune des variables mto. Quels sont les risques probables dun modle de rgression logistique 5 descripteurs ? Observer les sorties de la proc LOGISTIC pour le modle 5 descripteurs. Les estimations des coefficients pour les variables Sun et Heat vous paraissent-elles conformes aux rsultats attendus ?

21

F.-X. Lejeune

Sance n4

Programmation en SAS (1) : macro-langage - O.D.S.

Le macro-langage, au mme titre que le SQL ou lIML (cf. sance n5), amliore les possibilits du langage de base. Il permet de passer des paramtres entre les tapes DATA et PROC, et de rendre plus rapide et plus simple lcriture des applications avec la rptition volont dune squence dinstructions. LO.D.S. (Output Delivery System) est notamment un outil trs utile pour envoyer, formater et conserver des sorties SAS dans un fichier externe (Word, par exemple).

1. Les macros
Les macro-commandes de SAS permettent denchaner lexcution de plusieurs commandes SAS au moyen dune seule instruction (qui sera appele macro) comportant, ventuellement, un ou plusieurs paramtres.

Les macro-variables
Les macro-variables sont les paramtres du macro-langage. La dclaration dune macro-variable consiste associer par la commande %let une chane de caractres un identificateur. Rle Nom Appel Cration Visualiser le contenu sert stocker du texte (jusqu 65534 caractres en V9) ; 1 32 caractres (depuis V8) ; par son nom prcd du symbole & (ex. &mvar) ; %LET < macro-variable = valeur > ; %PUT &mvar ;

Exemple 1
%let valeur = 10; %put &valeur; Le symbole & signifie le paramtre qui renvoie . Dans cet exemple, &valeur est donc le paramtre qui renvoie valeur .

Exemple 2
Considrons la table tension de la sance n3 : %let tabin = tension; %let varY = tension; %let varX = age; title "Scatter plot de &varY et &varX"; proc gplot data=&tabin; plot &varY*&varX; run; quit; /* avec " au lieu de ' */

Linstruction call symput permet de crer une macro-variables en lui affectant les valeurs dune variable dune table SAS. Cette instruction sutilise exclusivement dans une tape DATA.
22 F.-X. Lejeune

Syntaxe CALL SYMPUT('nom_macro-variable',valeur_macro_variable);

Exemple 3
data _NULL_; set tension; call symput('nobs',_N_); run; Dans cet exemple, on affecte la macro-variable nobs, les valeurs successives de la variable _N_ qui correspond au rang de lobservation lue. Au terme de ltape DATA, la macro-variable nobs contient le numro de la dernire observation, cest--dire le nombre dobservations de la table tension.

Les macro-fonctions
Les macro-fonctions sont des fonctions spcifiques au macro-langage pour manipuler des macrovariables.

Exemple 4 : %LENGTH et %SCAN


%let semaine = lundi - mardi - mercredi - jeudi - vendredi - samedi - dimanche; %let longueur = %length(&semaine); %let jour2 = %scan(&semaine,2,'-');

Dans cet exemple, la macro-variable longueur contient la longueur de la chane de caractres semaine soit 63. La macro-variable jour2 correspond ensuite au 2me mot de la chane (soit mardi). Le troisime argument indique que le sparateur est un tiret.

Exemple 5 : %EVAL
Par dfinition, une macro-variable sert stocker du texte. Par exemple, la valeur dune macro-variable laquelle on affecte 1+2 est 1+2 et non 3 . Toutefois, il est possible de forcer le compilateur macro effectuer lopration avec %eval. La macro-fonction %eval(expression) value des calculs (additions, soustractions, multiplications et divisions seulement) sur des entiers partir dexpressions contenant des macro-variables. Si la valeur value contient des dcimales, la valeur est tronque la partie entire. %let i = 22; %let j = &i/7; %let k = %eval(&i/7);

/* j contient 22/7 */ /* k contient 3 */

%let pi = &k..%eval(100*&i/7-100*&k); /* pi contient 3.14 */

Les macro-programmes
Dans les squences dun programme SAS quon ne souhaite pas rpter plusieurs fois, nous distinguons celles dont la structure ne change pas mais dont seuls quelques lments varient (ex. tables SAS, variables SAS, options de procdures). Dans ce cas, le macro-langage nous permet de dfinir larchitecture dune squence qui sera paramtre par des macro-variables et rutilisable volont. Cette architecture constitue alors le code source dun macro-programme. Par exemple, on peut aussi souhaiter que certaines procdures ne soient excutes que sous certaines conditions car autrement on en excuterait dautres En ce sens, le macro-langage est encore utile pour dfinir des variables ou excuter de manire conditionnelle des procdures. Ce langage offre donc de nouvelles possibilits trs vastes pour enrichir le langage de base.
F.-X. Lejeune

23

Une utilisation courante du macro-langage est la macro-expression qui scrit comme suit %MACRO < nom >; < texte > %MEND < nom >; o nom est une chane de caractres qui ne dpasse pas trente-deux caractres.

Exemple 6
%macro triangle; polygone trois cts %mend triangle; Le caractre % est dans SAS le symbole des macros. Dans sa premire ligne, une macro doit toujours comporter linstruction %macro suivi du nom et se termine toujours par une ligne comportant linstruction %mend ventuellement suivie du nom de la macro ( triangle est donc facultatif ici mais conseill). Cration dune macro-expression avec paramtres : %MACRO < nom_prog > (mvar1,,mvarp); < contenu de la macro > %MEND < nom_prog >; Appel de la macro : %NOM(val1,,valp); Remarque lappel de la macro, les valeurs des paramtres positionnels (des macro-variables) sont annonces aprs le nom du macro-programme entre parenthses, spares par des virgules et dans le mme ordre que les paramtres.

code source du macro-programme

Exemple 7
%macro printtab (table,varlist); proc print data = &table; var &varlist; run; %mend printtab; Considrons la table exemple de la sance n1 : %printtab(exemple,nom auto);

Bibliothque de macro-commandes
Lorsque certaines macro-commandes sont rgulirement utilises, il est pratique de pouvoir les conserver les unes la suite des autres dans un fichier muni de lextension .sas . En les ajoutant dans un fichier appel macros.sas , par exemple, il suffira ensuite dans nimporte quel programme SAS de faire lappel : %INCLUDE 'C:\Mes documents\Cours de SAS\TPSAS\macro.sas'; Remarques Les macro-variables et macro-fonctions peuvent tre utilises globalement tout au long dun programme SAS ou encore localement lintrieur dune macro.
24 F.-X. Lejeune

%GLOBAL < nom_macro >;

ou

%LOCAL < nom_macro >;

lintrieur dune macro, les instructions IF, THEN, ELSE, DO, TO, UNTIL, WHILE, END, etc. sont prcdes du symbole % . Enfin, notons que certaines macro-variables sont dj dfinies dans SAS. Par exemple, les instructions suivantes %put &sysdate; %put &sysday; %put &systime;

affichent respectivement la date, le jour et lheure dans la fentre Log.

2. Contrle des sorties SAS avec lenvironnement O.D.S.


Par dfaut, SAS prsente les rsultats dun programme sous forme de fichier texte. Le systme O.D.S. (Output Delivery System) est un outil permettant de slectionner des sorties SAS et de les rcuprer en choisissant des prsentations appropries certains logiciels tels que des diteurs de texte (Word, par exemple) ou des diteurs de graphiques (Adobe Illustrator, par exemple), etc. Le systme O.D.S. offre entre autres les prsentations suivantes : LISTING PRINTER HTML RTF PDF prsentation par dfaut avec des caractres de type mono-espace (Monaco, Courier) ; fichiers de type postscript pour les imprimantes du mme type ; fichiers en langage html pour les pages Internet ; fichiers utilisables dans un diteur de texte (Word, par exemple) ; fichiers en format pdf.

Voici un exemple de programme SAS dans lequel la mme sortie est produite en trois formats de fichiers : data note; input nom $ note @@; cards; Pierre 11 Paul 14 Carole 13 Jacques 7 ; run; ods rtf file = 'note_examen.rtf'; proc print data = note; run; ods rtf close; ods pdf file = 'note_examen.pdf'; proc print data = note; run; ods pdf close; ods printer file = 'note_examen.ps'; proc print data = note; run; ods printer close;

25

F.-X. Lejeune

Commentaires Dans ce programme, on commande dabord la production dun fichier .rtf (Rich Text File) en crivant ODS RTF; suivi du nom du fichier crer entre apostrophes. Ce fichier contient la sortie de la procdure PRINT sous la forme dun tableau. On sort ensuite de lenvironnement O.D.S. avec linstruction ODS RTF CLOSE;. Les sorties en formats .pdf (Portable Document Format) ou .ps (postscript) sobtiennent de la mme manire. Les fichiers pdf peuvent tre insrs dans un diteur de texte mais pas les fichiers postscript. Pour visualiser le fichier postscript nomm note_examen.ps , il suffit de taper dans une fentre Terminal sous Unix linstruction : gv note_examen gv pour ghostview.

On peut alors imprimer le fichier postcript avec une commande du menu File. On peut aussi convertir un fichier postscript en un fichier pdf en tapant par exemple : ps2pdf note_examen.ps note_examen.pdf Enfin, notons aussi quil est possible dinterrompre laffichage des sorties dans la fentre Output via linstruction :
ODS LISTING CLOSE;

Linstruction contraire :
ODS LISTING;

permet ensuite de rtablir laffichage. Lintrt de cette instruction est vident lorsquune mme procdure est excute un grand nombre de fois dans une boucle, notamment pour ne pas encombrer inutilement la fentre Output.

Rfrence bibliographique :

[Haworth L. E. (2001) : Output Delivery System, the basics, SAS Institute Inc., Cary, NC]

26

F.-X. Lejeune

Exercice n1
crire une macro-commande imprime paramtre par tabin, varlist et n qui affiche les n premires observations pour une liste de variables choisies dune table SAS donne. Supprimer laffichage des rangs des observations et ajouter un titre qui renseigne le jour, la date et lheure de limpression.

Exercice n2
crire une macro-commande gaussienne quatre paramtres qui gnre une table en sortie tabout qui contient n valeurs simules suivant une loi normale de moyenne mu et dcart-type sigma. Excuter cette macro en faisant varier n, mu, et sigma ; et observer la forme de la distribution associe en utilisant au choix la procdure UNIVARIATE ou SAS/Insight. Ajuster la fonction de densit thorique sur les histogrammes.

Remarque chacune des valeurs entires du seed, choisie entre 1 et 2 31 1 (= 2,147,483,647), correspond un tirage pseudo-alatoire dtermin et reproductible. Si s 0 , SAS utilise lhorloge pour initialiser le tirage et celui-ci nest alors plus reproductible lidentique.

Exercice n3
crire une macro-commande correlation qui produit la matrice des coefficients de corrlation de Pearson pour certaines variables dune table SAS. Trois paramtres : tabin la table en entre, tabout la table en sortie qui contient la matrice (utiliser loption : OUTP = < nom_tab >) et varlist pour les variables dtude. Dire comment couper les sorties dans la fentre Output. crire une macro-commande reglin qui traite de manire automatique le modle de rgression linaire dfini dans le TP3. Cette macro reoit quatre paramtres : tabin la table en entre, y_dep la variable dpendante Y, x_exp la (ou les) variable(s) descriptive(s) X et tabout la table en sortie qui contient les valeurs estimes de x1,, xp, Int et . Couper les sorties dans la fentre Output. Excuter ces deux macros sur la table htwt o height est la variable dpendante et weight la variable descriptive.

Exercice n4 : un exemple de programme en SAS : le Balanced Bootstrap*


La mthode du Balanced Bootstrap consiste rutiliser exactement le mme nombre de fois chacune des observations lors du rchantillonnage. Simple programmer, cette mthode possde de bonnes proprits statistiques. Les B chantillons balanced bootstrap peuvent tre obtenus de la manire suivante : 1. Dupliquer B fois le n-chantillon initial x = (x1, x2, , xi, , xn) pour obtenir un nouvel nBchantillon ; 2. Permutation alatoire des nB lignes de cet chantillon ; 3. Dcouper le nB-chantillon obtenu en B parties gales.
* On obtient finalement B chantillons bootstrap x* = ( x 1 , x * , ..., x * , ..., x * ) construits partir dun 2 k B rchantillonnage quilibr des observations (xi).

Proposer une macro bootstrap paramtre par tabin, la table SAS rchantillonner et nboot, le nombre dchantillons souhait afin de gnrer nboot chantillons balanced bootstrap boot_1, , boot_nboot partir de tabin. On pensera lintrieur du programme stocker le nombre dobservations de tabin dans une macro-variable nobs.
*[Davison A. C., Hinkley D. V., Schechtman E. (1986) : Efficient bootstrap simulation, Biometrika, 73, 3, p.555-566] 27 F.-X. Lejeune

Sance n5

Programmation (2) : calcul matriciel avec SAS / IML

SAS/IML est un langage de programmation interactif qui utilise le calcul matriciel. Llment fondamental dIML est donc la matrice, soit un tableau deux dimensions de valeurs numriques. Dans les expressions IML, les oprateurs sappliquent directement aux matrices. Ainsi, lexpression A+B additionne les lments de deux matrices A et B ; et plusieurs oprateurs et fonctions sont dj dfinis pour nous faciliter la tche. Par exemple, une seule ligne est suffisante pour sommer tous les lments positifs dune matrice X avec IML quand dautres langages de programmation ncessitent gnralement lutilisation de boucles. Les notations dIML sont donc plus compactes. Autre exemple : pour estimer les paramtres dun modle de rgression linaire par la mthode moindres carrs ordinaires, il suffira dcrire B=INV(X*X)*X*Y ;. On peut de plus effectuer lintrieur dIML un traitement des donnes : lire une table, crer de nouvelles variables (chaque variable tant reprsente par un vecteur), crer de nouvelles tables, etc. Notons toutefois quIML ne reconnat pas les valeurs manquantes.

1. Cration dune matrice


Laccs IML se fait dans le programme via la commande : PROC IML;. Aprs submit , la fentre Log affiche alors le message IML ready. On cre ensuite des matrices en affectant des valeurs des variables comme suit PROC IML; RESET PRINT; X=1; X={1 2 3}; X={1,2,3}; X={1 2 3,4 5 6,7 8 9}; SHOW NAMES; QUIT;

affichage automatique de toutes les matrices cres, sinon : RESET NOPRINT; matrice 1 x 1 (un scalaire) contenant la valeur 1 matrice 1 x 3 (un vecteur ligne) matrice 3 x 1 (un vecteur colonne) matrice carre 3 x 3 liste de toutes les matrices dfinies avec leurs attributs pour quitter lenvironnement IML

Commentaires Ici, la matrice X change quatre fois de dimensions et de valeurs. Les valeurs finalement contenues dans X sont alors les dernires affectes. Notons que toutes les matrices cres restent en mmoire tant quon ne quitte pas la procdure IML (avec la commande QUIT). La procdure IML doit tre considre comme nimporte quelle autre procdure SAS. Elle dbute par linstruction PROC IML et se termine par QUIT (au lieu de RUN). Nanmoins, les instructions utilises lintrieur de cette procdure rfre la programmation matricielle ce qui la singularise des autres procdures SAS.

Principaux oprateurs et commande PRINT


On peut crer une nouvelle matrice ou redfinir une matrice dj existante laide des oprateurs matriciels de base que sont + , - , * , / , etc. Y=X+1; X=X+1; cre une matrice Y partir de X en ajoutant 1 tous ses lments ractualise X sans crer une nouvelle matrice

Loprateur || permet de concatner horizontalement les valeurs de deux matrices pour former une matrice plus grande. X={1 2,3 4}; Y=X||{0,0};

Pour concatner verticalement deux matrices, on utilise le symbole // .


F.-X. Lejeune

28

Laffichage des rsultats matriciels demands se fait par le biais de la commande PRINT. On peut afficher simultanment (cte cte) plusieurs matrices en sparant les noms des matrices par des espaces. Pour afficher les matrices les unes en dessous des autres, on spare les noms des matrices par des virgules sur la commande PRINT, la virgule indiquant un saut de ligne. Avec le sparateur / , chaque matrice est affiche sur une page diffrente. Exemple 1 NOM={Pierre, Paul, Carole, Nathalie}; REVENU={35000, 24000, 27000, 31000}; DEPENSES={32500, 23000, 26500, 28000}; PRINT NOM REVENU DEPENSES; PRINT NOM, REVENU, DEPENSES; PRINT NOM / REVENU / DEPENSES; Pour modifier un lment particulier dune matrice, on utilise les crochets. REVENU[2]=REVENU[2]+3000; Cet exemple ne modifie que le deuxime lment du vecteur REVENU. Si on sait quon a fait une erreur en entrant le revenu de Paul, mais quon ne connat pas sa position dans le vecteur, on utilise la fonction LOC : POS=LOC(NOM={Paul}); REVENU[POS]=REVENU[POS]+3000; retourne le rang de Paul dans le vecteur NOM

Supposons maintenant que le premier individu soit vendeur dans un magasin et quil soit responsable des ventes de cinq articles particuliers. On possde comme informations, pour chaque article, la quantit vendue au cours du mois et son prix de vente. Exemple 2 ARTICLE={'art1','art2','art3','art4','art5'}; QUANTITE={4, 0, 2, 3, 1}; PRIX={25.12, 500.00, 110.50, 44.99, 85.00}; PRINT ARTICLE QUANTITE PRIX;

Loprateur # permet deffectuer la multiplication de deux matrices lment par lment. VENTES=QUANTITE#PRIX; Pour multiplier une matrice par un scalaire, on utilise loprateur * ou # . Les oprateurs ** et ## dsignent respectivement la fonction puissance matricielle et la fonction puissance lment par lment de la matrice :
PROC IML; X={1 2,3 4}; Y=X**2; Z=X##2; PRINT X Y Z; QUIT;

affiche

X 1 3

2 4

Y 7 15

10 22

Z 1 9

4 16

Loprateur @ est utilis pour le produit de Kronecker :


PROC IML; X={1 1,1 1}; Y={1 2,3 4}; Z=X@Y; PRINT X Y Z; QUIT; X 1 1 Y 1 3 Z 1 3 1 3

affiche

1 1

2 4

2 4 2 4

1 3 1 3

2 4 2 4

29

F.-X. Lejeune

Pour sommer les lments de la matrice VENTES, on peut utiliser la fonction SUM ou autrement loprateur + : TOTAL=SUM(VENTES); ou TOTAL=VENTES[+];

La commande PRINT semploie aussi avec les options ROWNAME= (ou R=) et/ou COLNAME= (ou C=). Les matrices spcifies aprs le signe dgalit sont de type caractre et permettent dassocier un nom chaque ligne et/ou chaque colonne de la matrice. MATRICE=QUANTITE||PRIX||VENTES; VARIABLE={QUANTITE, PRIX, VENTES}; PRINT MATRICE [R=ARTICLE C=VARIABLE]; Ici, la commande PRINT affiche MATRICE avec les lments de ARTICLE en observations et ceux de VARIABLE en variables. Loprateur >:< (resp. <:> ) permet de dterminer la position de llment minimal (resp. maximal) dune ligne ou dune colonne. POS=MATRICE[>:<,1]; puis PRINT ARTICLE[POS];

Cet exemple indique larticle qui sest le moins vendu au cours du mois en termes de quantit. SAS/IML retourne pour la premire colonne de MATRICE la position de la plus petite valeur. Loprateur pour la transposition de matrice est la fonction T ou ` . TMATRICE=T(MATRICE); ou TMATRICE=MATRICE`;

La formulation suivante permet de crer une matrice qui contient les lments de la troisime colonne de la matrice MATRICE. VENTES=MATRICE[,3];

Crer une matrice partir dune table SAS


On peut utiliser la commande READ pour lire les p variables dune table SAS et emmagasiner ces valeurs dans des vecteurs ou matrices IML. PROC IML; USE < nom_tabSAS >; READ ALL; PRINT < nom_var1 > < nom_varp >; QUIT; La commande READ utilise avec loption ALL permet de lire toutes les observations de la table nom_tabSAS. Les valeurs de chaque variable de la table sont alors reportes dans des vecteurs colonnes qui portent le mme nom que les variables de la table. Exemple 1 PROC IML; USE BILAN; READ POINT {1 3} VAR {QUANTITE VENTES} INTO M; PRINT M; QUIT;

30

F.-X. Lejeune

Dans cet exemple, la commande READ est utilise avec POINT et VAR pour restreindre la lecture de la table BILAN aux observations n1 et n3 et aux variables QUANTITE et VENTES. Les valeurs sont alors reportes dans une matrice M. Exemple 2 DATA CLASSES; INPUT NOM LANGUE COURS @@; CARDS; Marie E 1 Pierre A 2 Paul E 1 Jacques F 3 ; RUN; PROC IML; P=1:3; READ POINT P; PRINT NOM LANGUE COURS; QUIT; Dans cet exemple, on affiche les valeurs de NOM, LANGUE et COURS relatives aux rangs des observations donns par le vecteur P (i.e. les trois premires observations de la table).

Carole F Julie A

1 2

Crer une table SAS partir des valeurs de matrices IML


PROC IML;

USE CLASSES; READ ALL; CREATE CLASSES2 VAR {NOM COURS}; APPEND; CLOSE CLASSES CLASSES2;
QUIT;

On cre donc une table CLASSES2 qui contient les valeurs des matrices NOM et COURS, matrices formes partir des observations lues dans la table CLASSES pour les variables du mme nom. La prsence de lnonc APPEND est indispensable, autrement le fichier CLASSES2 serait vide. CLOSE ferme la table CLASSES ouverte pour lecture (avec USE) et ferme galement la nouvelle table quon vient de crer.

Modifier un fichier SAS


Si on souhaite modifier une valeur de la table CLASSES, on doit louvrir avec la commande EDIT, plutt quavec USE, afin de pouvoir lire et crire dans le fichier (et non tre en mode lecture seule ). PROC IML; EDIT CLASSES; COURS=2; REPLACE POINT 4 VAR{COURS}; SHOW DATASETS; CLOSE CLASSES; QUIT; Ici, on remplace (commande REPLACE) dans lobservation n4 la valeur de la variable COURS par 2. La commande SHOW DATASETS (optionnelle) indique que CLASSES est la table de lecture courante, mais galement la table de sortie courante. Dans lexemple suivant, IML lit lobservation n 2 (READ) du fichier CLASSES, modifie la valeur des variables NOM et COURS et ajoute lobservation modifie (APPEND) la fin de la table CLASSES :
31 F.-X. Lejeune

PROC IML; EDIT CLASSES; READ POINT 2; NOM="BEN"; COURS=1; APPEND; LIST ALL; CLOSE CLASSES; QUIT; Remarques Les valeurs numriques dune matrice peuvent tre positives ou ngatives, avec ou sans point dcimal ou en notation scientifique (ex. : 2E-3). Une valeur caractre est incluse entre apostrophes (ou guillemets). Lorsquune chane de caractres contient une apostrophe, celle-ci doit tre double. Un point reprsente une valeur manquante. Pour une matrice de type caractre, la longueur des lments est dtermine par la chane de caractres la plus longue. Par exemple, la longueur des lments de la matrice {Marie, Paul} vaut 5. La commande DELETE permet dliminer une ou plusieurs observations dune table SAS. Les observations qui restent dans la table gardent toutefois leur numro dorigine. Notons que les observations ne sont dtruites que pour la dure de la procdure IML. Lorsquon quitte IML, celles-ci sont encore dans la table SAS. PROC IML; EDIT CLASSES; DELETE; DELETE POINT 2; DELETE ALL WHERE (LANGUE='A'); LIST ALL; QUIT;

la deuxime observation est dtruite puis celles o la valeur de LANGUE est A affiche les observations non dtruites

nonc IF/THEN/ELSE
La forme gnrale de lnonc est IF condition THEN nonc1; ELSE nonc2;

Dans lexemple suivant, avec la fonction ANY, la condition est vrifie si au moins un lment de la matrice M est positif : Exemple
PROC IML; M={3,-4,-7};

IF ANY(M>0) THEN TEST='VRAI';


ELSE TEST='FAUX'; PRINT TEST; QUIT;

affiche

TEST VRAI

nonc DO
On peut associer plusieurs noncs une condition IF en utilisant lnonc DO : IF condition THEN DO; noncs IML END; ELSE DO; noncs IML END;
32 F.-X. Lejeune

2. Principales fonctions
Voici une liste non exhaustive des fonctions disponibles dans IML : ABS(matrice) retourne une matrice dont chaque valeur vaut la valeur absolue de llment correspondant dans la matrice argument. Mme principe avec les fonctions COS (cosinus), SIN (sinus), TAN (tangente), EXP (exponentielle), LOG (logarithme), INT (partie entire), SQRT (racine carre), etc. ; ALL(matrice) retourne la valeur 1, si tous les lments de la matrice sont non nuls, et 0 autrement ; ANY(matrice) retourne la valeur 1, si au moins un des lments de la matrice argument est non nul. Si tous les lments sont nuls, la valeur retourne est 0. Les valeurs manquantes sont traites comme des zros ; DET(matrice) calcule le dterminant dune matrice carre ; DIAG(matrice_carre) ou DIAG(vecteur) cre une matrice diagonale forme des lments diagonaux de la matrice argument si celle-ci est carre. Si largument est un vecteur, la matrice diagonale rsultante est forme des lments du vecteur ; DO(dbut,fin,pas) produit une srie arithmtique, i.e. un vecteur dont le premier lment est dbut , le dernier lment est fin et les autres lments les valeurs intermdiaires pour le pas donn ; EIGVAL(matrice_symtrique) cre un vecteur colonne contenant les valeurs propres de la matrice symtrique argument (les valeurs propres sont en ordre dcroissant) ; EIGVEC(matrice_symtrique) cre une matrice qui contient les vecteurs propres orthonorms (chaque colonne reprsente un vecteur propre) de la matrice symtrique ; HOMOGEN(matrice) rsout un systme dquations linaires homogne ; X=HOMOGEN(A); rsout le systme A*X=0 o A est une matrice de dimensions n x p

I(n) produit une matrice identit de dimensions n x n ; INV(matrice) calcule linverse dune matrice carre non singulire. GINV pour linverse gnralise ; J(n,p,valeur) cre une matrice de dimensions n x p de valeurs identiques ; MAX(matrice) ou MAX(matrice1, matrice2, ..., matriceN) produit une seule valeur numrique (ou une seule chane de caractres) qui est llment le plus grand de tous les arguments (qui est la valeur de la chane de caractres la plus leve). Idem avec MIN ; MOD(valeur, diviseur) retourne le reste de la division des lments du premier argument par les lments du second ; NCOL(matrice) retourne le nombre de colonnes de la matrice argument. NROW pour le nombre de lignes ; ROOT(matrice) donne la dcomposition de Cholesky dune matrice symtrique et dfinie non ngative ; X=ROOT(Y); X est une matrice triangulaire suprieure telle que Y=X'X

SOLVE(matrice1, matrice2) rsout un systme dquations linaires ; X=SOLVE(A,B); rsout le systme dquations : AX=B, o A est carre et non singulire, commande quivalente X=INV(A)*B
33 F.-X. Lejeune

SSQ(matrice1, matrice2, ..., matriceN) retourne une valeur simple, soit la somme des carrs de tous les lments de tous les arguments de la fonction. Largument peut compter jusqu 15 matrices ; TRACE(matrice) calcule la somme des lments diagonaux de la matrice ; VECDIAG(matrice) cre un vecteur colonne qui contient les lments diagonaux dune matrice carre. XSECT(matrice1, matrice2, ..., matriceN) retourne dans un vecteur ligne lensemble ordonn des lments prsents dans tous les arguments de la fonction.

34

F.-X. Lejeune

Exercice
Nous reprenons le modle linaire dfini la sance n3 : Y = X + . Sans utiliser les outils lis la rgression linaire disponibles dans SAS, crire avec SAS/IML une macro-commande estmco qui prend en paramtre tabin la table en entre, y_dep la variable dpendante et x_exp la (ou les) variable(s) descriptive(s) et qui gnre trois tables en sortie est contenant les estimateurs des moindres carrs ordinaires ; pred pour le vecteur des valeurs prdites de Y ; res pour le vecteur des rsidus.

Vrifier ensuite les rsultats obtenus avec ceux donns par la proc REG.

Quelques rfrences en SAS J. Confais : Polycopi de SAS ; J.-M. Azas, P. Besse, H. Cardot, V. Couallier, A. Croquette : SAS sous UNIX, Logiciel hermtique pour systme ouvert, Laboratoire de Statistique et Probabilits, Universit Paul Sabatier, Toulouse III. Ce cours de SAS est disponible en ligne ladresse suivante :
< http://www.lsp.ups-tlse.fr/Besse/pub/saspdf.pdf > ;

O. Wolber : Cours de SAS (complet) et disponible en ligne sur le site du CNAM :


< http://www.cnam.fr/maths/LEnseignement.php3?id_article=154 > ;

Egalement, Introduction SAS : < http://cedric.cnam.fr/~saporta/Cours%20SAS%20v2.pdf > ; Site de M. Le Guen : < http://matisse.univ-paris1.fr/leguen/ > ; Sminaires autour de SAS : Ateliers SAS. Runions dutilisateurs ouvertes tous la Maison des Sciences conomiques - 106-112, boulevard de lHpital 75013 Paris (M Campo Formio). Informations et ressources en ligne :
< http://matisse.univ-paris1.fr/fr/article.php3?id_article=31 > ;

Manuel en ligne : < http://wwwsas.stat.ucl.ac.be/sasdiscute/doc/tutorials.html > ; Club SAS Stat : ressources en ligne et nombreux liens vers dautres sites utiles :
< http://club-sas-stat.jeannot.org/index.html > ;

Haworth L. E. (2001) : Output Delivery System, the basics, SAS Institute Inc., Cary, NC ; Allison P. D. (1999) : Logistic regression using the SAS system : Theory and application, SAS Institute Inc., Cary, NC.

35

F.-X. Lejeune

Annexe :

Projet SAS (sujet 2005-06)

Ce projet comporte deux parties distinctes et indpendantes. Dans la Partie 1, on se propose de raliser une analyse en composantes principales sur une table SAS contenant des donnes rcupres au pralable sur internet. La Partie 2 porte sur lestimation des coefficients du modle linaire Gaussien sur la base de simulations. Une attention particulire sera porte la prsentation et la rdaction du projet qui comptera au maximum 30 pages. Le code SAS utilis et les diffrentes sorties devront imprativement figurer dans le projet. Penser aussi expliquer les moyens (code SAS, module Insight, Enterprise Guide) mis en oeuvre pour rpondre chacune des questions.

I] Analyse en composantes principales


Pour des rappels concernant lACP, on pourra se rfrer par exemple [1] Lebart L., Morineau A., Piron M. (1995) : Statistique exploratoire multidimensionnelle, Dunod ; [2] Saporta G. (2006) : Probabilits, analyse des donnes et statistique, 2e dition, Technip, Paris. Questions : 1. En vous servant dun moteur de recherche (par exemple, Google), trouver un tableau de donnes sur internet et imprimer-le sous SAS. Expliquer brivement les diffrentes tapes. 2. Appliquer la procdure PRINCOMP cette table et dcrire les sorties. 3. Donner 2 options relatives cette procdure. Quapportent-elles en plus ? 4. Produire les nuages de points dans les plans principaux engendrs par les trois premiers axes, ainsi que le cercle des corrlations.

II] Simulations du modle linaire Gaussien


Soit la relation linaire affine :

Yi = a X i + b, 1 i p,

(1)

o a et b sont valeurs relles fixes. Nous obtenons ensuite le modle linaire Gaussien en bruitant la relation (1) par une squence de variables ( i ) , 1 i p , indpendantes et identiquement distribues de loi N(0, 2 ) :
~ Yi = a X i + b + i , 1 i p. (2)

36

F.-X. Lejeune

Questions : 1. crire une macro-commande estime qui retourne une table SAS contenant des estimateurs des paramtres (a, b, ) par la mthode des moindres carrs. Pour ce faire, on simulera n ~ ~ ralisations de lchantillon (Y1 , ..., Yp ) partir de la relation (2) avec les valeurs X i = i ,
1 i p . La macro sera paramtre par a, b, p, n, s et tab, o s dsigne la valeur du seed pour initialiser un tirage pseudo-alatoire et o tab sert dfinir un nom pour la table en sortie. Indications :
lintrieur de la macro estime, on pourra distinguer 3 tapes :

~ ~ Simuler n ralisations (~1j , ..., ~ p ) , 1 j n , de lchantillon (Y1 , ..., Yp ) partir de la relation y yj (2) avec les valeurs X i = i , 1 i p ; Donner les estimateurs (a j , b j , j ) des paramtres (a, b, ) du modle (2) obtenus partir de chacune des ralisations (~1j , ..., ~ p ) par la mthode des moindres carrs ordinaires ; y yj Crer une table SAS n lignes et 3 colonnes qui contient lensemble de ces valeurs estimes. Trouver une astuce pour changer la valeur du seed entre les n ralisations ! 2. Application : tester la macro estime pour a = 5, b = 30, p = 100, n = 50, tab = coeff et une valeur de s au choix.

3. partir de la table SAS coeff, produire les histogrammes et les box-plots pour les variables a, b et , puis dcrire brivement laspect des distributions (symtrie/asymtrie, quartiles, mdianes et ventuelles observations atypiques).
4. Pour chacune des variables, donner les valeurs de la moyenne et de lcart-type, puis effectuer un test de normalit. Si lhypothse de normalit nest pas rejete, dduire un intervalle de confiance au niveau 95 %.

37

F.-X. Lejeune

Annexe :

PROJET SAS (sujet 2006-07)

Ce projet comporte deux parties distinctes et indpendantes. Il pourra se faire en binme. Une attention particulire sera porte la prsentation et la rdaction du projet (maximum 25 pages). Le code SAS et les diffrentes sorties devront imprativement apparatre. Penser aussi expliquer les moyens (procdures, module Insight, Enterprise Guide) mis en oeuvre pour traiter les questions. Remise le 26 janvier 2007 au plus tard.

I] Prsentation dune procdure SAS et application


Cette partie consiste en un apprentissage autonome dune des deux procdures CLUSTER ou PRINCOMP (au choix). Questions : 1. 2. 3. 4. Expliquer en quelques mots le principe de la procdure ; crire sa syntaxe gnrale ; Donner deux options et dire ce quelles apportent en plus ; Excuter la procdure sur un jeu de donnes de votre choix et dcrire brivement les sorties. CLUSTER : regarder comment centrer et rduire les donnes puis comment appliquer le critre dagrgation de Ward. Utiliser ensuite la procdure TREE pour reprsenter larbre de classification et proposer une partition ; PRINCOMP : produire les nuages de points relatifs aux plans engendrs par les trois premiers axes principaux (utiliser %plotit), ainsi que le cercle des corrlations.

II] Programmation
Le but de cet exercice est dapprocher numriquement la solution des quations diffrentielles stochastiques (EDS) par la mthode dEuler-Maruyama. Aucune connaissance particulire des EDS nest ici prrequise. Les dfinitions suivantes sont donc donnes titre indicatif et seront explicites au second semestre en Statistique des processus . Dfinition 1 (Processus de Wiener standard) Tout processus rel {Wt ,0 t T} qui satisfait les trois conditions 1. Pr(W0 = 0) = 1 ; 2. Accroissements indpendants i.e. pour tous 0 s t T , Wt Ws est indpendant de

{Wu , u s} ;

3. Wt Ws N(0, t s) ;

est appel processus de Wiener standard ou encore mouvement Brownien standard.


Les modles dtude sont ensuite dfinis comme suit.

Dfinition 2 (Modle de Black-Scholes - 1973) On dfinit le modle de Black-Scholes simple par lEDS
dX t =X t (m dt + dWt ) , X 0 > 0 , 0 t T , (1)

o (m, ) dsigne le couple tendance-volatilit et (Wt ) un processus de Wiener standard.


38 F.-X. Lejeune

Dfinition 3 (processus dOrnstein-Uhlenbeck, Vasicek - 1977) On appelle processus dOrnsteinUhlenbeck la solution de lEDS dX t = -(a X t + b) dt + dWt , X 0 = x 0 , (a, ) > 0 , b 0 , 0 t T , o (Wt ) est un processus de Wiener standard.
En finance, le modle de Black-Scholes et le processus dOrnstein-Uhlenbeck sont utiliss, par exemple, pour dcrire la dynamique des taux dintrt. Plus gnralement, on a recours aux EDS pour modliser des phnomnes en temps continu faisant intervenir le hasard. (2)

Mthode : Pour rsoudre (1) et (2), nous considrons dabord lintervalle de temps [0, T] et la grille de discrtisation rgulire dfinie par T = T/N et t j = j T , 0 j N . On notera alors X j une
approximation de X t j . Ainsi tant donne une ralisation simule des incrments du processus de Wiener {W1 ,..., WN } tels que Wj N(0, T ) , les valeurs de ces processus sobtiennent simplement en itrant les deux schmas suivants :

o Black-Scholes : X j = X j1 + m X j1 T + X j1 Wj , X 0 , 1 j N ; o Ornstein-Uhlenbeck : Yj = Yj1 (a Yj1 + b) T + Wj , Y0 , 1 j N . Donnes : m = 1 , a = 1 , b = 0 , = 1 , W0 = 0 , X 0 = 1 , Y0 = 0 , N = 1000 , T = 0.02 . Question 1 crire une macro oruh 8 paramtres : tabout, a, b, sigma, xzero, N, dt, s (le seed ) qui gnre une table SAS tabout avec les valeurs (i, X[i]) i = 0...N pour une ralisation simule du processus dOrnstein-Uhlenbeck, et qui produit le graphe de la trajectoire associe. Penser interpoler les points pour rtablir laspect continu du processus. Question 2 La distribution thorique du processus dO.-U. est celle dune Gaussienne de moyenne b / a et de variance 2 /(2a) . Donner les valeurs de la moyenne et de la variance pour les valeurs obtenues. Produire un histogramme sur lequel on ajustera la densit thorique. Vrifier avec un test de normalit. Conclure. Question 3 Reprendre les questions prcdentes avec une macro blsc pour le modle de BlackScholes sachant que la densit thorique correspond une loi log-normale : log X t N (m 2 /2)t, 2 t .

39

F.-X. Lejeune

Annexe :

PROJET SAS (sujet 2007-08)

Ce projet comporte deux parties distinctes et indpendantes. Il pourra tre ralis en binme. Une attention particulire sera porte la prsentation et la rdaction du projet (maximum 25 pages). Le code SAS et les diffrentes sorties devront imprativement apparatre. Penser aussi expliquer les moyens (procdures, module Insight, Enterprise Guide) mis en oeuvre pour traiter les questions. Remise le 29 fvrier 2008 au plus tard.

I] Prsentation dune procdure SAS et application


Cette partie poursuit ltude des procdures CORR et FREQ vues lors des sances de travaux pratiques. Questions : 1. Donner la syntaxe gnrale des 2 procdures et rappeler brivement leur usage ; 2. Expliquer lutilit des instructions PARTIAL dans la proc CORR et CHISQ dans la proc FREQ ; 3. Appliquer une des deux procdures au choix sur un jeu de donnes adapt pour illustrer PARTIAL ou CHISQ (selon la procdure choisie).

II] Simulations et programmation*


Le but de cet exercice est de simuler une ralisation de la solution dune quation diffrentielle stochastique (EDS) en lapproximant grce la mthode dEuler-Maruyama et en utilisant son expression exacte. Aucune connaissance particulire des EDS nest ici prrequise. Les notions suivantes sont donc introduites titre indicatif et seront explicites au second semestre en Statistique des processus . Dfinition 1 (Processus de Wiener standard) Tout processus rel {Wt , t [0, T]} qui satisfait les trois conditions 1. Pr(W0 = 0) = 1 ; 2. Accroissements indpendants i.e. pour tous 0 s t T , Wt Ws est indpendant de {Wu , u s} ; 3. Wt Ws N(0, t s) ; est appel processus de Wiener standard ou encore mouvement Brownien standard.
En finance, Vasicek (1977) a retenu le processus dOrnstein-Uhlenbeck (X t ) t 0 pour modliser lvolution dans le temps du taux dintrt instantan (x t ) t 0 : dX t = a (b - X t ) dt + dWt , X 0 = x 0 0 , (a, ) > 0 , b 0 , t [0, T] ,
t

(1)

o (Wt ) est un processus de Wiener standard. Cette EDS a une solution explicite donne par

X t = X 0 e at + b (1 e at ) + e at eas dWs ,
0

t [0, T] ,

(2)

qui va nous permettre de calculer lerreur dapproximation occasionne par le schma dEulerMaruyama.

40

F.-X. Lejeune

Mthode : Pour simuler une trajectoire du processus dOrnstein-Uhlenbeck, nous considrons dabord lintervalle de temps [0,1] (on fixe T = 1 dans tout lexercice) et la grille de discrtisation rgulire dfinie par = 1/N et t j = j , j = { ..., N}. On notera alors X j au lieu de X t j . Ainsi 1,
tant donne une ralisation simule des incrments du processus de Wiener {W1 , ..., WN } tels que Wj := N j o N j N(0,1) , les valeurs du processus sobtiennent simplement en itrant les deux schmas suivants :

o Euler-Maruyama : o Schma exact :

X j = X j1 + a (b - X j1 ) + N j , X 0 , j = 1, ..., N ; 1 e 2a Nj , 2a Y0 , j = 1, ..., N ,

(3) (4)

Yj = Yj1 e a + b (1 e a ) +

avec les mmes valeurs pour les N j , j = 1, ..., N .

Donnes : a = 0.5 , b = 5% , = 10% , X 0 = Y0 = 4% . Les valeurs de N et seront donnes dans les questions. Question 1 crire deux macros, resp. OUapprox et OUexact, 8 paramtres : tabout, a, b, sigma, xzero, N, dt, s (le seed ) qui gnrent chacune une table SAS tabout avec les valeurs (i, X[i]) i = 0...N dune ralisation simule du processus dOrnstein-Uhlenbeck suivant les deux schmas de discrtisation ci-dessus, resp. Euler-Maruyama et le schma exact. Superposer sur trois graphiques diffrents les deux trajectoires gnres pour N = 5, 20, 80 . Penser garder la mme valeur du seed pour lappel des macros. On interpolera aussi les points pour rtablir laspect continu du processus. Que remarque-t-on ?
Indication : Au rang j, on pourra gnrer une valeur de N j en utilisant, par exemple, linstruction rannor(&s+&j*&j) (linitialisation dpend alors de s et varie de manire contrle avec les valeurs de j).

Question 2 Reprendre la question prcdente en affichant cette fois les trajectoires correspondant 100 simulations moyennes des deux schmas :
Xj = 1 100 (r) Xj ; 100 r =1 Yj = 1 100 (r) Yj , 100 r =1 j = 1, ..., N , (5)

o X (r) , resp. Yj(r) dsigne la valeur simule de X j , resp. Yj , correspondant la rime rplique. j Attention, le seed est le mme pour les deux schmas mais il doit varier entre les rpliques. Donner les valeurs obtenues linstant T = 1 de X N et YN , lorsque N = 5, 20 et 80 , puis conclure.

Question 3 Produire neuf histogrammes pour les 100 valeurs gnres la question 2 des variables X N , YN et pour les erreurs dapproximation associes X N - YN , avec N = 5, 20 et 80 . Que peut-on en conclure pour la distribution du processus dOrnstein-Uhlenbeck et pour celle du processus des erreurs dapproximation ? Valider cette hypothse par un test. Question 4 Rcuprer dans trois tables SAS, les erreurs moyennes dapproximation aux instants tj :

1 j = 100

X
r =1

100

(r) j

Y j(r) ,

j = 1, ..., N .

(6)

Donner les valeurs obtenues linstant T = 1 de N , lorsque N = 5, 20 et 80 .


41 F.-X. Lejeune

Question 5 tude de lerreur moyenne globale dapproximation. On fixe N = 80 . On reprend notre tude en produisant M paquets de 100 rpliques et en calculant sur chacun de ces paquets une valeur de lerreur globale moyenne dfinie par (m) :

(m) =

1 100 80 (r, m) X j Yj(r,m) , 100 r =1 j=1

(7)

o X (r, m) , resp. Yj(r, m) dsigne la valeur simule de X j , resp. Yj , correspondant la rime rplique du j mime paquet. Ces valeurs sont indpendantes et approximativement gaussiennes pour un nombre de rpliques assez grand . On estime alors la moyenne des erreurs globales moyennes sur les paquets par

1 M (m) 1 M 1 100 80 (r, m) 1 = M m =1 100 X j Yj(r,m) r =1 j=1 M m=


2 1 M (m) 1 . M - 1 m=

(8)

et on estime la variance par

2 S =

(9)

Pour M = 20 , on admet maintenant que les (m) suivent une loi gaussienne. La statistique de Student conduit alors un intervalle de confiance de niveau 90% de la moyenne de lerreur globale moyenne dapproximation E X - Y de la forme :

2 2 t (19) S ; + t (19) S . 0.95 0.95 M M


Produire cet intervalle en prenant t 0.95 (19) 1.73 et conclure.

(10)

*daprs [Kloeden P. E. & Platen E. (1992) : Numerical solution of stochastic differential equations, 1st
edition, Springer Verlag, New York]

42

F.-X. Lejeune

Vous aimerez peut-être aussi