initiation au logiciel sasthebear45.free.fr/miage/master 1/analyse de données... ·  ·...

35
UNIVERSIT ´ E D’ORL ´ EANS UFR de Sciences Master 1` ere Ann´ ee INITIATION AU LOGICIEL SAS Didier CHAUVEAU 2010–2011

Upload: lyngoc

Post on 19-Apr-2018

217 views

Category:

Documents


4 download

TRANSCRIPT

UNIVERSITE D’ORLEANS

UFR de Sciences

Master 1ere Annee

INITIATION AU LOGICIEL SAS

Didier CHAUVEAU

2010–2011

Table des matieres

1 Generalites 2

1.1 Architecture du logiciel SAS . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

1.1.1 Structure des donnees . . . . . . . . . . . . . . . . . . . . . . . . . . 2

1.1.2 Structure d’un programme SAS . . . . . . . . . . . . . . . . . . . . . 3

1.2 Utilisation de SAS sous UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.3 Introduction au langage SAS . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.3.1 Conventions de notations syntaxiques . . . . . . . . . . . . . . . . . 4

1.3.2 Quelques regles de syntaxe fondamentales . . . . . . . . . . . . . . . 4

1.3.3 Quelques principes de base . . . . . . . . . . . . . . . . . . . . . . . 4

1.3.4 Options globales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2 Preparation des donnees :DATA STEP 6

2.1 Creation de donnees et tables SAS . . . . . . . . . . . . . . . . . . . . . . . 6

2.1.1 Table SAS et representation physique des donnees . . . . . . . . . . 6

2.1.2 Creation de reference de librairie ou de fichier SAS . . . . . . . . . . 7

2.1.3 Structures usuelles du DATA STEP . . . . . . . . . . . . . . . . . . 7

2.1.4 Exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.1.5 Raccourcis de listes de variables . . . . . . . . . . . . . . . . . . . . 9

2.2 Modification des donnees dans le DATA STEP . . . . . . . . . . . . . . . . 10

2.2.1 Creation et modification de variables . . . . . . . . . . . . . . . . . . 10

2.2.2 Selection d’observations (de lignes) . . . . . . . . . . . . . . . . . . . 10

2.2.3 Selection de variables (de colonnes) . . . . . . . . . . . . . . . . . . . 11

2.2.4 Exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.3 Manipulation de tables SAS . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2.3.1 Creation de deux tables SAS a partir d’une seule . . . . . . . . . . . 12

2.3.2 Concatenation en lignes . . . . . . . . . . . . . . . . . . . . . . . . . 12

i

TABLE DES MATIERES ii

2.3.3 Concatenation en colonnes . . . . . . . . . . . . . . . . . . . . . . . 12

3 Etape procedure : PROC STEP 14

3.1 Forme generale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.2 Quelques procedures de base . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.2.1 PRINT : mise en forme des donnees . . . . . . . . . . . . . . . . . . 15

3.2.2 SORT : tri des donnees . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.2.3 TRANSPOSE : transposition de la matrice des donnees . . . . . . . 15

3.2.4 FORMAT : recodage de facteurs qualitatifs . . . . . . . . . . . . . . 15

3.2.5 Exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

4 Module SAS/GRAPH 18

4.1 Procedure GPLOT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

4.2 Procedure GCHART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

4.3 Table d’annotations de graphiques . . . . . . . . . . . . . . . . . . . . . . . 19

4.3.1 Creation d’une table d’annotations . . . . . . . . . . . . . . . . . . 20

4.3.2 Exemple d’utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

4.3.3 Usage de la macro %plotit . . . . . . . . . . . . . . . . . . . . . . . 21

4.4 Procedure Boxplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

5 Statistiques descriptives : SAS/STAT 22

5.1 Procedure FREQ : Tables de contingence . . . . . . . . . . . . . . . . . . . 22

5.2 Procedure RANK : calcul de statistiques de rang . . . . . . . . . . . . . . . 23

5.3 Procedure MEANS : Statistiques descriptives unidimensionnelles . . . . . . 23

5.4 Procedure CORR : coefficients de correlations . . . . . . . . . . . . . . . . . 24

5.5 Procedure UNIVARIATE : Statistiques descriptives et tests . . . . . . . . . 24

6 Le macro-langage SAS 26

6.1 Generalites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

6.2 Macro-variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

6.3 Macro-commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

6.4 Pour aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

Introduction

Ce document d’initiation au logiciel de statistique SAS est destine aux etudiants deMaster (mathematiques ou autres formations) utilisant SAS pour l’analyse de donneesou les statistiques classiques. Ce document decrit essentiellement les bases du langageet les manipulations elementaires de tables de donnees. Il presente egalement quelquesprocedures statistiques descriptives elementaires, mais aucune des procedures specialiseesd’analyse de donnees ou de statistiques inferentielles, qui seront vues en detail dans lescours sur ces themes.

Ce document ne peut bien entendu se suffire a lui-meme. SAS propose une aide enligne contenant les synopsis de toutes les procedures, qui peut suffire aux utilisations lesplus courantes.

Ce texte a initialement ete redige pour une version SAS 8.2 sous LINUX, dont l’aspectpeut differer legerement des versions destinees aux machines Windows.

Petit historique

Le systeme SAS a ete concu au debut des annees 60, comme un logiciel de traitementde donnees complet (Statistical Analysis System). Il a suivi le developpement des grossystemes (IBM) sur lesquels il a ete concu, et est aujourd’hui disponible sous les envi-ronnements et systemes classiques (DEC, SUN, HP, systemes UNIX/LINUX). Il conserveencore de cet heritage certaines lourdeurs (editeur de texte peu souple) mais beneficieegalement de certains avantages tels que sa puissance, son spectre large, sa compatibiliteascendante et surtout sa capacite a traiter de tres gros volumes de donnees. Il a doncete adopte par les grandes entreprises : banques et assurance (Sofinco, Groupama, CreditLyonais,. . .) ; administrations (INSEE, Ministere du Travail. . .) ; industries (EDF, Sanofi,Phillips, Schneider,. . .). Il est donc important que l’apprentissage de SAS fasse partie ducursus des formations a finalite professionnelle.

1

Chapitre 1

Generalites

1.1 Architecture du logiciel SAS

SAS est un logiciel de statistique permettant de traiter des donnees a l’aide de pro-grammes ecrits en langage SAS. Ce logiciel est architecture en modules : un module debase sert de noyau au systeme (et doit etre present), puis des modules complementaires,specialises, sont installes suivant le choix (et les moyens) des utilisateurs.

Les modules disponibles dans une installation standard sont :

1. SAS/BASE : Le module de base. Implemente le langage SAS, l’interface, les proceduresd’entrees/sorties (E/S), les procedures de saisie/edition/gestion/impression des donnees,et quelques procedures statistiques elementaires (tri, statistiques descriptives uni-variees, representations graphiques en texte).

2. SAS/STAT : statistiques simples et avancees, parametriques (Intervalles de Confiance,tests d’hypotheses), non-parametriques ; Analyse de donnees multivariees (ACP,AFC, ACM, Classification. . .) ; Modele lineaire (Analyse de la variance, regression. . .).

3. SAS/GRAPH : traces graphiques haute resolution (nuages de points, series chrono-logiques, histogrammes, camemberts. . .).

4. SAS/ASSIST : interface de type menu/boutons qui evite l’ecriture de programmesen langage SAS ; adapte pour les taches simples

Voici quelques autres modules existants :

– SAS/ETS : etude des series chronologiques– SAS/QC : Controle de Qualite– SAS/OR : Recherche Operationnelle– SAS/CONNECT et SAS/SQL : gestion et E/S avec des bases de donnees– SAS/IML : langage matriciel (dans l’esprit de MATLAB).– . . .

1.1.1 Structure des donnees

Comme dans la plupart des logiciels de statistique, les donnees sont representees sousla forme d’un tableau individus-caracteres, matrice n× p dans laquelle :

2

D. Chauveau – Initiation SAS 3

– la ligne i contient les mesures des p variables pour le i-ieme individu ; i = 1, . . . , n– la colonne j contient les mesures des n individus pour la j-ieme variable ; j = 1, . . . , p.En analyse de donnee les variables peuvent etre qualitatives (categorielles) ou bien

quantitatives (numeriques). Pour SAS, les variables sont soit a valeur numerique (defaut)soit a valeur texte. La representation physique d’une table peut prendre plusieurs formes :un fichier texte standard (ASCII) ; une table SAS (SAS Data set) temporaire ou perma-nente sur disque ; un fichier d’une base de donnees (SQL). Ceci sera detaille au chapitre 2.

1.1.2 Structure d’un programme SAS

Un programme SAS est tout simplement une succession d’etapes (STEP) qui peuventetre de deux types :

– Etape de donnees (DATA STEP), destinee a creer, importer, ou editer une tableSAS sur laquelle portera l’analyse ;

– Etape de procedure (PROC STEP), dont l’objectif est de demander l’execution d’untravail determine par la procedure (PROC) appelee sur la table SAS active.

Les blocs DATA STEP et PROC STEP peuvent se suivre sans ordre impose, mais laregle importante est que :

la table SAS utilisee par defaut est la derniere table creee ou chargee

Un bloc prend fin soit lorsque un nouveau mot-cle DATA ou PROC est rencontre, soitlorsque l’instruction RUN est rencontree, qui termine le bloc et lance l’execution.

1.2 Utilisation de SAS sous UNIX

Plusieurs possibilites s’offrent a l’utilisateur pour l’execution des travaux sous SAS :

• Lancement en batch non interactif (pratiquement plus utilisee) :

1. preparation d’un programme dans un fichier texte (disons pgm.sas) ;

2. execution par SAS du programme ;

3. recuperation d’un fichier pgm.log contenant les erreurs et les warnings et d’un fichierpgm.out contenant le resultat. Correction eventuelle et retour en (1)

• Interactif en ligne : fonctionnement sous un interpreteur de commande SAS (com-parable au fonctionnement de MATLAB), par saisie ligne a ligne des instructions etexecutions lorsque l’interpreteur detecte une commande executable ; sorties donnees di-rectement a l’ecran.

• Interface graphique Display Manager (versions anciennes) ou SAS windowing envi-ronment (versions 7 ou plus) : C’est celle que nous utiliserons par defaut. Elle se lance sousUNIX par la commande “sas”. L’interface se compose de plusieurs fenetres superposees :

1. SAS:PROGRAM EDITOR → saisie/edition du programme

2. SAS:OUTPUT → sortie des resultats formattes en texte (ascii)

3. SAS:LOG → compte-rendu d’execution (erreurs, warnings, . . .)

4. SAS:GRAPH → sorties graphiques haute resolution.

L’interface Display Manager facilite la phase de mise au point d’un programme paressais/erreurs successifs. Le fonctionnement de cette interface, maniement des fenetres, des

D. Chauveau – Initiation SAS 4

menus, fonctionnement de l’editeur, ne sont pas detailles dans ce document. Ils sont assezstandard, sauf en ce qui concerne l’editeur de programme pour les versions anciennes.

D’autres fenetres peuvent etre presentes, suivant les versions. Par exemple, Resultsest une fenetre contenant une sorte de table des matieres des sorties (OUTPUT) dejaobtenues ; Explorer donne acces aux librairies et tables SAS existantes.

1.3 Introduction au langage SAS

Un programme SAS est compose d’instructions et doit etre execute. Ces instructions(comme dans tout langage) sont composees de mots-cles reserves, de variables dont lesnoms sont fournis par l’utilisateur et d’operateurs et autres caracteres speciaux.

1.3.1 Conventions de notations syntaxiques

Ces conventions seront utilisees dans toute la suite pour definir les synopsis des procedurestraitees. Les symboles utilises (par exemple [ ] |) ne sont pas destines a fairepartie du programme SAS, mais a formaliser les regles de fonctionnement desprocedures.

KEYWORD mot-cle SAS[option] mot-cle SAS optionnel, specifique de certaines instructions SASparametre parametre fixe par l’utilisateur[parametre] parametre optionnel, i.e. dont la presence n’est pas necessaire a l’execution... repetition eventuelle du schema qui precede (liste d’arguments ou de parametres)a|b|c choix multiple : une option a choisir parmi les options proposees (notees a, b ou c ici)

1.3.2 Quelques regles de syntaxe fondamentales

; marque la fin de toute ligne de programme* texte ; ligne de commentaire dans un programme/* texte */ commentaire dans une ligne d’un programme’texte’ delimiteur de chaıne de caractere (constante alphanumerique)-12, 1.1e-3 constantes numeriques. codage par defaut des valeurs manquantes dans un jeu de donnees

1.3.3 Quelques principes de base

– Les noms de variable commencent par une lettre ou par (underscore), et comportentau plus 8 caracteres (jusqu’a la version 6) ou au plus 32 caracteres (depuis la version7). Des raccourcis particuliers sont autorises pour faciliter l’ecriture de longues listesde variables. Par exemple, X1-X4 est vu par l’interpreteur comme X1 X2 X3 X4.

– Les majuscules ou minuscules sont equivalentes partout sauf dans les constantesalphanumeriques.

– En mode texte, les lignes d’instructions trop longues (de plus de 80 caracteres) secontinuent a la ligne suivante, sans ; de terminaison.

D. Chauveau – Initiation SAS 5

Exemple : description syntaxique d’une etape DATA simple

DATA [nom] ;[INFILE ’filename’ ;]INPUT var1 [$] ... ;[CARDS ;ligne de donneesligne de donnees...; ]

RUN ;

Ecriture de l’etape correspondante dans un programme SAS

DATA exemple ;INFILE ’/home/labo/chauveau/sasuser.800/exo’ ;INPUT nom $ poids taille age ;

RUN ;

Ou encore :

DATA exemple ;INFILE ’∼/sasuser.800/exo’ ; /* utilisation de l’alias UNIX du home directory */INPUT X1 X2 ;

RUN ;

1.3.4 Options globales

SAS dispose d’un certain nombre d’options qui affectent son comportement (alluredes sorties, allure des graphiques, utilisation de la memoire, traitement des erreurs. . .) demaniere globale. La liste des options disponibles est tres longue, et il n’est pas questionde les lister ici. On se contentera des instructions et options suivantes, tres utiles pourformater les sorties selon ses besoins.

L’instruction (globale) suivante

OPTIONS nom option [= valeur] ;

positionne une ou plusieurs options pour toutes les instructions suivantes d’un memeprogramme (jusqu’a eventuellement une autre instruction OPTIONS qui “ecrasera” la precedentedefinition). Il est donc usuel de la placer en debut de programme.

Voici quelques options utiles :

LINESIZE = n ; sorties (OUTPUT) avec n caracteres/ligne (64 ≤ n ≤ 256)PAGESIZE = n ; sorties avec n lignes/pages (15 ≤ n ≤ 32767)CENTER|NOCENTER ; centre ou justifie a gauche les sortiesDATE|NODATE ; date ou pas les pages de sorties

Chapitre 2

Preparation des donnees :DATA STEP

2.1 Creation de donnees et tables SAS

Une “etape DATA” commence en general tout programme SAS (mais ce n’est pasobligatoire). Elle a pour role de definir le jeu de donnees sur lequel les blocs d’instructionsqui suivent (de type PROC STEP) vont agir. L’etape DATA permet en particulier :

– de creer une table SAS a partir de donnees entrees directement dans le code sourcede l’etape ;

– de creer une table SAS a partir d’un fichier texte present sur un disque ;– de construire une table SAS a partir d’autres tables SAS deja creees et presentes sur

un disque ;– de creer une table SAS a partir d’une autre table SAS par instructions de calculs

et/ou selection de variables ;– de creer un fichier texte ASCII a partir d’une table SAS ;– de creer une table SAS par importation a partir d’une base de donnees externe ;– de creer une table SAS contenant des simulations pseudo-aleatoires de variables de

lois classiques.

2.1.1 Table SAS et representation physique des donnees

Une table SAS est une representation interne au programme d’un tableau de donneesindividus-caracteres. Ceci signifie notamment que le fichier correspondant n’est pas auformat texte (ASCII) standard, mais dans un format (binaire) illisible pour un editeurclassique. L’avantage est que ce format est compresse, qu’il inclut avec les donnees deselements utiles pour SAS (type des variables, date de creation. . .), et que ces tables SAS,une fois creees, se chargent plus rapidement que les fichiers textes correspondants (ceciest sensible pour de gros volumes de donnees). Il existe deux type de tables : les tablesSAS temporaires, qui n’existent que pour la duree de la session en cours, et les tablesSAS permanentes, associees a une representation physique sur disque et qui sont doncconservees pour un usage ulterieur. Il est d’usage de definir comme temporaires toutes lestables intermediaires que peut necessiter une analyse sophistiquee.

6

D. Chauveau – Initiation SAS 7

Dans un programme SAS, une table SAS est definie dans le DATA STEP par un nominterne qui suit le mot-cle DATA, et qui peut prendre deux formes :

DATA table ; creation d’une table SAS temporaireDATA librairie.table ; creation d’une table SAS permanente

Si la table est permanente, un fichier UNIX avec un nom de la forme table.ssd01 (version6) ou table.sas7bdat (version 8) sera automatiquement cree dans l’arborescence d’ou aete lance SAS. Le nom de librairie doit etre auparavant lie a un nom de repertoire UNIXpar le mecanisme decrit ci-dessous.

2.1.2 Creation de reference de librairie ou de fichier SAS

Ces references sont equivalents a des liens assurant la correspondance entre des nomsinternes aux programmes SAS (noms de fichiers texte, noms de librairies ou repertoires),et les formes que peuvent prendre ces noms pour le systeme d’exploitation de la machinesur laquelle on travaille (UNIX ici). Ces liens facilitent le portage des programmes SASsur differents systemes.

LIBNAME reference librairie ’nom de repertoire UNIX’ ;FILENAME reference fichier ’nom de fichier UNIX’ ;

Une reference de librairie par defaut est creee au lancement du systeme : il s’agit dunom interne SASUSER qui pointe sur le repertoire UNIX sasuser.800 (version 8) dansle home directory de l’utilisateur (voir l’Annexe concernant UNIX). Ce repertoire estautomatiquement cree par SAS au premier lancement et a donc comme nom UNIX“∼utilisateur/sasuser.800”, ou utilisateur est le nom de l’utilisateur. Un raccourciUNIX encore plus simple pour ce repertoire est “∼/sasuser.800”. Il est donc toujourspossible (et conseille) de creer une table SAS permanente avec un DATA STEP com-mencant par une instruction du type :

DATA SASUSER.matable ;

qui ecrira un fichier binaire de la forme :∼utilisateur/sasuser.800/matable.ssd01 sur le disque.

2.1.3 Structures usuelles du DATA STEP

Les formats attendus par SAS pour lire les donnees sont tres varies, et doivent etreprecises dans l’etape DATA. Un format simplifie existe et est employe par defaut. Ilutilise les conventions suivantes pour lire une table individus-caracteres :

– valeurs dans chaque ligne separees par au moins un espace– lignes separees par un retour chariot– variables alphanumeriques de 8 caracteres au plus– valeurs manquantes representees par “.”– valeurs numeriques en notation decimale standard.

Voici quelques descriptions syntaxiques de DATA STEP pour les taches les plus clas-siques.

D. Chauveau – Initiation SAS 8

Creation d’une table SAS par ecriture directe des donnees dans le programme

DATA [nom de table] ;INPUT var [$] [n-m] . . . ;[instructions de calculs et/ou selection ;]CARDS ;lignes de donnees. . .;

RUN ;

Creation d’une table SAS par lecture d’un fichier ASCII

FILENAME reference fichier ’nom fichier UNIX’ ;DATA [nom de table] ;

INFILE reference fichier ;INPUT var [$] [n-m] . . . ;[instructions de calculs et/ou selection ;]

RUN ;

Creation d’une table SAS a partir d’une autre table SAS

DATA [nom de table] ;SET nom de table ;[KEEP var . . . | DROP var . . . ] ; variables de la table a garder ou a exclure[instructions de calculs et/ou selection ;]

RUN ;

Creation d’un fichier ASCII a partir d’une table SAS

Cette etape DATA creee le fichier texte reference fichier sans creation de table SAS :

DATA NULL ;FILE reference fichier ;SET nom de table ;[instructions de calculs et/ou selection ;]PUT var . . . ;

RUN ;

2.1.4 Exemples

DATA exemple ;INFILE ’/home/labo/chauveau/sasuser.800/exo’ ;INPUT nom $ poids taille age ;

RUN ;

FILENAME f ’/home/labo/chauveau/sasuser.800/exo’ ;

D. Chauveau – Initiation SAS 9

DATA exemple ;INFILE f ;INPUT nom $ poids taille age ;

RUN ;

FILENAME f ’/home/labo/chauveau/sasuser.800/donnees’ ;DATA sasuser.donnees ;

INFILE f ;INPUT X1 11-25 X2 26-40 X3 41-52 ;

RUN ;

LIBNAME malib ’/home/labo/chauveau/libperso’ ;FILENAME f ’/home/labo/chauveau/sasuser.800/donnees’ ;DATA malib.exo ;

INFILE f ;INPUT X1 11-25 X2 26-40 X3 41-52 ;

RUN ;

LIBNAME malib ’/home/labo/chauveau/libperso’ ;DATA malib.exo2 ;

SET mylib.exo ;DROP X1 ; n= N ;

RUN ;

2.1.5 Raccourcis de listes de variables

Dans des problemes de taille reelle, il y a souvent un grand nombre de variables. LasyntaxeINPUT var... ;est alors peu pratique. Plusieurs methodes permettent des ecritures plus concises. En voicideux :

Liste implicite : l’instruction

INPUT nom var1- nom varn ;est equivalente a la liste des variables de nom commun nom var et numerotees de 1 a n ;par exemple

DATA exemple ;INFILE f ;INPUT X1-X4 ; equivalent a INPUT X1 X2 X3 X4 ;

RUN ;

Liste de variables definie par debut et fin : l’instruction

INPUT var1 -- var2 ;est equivalente a la liste des variables dans une table SAS comprises entre var1 et var2 ;par exemple

D. Chauveau – Initiation SAS 10

DATA exemple ;SET table ;KEEP age -- poids ; liste des var. comprises entre age et poids

RUN ;

Ces raccourcis peuvent s’utiliser aussi bien dans les etapes DATA que ensuite dans leslistes de variables (VAR var... ;) des etapes PROC (voir chapitre 3).

2.2 Modification des donnees dans le DATA STEP

2.2.1 Creation et modification de variables

De nouvelles variables sont creees directement lors de l’etape DATA par des instruc-tions, directes ou conditionnelles, de la forme

nouvelle variable = expression ;IF condition THEN nouvelle variable = expression ; [ELSE ... ;]

De meme, des variables existantes peuvent etre modifiees par des instructions de la forme

variable existante = expression ;IF condition THEN variable existante = expression ; [ELSE ... ;]

Ou expression represente des instructions de calcul analogues a celles que l’on trouve danstout langage, et se compose des elements suivants :

– des variables existantes (deja presentes dans la table SAS, ou definies par INPUT) ;– les operations standards +, -, *, / et ** (exponentiation) ;– des fonctions mathematiques usuelles comme SQRT(), COS(), LOG(). . .(voir liste des

fonctions SAS) ;

Il est egalement possible de renommer des variables dans une etape DATA, a l’aide del’instruction

RENAME ancienne var = nouvelle var ;

Il faut bien comprendre que ces instructions agissent automatiquement sur toutes lesobservations (lignes) du tableau de donnees : un DATA STEP execute implicitement uneboucle sur les lignes du tableau de donnees en entree (table SAS ou fichier texte). Pourchaque ligne (observation) de la table d’entree, il execute en sequences toutes les instruc-tions du DATA STEP, et ainsi de suite jusqu’a la derniere ligne.

2.2.2 Selection d’observations (de lignes)

La selection se fait en testant des conditions que doivent remplir les observations pouretre selectionnees ou eliminees de la table SAS construite par l’etape DATA. Les conditionssont construites a partir des operateurs de comparaison usuels (ou leur equivalent en formeabregee), et des operateurs logiques :

D. Chauveau – Initiation SAS 11

< LT less than<= LE less than or equal to> GT greater than>= GE greater than or equal to= EQ equal^ NE not equal& AND operateur logique ET! OR operateur logique OU

Les instructions de selection des observations peuvent utiliser les constructions suivantes :

IF condition ; conserve les observations pour lesquelles condition est vraieIF condition THEN DELETE ; supprime les observations pour lesquelles condition est vraieIF condition THEN expression | DELETE ; [ELSE expression ;]

Dans cette derniere forme, expression represente une modification/creation de variable.Des constructions plus complete, a l’aide de blocs d’instructions, sont aussi possibles :

IF condition THEN DO instruction ;...instruction ; END ;ELSE IF condition THEN DO instruction ;...instruction ; END ;

2.2.3 Selection de variables (de colonnes)

La syntaxe est simplement :

KEEP variable . . . ; liste des variables a garderDROP variable . . . ; liste des variables a exclure

2.2.4 Exemples

• Creation d’une table SAS permanente par lecture d’un fichier texte et creation/modificationde variables.

LIBNAME mylib ’/home/labo/didier/pgmsas’ ;FILENAME f ’/home/labo/didier/sasuser.800/exemple’ ;

DATA mylib.exo1 ; table exo1 permanente car librairie specifieeINFILE f ;INPUT X1 X2 X3 ; (X1, X2, X3) sont les variables existantesZ = LOG(X1) ; creation d’une nouvelle variable ZIF X2 > 10 THEN DELETE ; suppression d’observationsIF X3 LT 30 AND X1 LT 10 THEN F = ’A’ ; creation d’une variable F (facteur)

RUN ;

D. Chauveau – Initiation SAS 12

• Modification des variables et des observations d’une table SAS existante

DATA mylib.exo2 ; creation d’une table permanente exo2SET mylib.exo1 ; rappel d’une table SAS creee precedemmentIF Z > 0.2 ; selection des observations {i : Zi > 0.2}DROP X1 ; suppression de la variable X1

RUN ;

2.3 Manipulation de tables SAS

Il est egalement possible, au niveau de l’etape DATA, “d’eclater” ou de “concatener”des tables SAS. Les types de concatenation (en ligne ou en colonnes) dependent des tablesSAS en presence. Il est par exemple logique de souhaiter concatener “en ligne” deux tablescomposees des memes variables, sur des individus differents. De meme, on peut concatener“en colonne” deux tables relatives aux memes individus, mais dont les mesures portentsur des variables differentes.

2.3.1 Creation de deux tables SAS a partir d’une seule

On peut utiliser une condition afin d’eclater une table selon un critere portant sur lesindividus :

DATA table1 table2 ; tables creeesSET table ; table sourceIF X = 1 THEN OUTPUT table1 ; la ligne va dans table1IF X = 2 THEN OUTPUT table2 ; la ligne va dans table2

RUN ;

2.3.2 Concatenation en lignes

Si l’on dispose de deux tables SAS contenant les meme variables, la table contenantles individus des deux premieres reunis se construit par :

DATA table3 ; table creeeSET table1 table2 ; tables source

RUN ;

2.3.3 Concatenation en colonnes

Il est possible de creeer une table SAS contenant les variables de deux autres tables,portant sur les meme individus reperes par une variable commune :

D. Chauveau – Initiation SAS 13

DATA table3 ; table creeeMERGE table1 table2 ; tables comportant la variable commune CBY C ;

RUN ;

L’utilisation de BY necessite que les tables source soient au prealable triees par laprocedure SORT (voir chapitre suivant). De plus, si certains individus n’apparaissent quedans l’une des tables source, leur valeurs pour les variables de l’autre table seront man-quantes (i.e. codees par le .). Par exemple, si les contenus des tables SAS source sont :

Table1 Table2C X C Y1 10 1 1252 15 2 1123 214 14

alors la table resultante sera :

Table3C X Y1 10 1252 15 1123 21 .4 14 .

Chapitre 3

Etape procedure : PROC STEP

Ce chapitre donne le synopsis general d’une etape procedure, et detaille quelquesprocedures d’utilisation courante. Les procedures sont donnees ici sont leur forme la plususuelle ; d’autres options sont souvent disponibles.

3.1 Forme generale

Voici la syntaxe generique d’une etape de type PROC. Ceci signifie que toute etapePROC peut employer au moins ces mots-cle.

PROC proc name [DATA=Sas dataset] [OUT=Sas dataset] [options] ;selection des tables en entree/sortieet des options specifiques a la procedure

[VAR var . . . ;] selection des variables a traiter[WHERE condition . . . ;] selection des observations a traiter

[BY var . . . ;] traitement par groupes determines par var

[keyword/options ;] instructions specifiques a la procedure

[TITLEn ’texte’ ;] nieme ligne de titre apparaissant en tete dela fenetre ou du fichier OUTPUT (1 ≤ n ≤ 10)

[FOOTNOTEn ’texte’ ;] nieme note de bas de page apparaissant en bas dela fenetre ou du fichier OUTPUT (1 ≤ n ≤ 10)

RUN ;

Il faut bien comprendre que les options VAR et WHERE a ce niveau determinent lesdonnees (variables et observations) sur lesquelles va agir la procedure. Elles ne modifienten aucune facon la table SAS d’entree : les modifications de tables SAS sont devolues auxblocs de type DATA. L’option BY effectue le travail demande par la procedure separementpour chaque sous-population reperee par les modalites de la ou des variables specifiees.

14

D. Chauveau – Initiation SAS 15

Attention, la table SAS d’entree doit auparavant avoir ete triee par la procedure SORTselon ces meme variables.

3.2 Quelques procedures de base

3.2.1 PRINT : mise en forme des donnees

PROC PRINT [DATA=Sas dataset] ;[VAR var . . . ;] selection de variables pour la procedure[WHERE condition . . . ;] selection d’observations pour la procedure[BY var . . . ;] traitement par groupes

RUN ;

3.2.2 SORT : tri des donnees

PROC SORT [DATA=Sas dataset] [OUT=Sas dataset] ;BY [DESCENDING] var . . . ; criteres de tri, tri croissant par defaut

RUN ;

3.2.3 TRANSPOSE : transposition de la matrice des donnees

PROC TRANSPOSE [DATA=Sas dataset] [OUT=Sas dataset] options ;[VAR var . . . ;] variables a transposer (var numeriques par defaut)[BY var . . . ;] transposition par blocs

RUN ;

ou options est a choisir dans :

NAME=var LABEL=varvariable contenant les noms ou labels de la table d’entree

3.2.4 FORMAT : recodage de facteurs qualitatifs

Dans les gros jeux de donnees issus de sondages normalises (ex, INSEE), les modalitesde variables qualitatives (facteurs) sont souvent codees par des entiers 1, 2, ..., k cequi est peu parlant. Il est frequent d’avoir a recoder ces modalites pour en rendre la lectureou les representations plus intuitives, notamment lorsqu’il s’agit ensuite de projeter cesmodalites sur des plans factoriels lors d’analyses multivariees (AFC, ACM,. . .).

Ce recodage peut se faire dans l’etape DATA a l’aide des instructions IF ... THEN ...deja vues (cf. 2.2), mais ce n’est pas tres pratique. La procedure FORMAT permet de simpli-fier le processus de recodage, en definissant des formats qui precisent les correspondancesentre modalites du codage initial (numerique ou texte) et modalites recodees (texte). Cesformats sont ensuite associes aux variables a recoder lors d’une etape DATA.

D. Chauveau – Initiation SAS 16

Definition de formats

PROC FORMAT ;VALUE [$]nom format valeur 1 = ’nom modalite 1’ definition d’un format

valeur 2 = ’nom modalite 2’ modalites a recoder...valeur k = ’nom modalite k’ ; fin de definition du format

RUN ;

Usage dans l’etape DATA

DATA nom ;INFILE ’...’ ;INPUT nom var[$] ... ;FORMAT nom var [$]nom format. affectation d’une format a un facteur[...] affectation d’autres formats;

RUN ;

3.2.5 Exemples

Sorties formatees dans la fenetre OUTPUT

PROC PRINT ; affiche entierement la derniere table SAS creeeRUN ;

PROC PRINT DATA = mydata ; affiche la table SAS mydataTITLE ’Etude’ ; (TITLE ⇔ TITLE1)FOOTNOTE3 ; supprime une definition precedente

RUN ;

PROC PRINT DATA = mydata ;VAR X1 X4 ; affiche 2 variables de la tableWHERE X2 = ’a’ AND X1 > 10 ; pour les observations satisfaisant le critere

RUN ;

Tri de tables SAS

PROC SORT DATA = mydata OUT = mysort ; on precise la table de sortieBY X2 ; tri a une cle : X2

RUN ;PROC PRINT DATA = mysort ; affiche les donnees par groupes, possible

BY X2 ; car les donnees ont deja ete triees par SORTRUN ;

D. Chauveau – Initiation SAS 17

Usage de FORMAT

PROC FORMAT;VALUE Fsexe 1 = ’Homme’

2 = ’Femme’ ;RUN;

DATA table;INPUT sexe;FORMAT sexe Fsexe. ;

RUN;

Chapitre 4

Module SAS/GRAPH

Ce chapitre donne les syntaxes des procedures de trace graphiques les plus courantes,utiles pour les cours de statistique et d’analyse de donnees.

4.1 Procedure GPLOT

Cette procedure est destinee au trace des nuages de points et des series temporelles.

PROC GPLOT [DATA=nom de table] ;PLOT var y*var x[=n] . . . [/options...] ; trace un graphe par couple (x, y), d’attributs

donnes par le numero referant a SYMBOLn

[SYMBOLn C=couleur I=NONE|JOIN V=POINT|PLUS|STAR|DIAMOND|DOT|CIRCLE|NONE ;]couleur, points lies ou non, type de point

[AXISm LABEL=NONE|(’texte’) ORDER=(x1, . . . , xn | x1 TO x2 BY x3) ; ...]definition de nom et d’attributs d’axe

[BY variable ;]

Les options de PLOT sont a choisir parmi, entre autre :

NAME=nom donne un nom au grapheOVERLAY superpose les graphiquesFRAME cadre autour du grapheHAXIS=AXISm definition de l’axe des abscissesVAXIS=AXISm definition de l’axe des ordonneesHREF= x valeur de croisement des axes en abscisseVREF= y valeur de croisement des axes en ordonneeANNOTATE = nom de table table d’annotation (voir §4.3)

Dans la directive SYMBOL la liste des couleurs usuelles, en anglais, est utilisable. L’utilisationdu symbole de point V=NONE ne produit aucun point, ce qui est souvent preferable lorsqu’ondefinit une table d’annotation (§4.3).

18

D. Chauveau – Initiation SAS 19

4.2 Procedure GCHART

Il existe de nombreuses manieres de realiser des histogrammes ou diagrammes assimilessous SAS. Voici la syntaxe simplifiee de la procedure principale pour cela.

PROC GCHART [DATA=nom de table] ;VBAR|HBAR|PIE|VBAR3D var. . . [/options] ; histogrammes, camembert. . .[BY variable ;]

Les options de HBAR, VBAR, PIE sont a choisir parmi, entre autre :

NAME=nom donne un nom au grapheMISSING manquants traitees comme une classeDISCRETE var. numerique, une classe par valeurMIDPOINTS=(x1, . . . , xn | x1 TO x2 BY x3) definit les centres des classes (cf ORDER)SUMVAR=var statistique calculee a partir de varTYPE=FREQ|CFREQ|PCT|CPCT|SUM|MEAN statistique representee

(SUM et MEAN uniquement si SUMVAR present)GROUP=var variable de subdivision des donnees en groupe

(a la difference de l’instruction BYvar,les histogrammes sont representessur le meme graphique)

SUBGROUP=var histogramme avec profils de var

Les histogrammes de profils sont une maniere de representer les lois conditionnelles d’unetable de contingence.

Il est possible d’imposer les motifs de remplissages successifs des histogrammes generes,a l’aide d’instructions (globales)

PATTERNn C=couleur VALUE=EMPTY|SOLID|X1|... ;

4.3 Table d’annotations de graphiques

Une table d’annotations (annotate data set) est une table SAS contenant la descriptiond’un ensemble d’elements graphiques (textes, etiquettes, figures geometriques simples. . .)destines a se superposer au graphique obtenu a l’aide d’une procedure de SAS/GRAPH(telle que GPLOT). Par exemple, on peut ainsi placer des etiquettes afin de renseigner lesbarres d’un histogramme. L’une des applications la plus utile (en analyse de donnees) estl’ajout, sur les traces de plans factoriels en ACP (donc de nuages de points), de libellesexplicites des individus, ou encore l’ajout sur les traces de cercles de correlation des nomsdes variables statistiques.

D. Chauveau – Initiation SAS 20

4.3.1 Creation d’une table d’annotations

Une table d’annotations est definie lors d’une etape DATA, comme une table SASclassique. Chaque ligne (“individu”, ou “observation”) de cette table est la requete derealisation d’un element graphique. Les variables (“caracteres”) de cette table ont des nomspredefinis, et prennent pour certaines des valeurs predefinies egalement. Voici quelques-unes de ces variables les plus usuelles pour le placement de textes. Les variables marqueesd’une ? prennent des valeurs predefinies.

DATA nom de table ;[ SET nom de table ;] requis si on ajoute des elements graphiques aux

sorties d’une autre procedure de SAS/GRAPHX = var ; positionnement en abscisse de l’element graphiqueY = var ; positionnement en ordonnee[ Z = var ; ] positionnement en Z (procedures 3D uniquement)XSYS = ’n’ ; systeme de coordonnees en abscisse ?YSYS = ’n’ ; systeme de coordonnees en ordonnees ?[ ZSYS = ’n’ ; ] systeme de coordonnees en Z (pour 3D) ?[ COLOR = ’couleur’ ; ] couleur de l’element graphique ?[ TEXT = var|’texte’ ; ] variable contenant le texte a placer, ou explicite[ SIZE = s ; ] hauteur des caracteres (pour du texte)[ POSITION = ’m’ ; ] placement du texte (ferre a gauche, centre. . .)[ STYLE = ’font name’ ; ] police de caractere ? (ex. swissb)

Pour les variables XSYS, YSYS, ZSYS, les valeurs de n sont imperativement a choisir dans{1, . . . , 6} (cf Doc SAS, Chap. 18). Le reglage conseille estXSYS = ’2’ ; YSYS = ’2’ ;

4.3.2 Exemple d’utilisation

DATA nuage ; creation d’une table SAS,INFILE fichier ; par lecture d’un fichier ASCII declare auparavant,INPUT X1 Y1 Noms$ ; a 3 variables : noms et coordonnees (x, y)

RUN ;

DATA anno ; creation de la table d’annotationSET nuage ;X = X1 ; variable contenant les coordonnees en XY = Y1 ; variable contenant les coordonnees en YXSYS = ’2’ ; unites absolues.YSYS = ’2’ ;TEXT = Noms ; variable contenant les textes a placerSIZE = 0.8 ; taille a ajuster pour eviter les chevauchementsLABEL X = ’axe x’ ;LABEL Y = ’axe y’ ;

RUN ;

D. Chauveau – Initiation SAS 21

PROC GPLOT DATA=nuage ; creation du graphiquePLOT Y1*X1 / ANNOTATE = anno ; trace du nuage de points avec annotations

RUN ;

4.3.3 Usage de la macro %plotit

Le langage SAS dans ses versions recentes defini quelques macros qui rendent le lan-gage plus convivial. Par exemple l’affichage du graphique de (X,Y) avec Noms d’individusprecedent peut egalement etre obtenu par l’instruction

%plotit(data=nuage, labelvar=Noms, plotvars=X Y) ;

Pour plus d’information sur les macros, voir le chapitre 6.

4.4 Procedure Boxplot

Depuis la version 8, SAS/GRAPH permet de realiser des Box Plots (ou graphiques“boıtes et moustaches” ou encore Box & Whiskers). En voici une description breve :

PROC BOXPLOT [DATA=nom de table] ;PLOT var*facteur [ /options] ; boxplots de la variable par modalites du facteur[BY variable ;]

Noter que la table doit avoir ete au prealable triee selon le facteur (comme pour l’usagedes procedures avec BY). L’option boxconnect = mean permet de representer sur le memegrahique la courbe d’evolution des moyennes.

Autres procedures graphiques Il existe bien entendu d’autres procedures graphiqueset d’autres manieres de resumer graphiquement des donnees. Par exemple, les radar plotssont une autre maniere de representer des statistiques suivant plusieurs variables quanti-tatives ou qualitatives. Sous SAS, la procedure GRADAR trace ce type de graphiques (voirla documentation SAS).

Chapitre 5

Statistiques descriptives :SAS/STAT

Ce chapitre presente quelques procedures de statistiques descriptives elementairesissues des modules Base/SAS et SAS/STAT. On consultera par exemple [?] pour desreferences sur les aspects statistiques.

5.1 Procedure FREQ : Tables de contingence

PROC FREQ [DATA=nom de table] ;TABLES requete [/options] ; demande de table(s)[BY var . . . ;] variable(s) de groupement[WEIGHT var ;] variable de ponderation des observations

ou requete specifie les variables a traiter, de la forme :

V table de frequence de la variable V a 1 facteurV1*V2 [. . .] table(s) de contingence a 2 facteursV1 ∗ V2 ∗ · · · ∗ Vn table de contingence a n facteursV1*(V2 V3) [. . .] equivalent a V1*V2 V1*V3

V1--Vn equivalent a V1 V2 · · ·Vn (n tables a 1 facteur)

Les options de TABLES precisent les statistiques desirees, par exemple :

CHISQ tests du χ2 d’independance si plus d’1 variableMEASURES mesures d’associations (e.g. correlation)MISSING traite les manquants comme une classeDEVIATION ecart de chaque cellule/a la frequence moyenneNOCOL NOROW NOCUM NOFREQ NOPERCENT supprime en sortie les % col. ou ligne, cumules. . .NOPRINT ne produit que les resultats de CHISQ, MEASURES

22

D. Chauveau – Initiation SAS 23

5.2 Procedure RANK : calcul de statistiques de rang

On rappelle que a un echantillon (X1, . . . , Xn) d’une loi F sur R, on fait correspondrele vecteur des rangs (R1, . . . , Rn), defini par

Ri = 1 +n∑j=1

I]−∞,Xi[(Xj), 1 ≤ i ≤ n.

Cette statistique est utilisee par de nombreux tests non parametriques.

PROC RANK [DATA=nom de table] [OUT=nom de table] [options] ;VAR variable. . . ; variable(s) numeriques a traiter[RANKS nouvelle variable. . . ;] noms des variables contenant les rangs[BY var . . . ;] variable(s) de groupement

Les options de PROC RANK precisent la methode de calcul de rang a appliquer, et le traite-ment des ex-aequo :

FRACTION calcul les rangs fractionnels Fi = Ri/nGROUPS=p groupement suivant les quantile d’ordre p

ex : si p = 4, affecte a chaque observation lenumero du quartile dans lequel elle se situe

NORMAL=BLOM|TUKEY|VW approximations des statistiques d’ordresous hypothese gaussienne

TIES=MEAN|HIGH|LOW rang des ex-aequo (MEAN par defaut)

5.3 Procedure MEANS : Statistiques descriptives unidimen-sionnelles

PROC MEANS [DATA=nom de table] [options] ;[VAR var . . . ;] variable(s) a traiter[BY var . . . ;] variable(s) de groupement[FREQ var ;] ponderation par l’effectif des observations[WEIGHT var ;] variable de ponderation des observations[OUTPUT OUT=table statistique=var [. . .]] sauve les statistiques demandees dans une table

Dans la directive OUTPUT OUT, statistique est un mot-cle precisant la statistique voulue,selon la meme syntaxe que celle decrite dans options ci-dessous. Pour chaque statistique,var. . . est une liste de noms de variables qui, dans le fichier de sortie, contiendront chacunecette statistique pour chaque variable traitee par la procedure.

options specifie les statistiques demandees. Pour (X1, . . . , Xn) i.i.d. de loi F (µ, σ2), on a

N NMISS nombre d’observations, de manquantsMIN MAX RANGE minimum, maximum, etendueMEAN VAR STD CV estimateurs X, S2, s =

√S2, s/X

D. Chauveau – Initiation SAS 24

SKEWNESS asymetrie, estimateur de γ3 = E(X−µ)3

σ3

KURTOSIS aplatissement, estimateur de γ4 = E(X−µ)4

σ4 − 3T test de student de H0 : “µ = 0”, t =

√nXs

PRT PH0(T > |t|), probabilite de rejeter a tort

options sert egalement a preciser les sorties :

MISSING traite les manquants comme une modaliteNOPRINT supprime la sortie dans la fenetre OUTPUT

5.4 Procedure CORR : coefficients de correlations

PROC CORR [options] ;[VAR var . . . ;] variable(s) a traiter[WITH var . . . ;] variables a croiser avec celles de VAR[BY var . . . ;] variable(s) de groupement[FREQ var ;] ponderation par l’effectif des observations[WEIGHT var ;] variable de ponderation des observations

options dans PROC CORR specifie notamment les entrees/sorties et les statistiques de-mandees.

Options relatives aux tables SAS :

DATA=nom de table table SAS d’entreeOUTP=nom de table table SAS contenant les correlations de Pearson

et quelques statistiques descriptives (X, S2 . . .)OUTK=nom de table OUTS=nom de table idem pour les correlations de Kendall et Spearman

Options de demande de types de correlation :

PEARSON SPEARMAN KENDALL correlations de Pearson, Spearman, KendallCOV donne la matrice de covariancesVARDEF=DF|N|WDF|WGT precise le diviseur dans les calculs de variances

au choix : n− 1, n, (∑

iWi)− 1,∑

iWi

Options diverses :

NOPRINT supprime l’affichage (OUTPUT)NOMISS supprime les observations avec manquantsRANK classe les coefficients pour chaque variable

5.5 Procedure UNIVARIATE : Statistiques descriptives ettests

Semblable a la procedure MEANS, mais plus complete. A la difference de MEANS, il n’estpas necessaire de demander les statistiques desirees, toutes sont affichees par defaut. Seuls

D. Chauveau – Initiation SAS 25

les mots-cles, statistiques et options propres a UNIVARIATE sont precisees ici. Les mots-cles servent a definir les tables SAS en sortie, a l’aide d’une instruction OUTPUT OUT=tablestatistique=var [. . .] (voir MEANS).

PROC UNIVARIATE [DATA=nom de table] [options] ;

options a preciser parmi :

PLOT donne histogramme, box & whiskers, normal plotNORMAL calcule un test de normaliteVARDEF=DF|N|WDF|WGT diviseur (voir CORR)FREQ tables de frequence a une voie

Les statistiques supplementaires et leurs mots-cles sont (pour (X1, . . . , Xn) i.i.d. de loiF (µ, σ2)) :

MODE STDMEAN mode, s/√n

Q1 Q3 QRANGE percentiles de 25%, 75% et Q1-Q3P1 P5 P10 P90 P95 P99 percentiles 1%, 5%,. . .MSIGN PROBM test du signe pour H0 : “mediane= 0”, et probabiliteSIGNRANK PROBS test signe et rang pour H0 : “µ = 0”, et probabiliteNORMAL PROBN test de H0 : “X ∼ N” (normalite) et probabilite

Chapitre 6

Le macro-langage SAS

6.1 Generalites

SAS possede un langage de programmation qui permet d’automatiser des programmesSAS assez generaux et que l’on souhaite appliquer de maniere repetitive a de nombreux jeuxde donnees. Le principe de ce macro-langage consiste a associer une chaıne de caracteres,une suite de commandes, ou encore un texte, a un identificateur. Ensuite, toute occurrencede cet identificateur est remplace par le processeur SAS par le texte qui lui a ete ainsiassocie (pour les connaisseurs, cela fonctionne donc un peu comme les macros du langagede composition de texte mathematique TEX ou LATEX). Les commandes de ce langage sontprecedees des caracteres % et &

Les objets peuvent etre de differentes natures : variables, commentaires, commandes,fonctions, arguments. Les macro-variables et macro-commandes sont connues par le pro-cesseur de maniere globale si elles sont declarees dans une session SAS, ou localement sielles sont declarees dans une macro (ceci peut etre modifie par des commandes imposantla portee des objets declares).

6.2 Macro-variables

Declaration

Elle se fait par la commande %let suivie de l’affectation :

%let nom1 = objet ; la valeur de nom1 est juste objet%let ds = sondage ; l’objet peut etre une table SAS%let var1 = taille ; ici l’objet est une variable%let var2 = poids ; une autre variable%let varlist = sexe age taille poids ; ici l’objet est une liste de variables

Reference

Une reference a une macro-variable dans un programme SAS est de la forme &nom. Leprogramme SAS suivant :

26

D. Chauveau – Initiation SAS 27

TITLE "Etude des donnees &ds" ;TITLE2 "pour les variables &varlist" ;PROC PLOT DATA = &ds ;

PLOT &var1*&var2 ;RUN ;

sera vu par le processeur SAS (avec les declarations precedentes) comme :

TITLE "Etude des donnees sondage" ;TITLE2 "pour les variables sexe age taille poids" ;PROC PLOT DATA = sondage ;

PLOT taille*poids ;RUN ;

Note 1 : Le processeur de macro ne resoud pas les references de variables incluses entresimples quote.

Note 2 : L’interet evident est qu’il suffit de modifier les definitions des macro-variablespour faire agir le meme programme SAS sur d’autres jeux de donnees.

Macro-variables contenant des instructions SAS

Une macro-variable peut contenir des portions de programme SAS. Il suffit d’utiliser lastructure%str(. . .) ; afin que les ; du contenu de la macro ne soient pas interpretes comme finde l’instruction %let. La syntaxe est :

%let plot = %str( debut de definitionPROC PLOT ;

PLOT taille*poids ;RUN ;

) ; fin de la definition

Il est possible d’imbriquer des definitions de macro-variables. On peut, par exemple, definirla variable &plot par :

%let plot = %str(PROC PLOT DATA = &ds ;

PLOT &var1*&var2 ;RUN ;

) ;

Le programme SAS suivant :

%let ds = sasuser.exo ;%let var1 = taille ;%let var2 = poids ;

D. Chauveau – Initiation SAS 28

&plot NB : pas de “ ;” ici

sera dans ce cas vu par le processeur SAS comme :

PROC PLOT DATA = sasuser.exo ;PLOT taille*poids ;

RUN ;

Note 3 : Une macro-variable peut a tout moment etre annulee, en remplacant sa valeurpar une chaıne vide a l’aide de la commande %let nom= ;.

Note 4 : la valeur d’une macro-variable peut etre affichee dans la fenetre (ou le fichier)SAS.log par la commande %put &nom ;

6.3 Macro-commandes

Une macro-commande (ou simplement macro dans la suite) peut etre aussi simplequ’une macro-variable, mais cette structure est destinee a realiser des programmes pluscomplexes. Une macro peut par exemple avoir sa propre definition de parametres.

Definition

Similaire a la definition de macro-variables a plusieurs instructions. La structure estencadree par les commandes %macro et %mend, e.g. :

%macro plot ;PROC PLOT ;

PLOT taille*poids ;RUN ;

%mend plot ; NB : le nom de la macro est necessaire ici

Execution

Une macro est invoquee par une instruction de la forme %nom macro ; e.g., ici,

%plot comme pour une variable, le “ ;” est inutile

Il est possible d’inclure des references de macro-variables dans une macro. Si l’onsouhaite que la macro precedente agisse sur des variables et des tables SAS differentes, ondefinira par exemple la macro :

%macro plot ;PROC PLOT DATA = &ds ;

PLOT &var1*&var2 ;RUN ;

%mend plot ;

D. Chauveau – Initiation SAS 29

que l’on utilisera comme ceci :

%let ds = sasuser.exo ;%let var1 = taille ; on definit les 2 variables%let var2 = poids ;%plot ce qui donne un premier graphique%let var2 = age ; puis on modifie la seconde%plot ce qui donne un second graphique

Parametres d’une macro

Une macro peut avoir des parametres qui se comportent comme des macro-variableslocales. Elle peut aussi — comme tout langage — comporter des lignes de commentaires :

%macro plot(yvar,xvar) ;%* ceci est un commentairePROC PLOT ;

PLOT &yvar*&xvar ;RUN ;

%mend plot ;

Les valeurs de ces parametres sont assignees lorsque l’on invoque la macro (il n’est plusnecessaire d’utiliser l’instruction %let) :

%plot(taille,poids)%plot(taille,age)

Valeurs par defaut des parametres d’une macro

Il est possible d’assigner des valeurs par defaut aux parametres, ce qui permet d’appelerla macro sans preciser les parametres :

%macro plot(yvar=taille,xvar=poids) ;%* plot avec valeurs par defautPROC PLOT ;

PLOT &yvar*&xvar ;RUN ;

%mend plot ;

Cette macro peut etre invoquee simplement par %plot et sera vu du processeur SAScomme

PROC PLOT ;PLOT taille*poids ;

RUN ;

D. Chauveau – Initiation SAS 30

6.4 Pour aller plus loin

Les macros peuvent faire bien d’autre choses :

Une macro peut appeler une autre macro.

Il est possible d’ecrire des instructions conditionnelles, avec des (macro-) commandesde la forme

%if condition %then instruction

%if condition %then%do ;instructions. . .%end ;

Il est possible d’utiliser des (macro-) boucles

%do n=1 %to &nombre ;instructions. . . ici, &n refere a la macro-variable n

%end ;

Bibliotheques de macros

Les macros souvent sollicitees doivent etre rangees dans une bibliotheque de macros,afin d’eviter d’avoir a les declarer a chaque nouvelle session SAS. Une bibliotheque est unrepertoire qui contient un fichier par declaration de macro. Par convention, le fichier quicontient la macro nom doit s’appeler nom.sas. Le chemin d’acces au repertoire des macrosdoit etre specifie dans le fichier .config.sas du repertoire de l’utilisateur (sous UNIX).

Bibliographie

[1] Azaıs J.-M., Besse, Ph. et Croquette A., SAS sous Unix, logiciel hermetique poursysteme ouvert Publication du laboratoire de Statistique et Probabilites de l’Univer-site Paul Sabatier, Toulouse.

[2] Delwiche, L.D. and Slaughter, S.J., The Little SAS Book : A Primer, 2d Ed., SASInstitute

31