Vous êtes sur la page 1sur 31

Apprentissage Statistique

SAS 9.4 sous linux

Logiciel hermtique pour systme ouvert


P HILIPPE B ESSE

4me anne GMM - MMS

Attention ce cours est dense, la lecture de ce document ne suffira pas la bonne comprhension des outils qui y sont dcrits de faon
synthtique. La participation active aux TDs est indispensables lacquisition des comptences incontournables pour une utilisation
raisonnable et raisonne de ce logiciel fort complexe.

quipe de Statistique et Probabilits


Institut de Mathmatiques de Toulouse UMR CNRS C5219
Dpartement Gnie Mathmatique et Modlisation
Institut National des Sciences Appliques de Toulouse 31077 Toulouse cedex 4.

Introduction au logiciel SAS


Rsum
Ces vignettes proposent une introduction lmentaire un usage
classique du logiciel SAS pour lancer des analyses statistiques. Lobjectif est volontairement restreint aux commandes et procdures de
base disponibles dans la version de la licence acadmique de SAS
correspondant galement aux usages les plus frquents dans les
grandes entreprises. Sont donc concerns : SAS/Stat, SAS/Graph et
lAnalyse interactive de donnes.
Plan du cours :
Introduction
Gestion des donnes et procdures lmentaires
Graphes haute rsolution
Macros-commandes
Bases de donnes

Introduction au logiciel SAS

suivre le grand principe de la compatibilit verticale ; toute nouvelle version


du logiciel est cense accepter les applicatifs conus avec les versions antrieures. Cela semble premire vue positif pour les utilisateurs mais, en un
demi-sicle de dveloppement, ceci a aussi des consquences trs nfastes sur
la clart, la cohrence, la souplesse du ou plutt des langages spcifiques ce
logiciel. Son apprentissage est donc long, fastidieux si lon veut en matriser
les subtilits. Son utilisation ne se justifie que dans un environnement o les besoins en statistiques et le volume des donnes traites sont considrables et qui
dispose de ressources financires consquentes : outre le cot de location du
logiciel, il faut prendre en compte les salaires des statisticiens professionnels
et spcialistes qui sauront dvelopper et maintenir les applications spcifiques
ncessaires aux diffrents services de lentreprise. Ce sont les raisons qui font
que de nombreux services de Recherche et Dveloppement lui prfre un outil
de type libre accs comme R.

Introduction

Le systme SAS est un ensemble de modules logiciels pour la gestion et


le traitement statistique des donnes. A travers diffrents types dinterfaces
utilisateur. Il permet lcriture de Programmes SAS qui excutent :
Avant propos
les saisies, importations, interrogations, manipulations, fusions, transformations de donnes ;
Le systme SAS est, sinon le logiciel de traitement de donnes le plus com les ditions dtats, tableaux de bord, de rapports, numriques et graplet ni le plus rpandu, celui qui traite quotidiennement le plus gros volume de
phiques ;
donnes. Il a acquis, depuis sa mise en route au dbut des annes 60, une situa les analyses statistiques, modlisation, prvision ;
tion dominante dans beaucoup de secteurs dactivits. En France, les grandes
des applications spcifiques dfinies sous forme de macro-commandes
entreprises de lnergie et administrations : INSEE, EDF, GDF,. . . , toute linpouvant tre pilotes par menus ou partir dun navigateur ;
dustrie pharmaceutique lont adopt ainsi que les entreprises du tertiaire im les ditions plus ou moins automatises de rapports et pages web.
pliqus dans la gestion volumineuse de bases clientles (banques, assurances,
Depuis la version 8, SAS propose des solutions : analyse guide des donnes,
marketing, VPC...). Afin dafficher une diversification de ses activits, depuis
analyse marketing, Prvision de sries chronologiques... qui sont autant dende nombreuses annes, SAS ne signifie plus Statistical Analysis Sytem ; le calvironnements de travail associs une interface graphique spcifique et une
cul statistique est devenu accessoire au regard des tches dingnierie globale
problmatique. Ils permettent un traitement de linformation sans crire une
des systmes dinformation.
ligne de programme. Les modules Insight (Analyse interactive des donnes) et
Historiquement, SAS a suivi lexpansion des sites IBM sur lesquels il a t Enterprise Miner sont trs labors en ce sens. Il serait certes possible, en preconu et conserve, de cet environnement initial, les caractristiques fondamen- mire approche, de se contenter de cette utilisation lmentaire mais lusage
tales : complexit, lourdeur, cot mais aussi puissance et efficacit. SAS Insti- montre que ces solutions sont ncessairement limites et quun usage protute, a en effet adopt la stratgie dIBM pour fidliser ses clients et sattache

Introduction au logiciel SAS

fessionnel, associ des contraintes spcifiques, rend incontournable lusage proc tabulate data = europe;
dune programmation basique.
class date dest;
var boarded;
1.1 Table SAS
table date, dest*boarded*sum;
run;
Aprs saisie ou importation en provenance de fichiers ASCII ou dun SGBD
(Systme Relationnel de Gestion de Base de Donnes), les donnes sont gres
par SAS sous la forme dun SAS Data Set nomm par la suite Table SAS.
Une table SAS est lassociation dun ou deux fichiers binaires contenant les
donnes et leur descriptif :
Nom de la table
Commentaire ou label
Date et heure de cration
Nombre dobservations
et, pour chaque variable :
Nom abrg
Signification ou label
Type
Type de codage
Longueur
Position

1.2

1.3

Les modules et leur documentation

Toutes les documentations en anglais ainsi que des tutoriels sont disponibles
en ligne. Des items sont spcifiques la version de SAS utilise (9.3), au systme dexploitation et chacun des modules offerts la location. Ceux les plus
utiliss concerns par ce cours sont : Base SAS, SAS/STAT, SAS/GRAPH.

Base SAS Cest la documentation de base et le manuel de rfrence pour


tous les traitements de gestion des donns : ltape Data, la syntaxe de ses
commandes, la gestion des tables SAS, lditeur de texte des programmes.
Cet item contient galement la description des procdures lmentaires (Procedures Guide), du macro langage pour lcriture de macro-commandes, des
outils de production automatique des rapports et graphes (ODS) en html, des
requtes SQL de bases de donnes, de production de documents XML...

Programme SAS

Un programme SAS est un enchanements dtapes de gestion des donnes


(Data Step) et dappels de procdures, dcrivant, dans une syntaxe souvent
spcifique chaque module, les traitements raliser sous le couvert doptions
prises par dfaut ou explicitement dfinies. Les diffrentes tapes ou procdures communiquent entre elles exclusivement par lintermdiaire de tables
SAS, permanentes ou temporaires, et avec lextrieur par des tables SAS ou
des fichiers textes usuels en un format quelconque.
/* exemple de programme SAS */
/* Lecture, impression et tabulation de donnes. */
data Europe;
infile "edc.fun.overseas";
input date $ 1-7 dest $ 8-10 boarded 11-13;
proc print data = europe;

SAS Procedures Fonctions et syntaxes de toutes les procdures lexception des procdures statistiques plus complexes : statistiques lmentaires,
frquences, graphiques basse rsolution, impression, tri, tabulation, transposition,. . .

SAS/Stat Users Guide. Toutes les procdures statistiques et la grande varit de leurs options : tous les modles de rgression, les classifications, les
dures de vie, la statistique non-paramtrique, les analyses multidimensionnelles.

SAS/Graph Software Dtails des possibilits graphiques en haute rsolution et de leurs innombrables options.

Introduction au logiciel SAS

SAS/IML Le module de calcul matriciel interactif intgr est un langage 2.3 Les fentres
interprt, comme Matlab ou R. Il traite des objets matriciels avec la syntaxe
Cinq fentres apparaissent alors lcran avec une ergonomie relativement
dun langage volu (PL1). Il est adapt la mise en place rapide de mthodes
intuitive
mais, trs sophistique et ouvrant sur de trs nombreuses possibilits,
originales construites partir des oprateurs classiques de lalgbre linaire.
il
serait
inefficace
de vouloir la dcrire de faon exhaustive. Elle est dcouvrir
Trs rarement utilise dans lindustrie, il nest pas dcrit dans ce document.
en fonction des besoins.

2
2.1

Modes dutilisation de SAS


Sous linux

Excution diffre

Chaque fentre contient une barre de menus droulants contextuels :


Fichier pour lire ou crire dans des fichiers extrieurs SAS, importer ou exporter des donnes dans diffrents formats, quitter SAS (exit) en fermant
toutes les fentres.

dition pour grer le texte (slectionner, couper, copier, coller...),


Cest la meilleure faon dexcuter des programmes oprationnels mais
Affichage pour rendre active une des fentres.
longs sans rester coller son cran. Ils sont excuts en diffr par exemple
Outils pour accder des utilitaires de gestion de graphiques, de tables sas, de
avec la commande at. Il suffit de taper
rapports, dimages, de textes et pour configurer les options personnalisant
son environnement (couleurs, polices...).
sas nom_de_fichier.sas -fsdevice x11.motif &
Solutions pour excuter les modules spcifiques (sils ont t pays !) pour la
o nom_de_fichier.sas est un fichier contenant un programme SAS ;
ralisation de tableaux de bord, le dveloppement dapplications.
les rsultats sont alors regroups dans le fichier nom_de_fichier.lst
tandis que le compte rendu de lexcution ainsi que les messages derreurs Fentre Pour changer lorganisation des fentre ou en slectionner une spcifique.
se trouvent dans le fichier nom_de_fichier.log. Il existe de nombreuses
options : type de terminal, taille mmoire. . . . Le caractre & permet de re- Aide pour accder laide en ligne dtaille ainsi qu un tutoriel (Getting
prendre la main avant la fin de lexcution qui se droule en arrire plan et
started with SAS Software).
ainsi, ventuellement, de tuer le processus sas en cas de problmes.
Ces fentres sont :
Mode interactif
diteur est un diteur de texte rudimentaire 1 , pour entrer et modifier les programmes SAS avant den demander lexcution. Outre les commandes du
Taper simplement la commande sas & qui lance SAS en tche de fond afin
choix dition du menu, il faut savoir que pour :
de pouvoir ractiver, si ncessaire, la fentre du process shell (xterm).
Sortie affiche tous les rsultats (texte) produits par lexcution des diffrentes
2.2 Sous windows
procdures. Les graphiques haute rsolution apparaissent dans une fentre
spcifique.
Pour lessentiel, une fois que SAS est lanc partir du menu des programmes ou partir de son icne, le fonctionnement est le mme quen mode Journal affiche le compte rendu de la bonne excution et les messages derreur. Elle est la premire fentre consulter.
interactif sous Linux. Larborescence des rpertoires est videmment spcifique au systme dexploitation mais aussi aux paramtres de configuration
1. Il est vivement recommander douvrir un diteur fiable et entrer le programme avant de la
de linstallation. Des facilits sont apportes par Windows comme le copier / soumettre par simple copie de la souris. Cela permet dviter des mauvaises surprises : caractres
spciaux cachs, crash de SAS...
coller des graphiques entre les fentres SAS et un traitement de texte.

Explorateur affichage arborescent des librairies (rpertoires) et tables gres


par SAS.
Rsultas permet de grer lensemble des rsultats (textes et graphiques) de
faon arborescente.
insrer n lignes il faut taper in dans la zone des numros de lignes,
supprimer une ligne il faut y taper d et, pour supprimer un block, entrer
dd sur la premire et la dernire ligne du bloc,
passer alternativement du mode insertion au mode superposition il faut
taper <ctrl>x.
Enfin, le menu spcifique Excuter permet de lancer lexcution
(comme < F 3 >) du programme de lditeur ou celui du tampon copi
avec la souris et de rappeler (comme < F 4 >) le programme excuter
dans la fentre

Introduction au logiciel SAS

Plutt que dutiliser toujours la librairie SasUser, il est possible de dfinir sa


propre librairie (ou rpertoire) de tables permanentes (commande libname).

Commandes globales

Cette section aborde quelques lments de programmation SAS. En plus des


deux types de structures dj cits (tape data et procdures), certaines commandes peuvent intervenir tout moment afin de prciser ou modifier certaines
options. Elles restent actives durant toute la session ; voici les principales.

3.1

Rfrencement

libname libref SAS-data-library;


Les rpertoires (unix ou windows) contenant des bibliothques de tables

SAS autres que sasuser (par dfaut) doivent tre allous avant leur
utilisation mentionnant cette rfrence logique.
Dautres fentres souvrent par exemple lors de la production de graphes ou au
lancement de modules interactifs spcifiques.
filename fileref external-file;
Un fichier extrieur SAS (fichier ASCII) peut galement tre rfrenc.
Attention aux courants dair, il est important de grer correctement la multitude des fentres qui remplissent lcran et surtout de les refermer dans le bon
3.2 Mises en formes des sorties
ordre afin dviter de se retrouver bloqu, par exemple sur un popup qui attend
Commentaires Tout texte sous la forme : * texte ; ou /* texte */ est
une rponse.
ignor de SAS et permet dexpliciter le fonctionnement dun programme.
2.4 Bibliothques
options liste doptions;
permet de spcifier certains paramtres :
Ce sont, du point de vue du systme dexploitation, les rpertoires dans les obs=n limite le nombre dobservations traiter pour tester par exemple
quels SAS gre les fichiers et tables SAS de faon temporaire, le temps dune
un programme,
session ou excution du programme, ou permanente.
linesize=n fixe le nombre de caractres par ligne en sortie,
SasUser : bibliothque permanente cre par dfaut. Les tables de cette bi pagesize=n fixe le nombre de lignes par page,
bliothque sont nommes sasuser.nomtab.
date|nodate prsence ou absence de date en haut de page,
Work : bibliothque contenant les tables temporaires cres par dfaut par
number|nonumber prsence ou absence de numrotation des pages,
les diffrentes tapes et procdures. Elles sont effaces la fin de la
pageno=n fixe le numro de la premire page.
session ou de lexcution du programme. Les tables sont nommes titlen titre;
work.nomtab ou plus simplement de faon implicite : nomtab.
permet de faire imprimer jusqu n = 10 lignes de titre sur chaque page
SasHelp contient un groupe de catalogue permettant le fonctionnement par
en sortie, par dfaut, la premire ligne contient : The SAS System,
dfaut dune session SAS, les donnes servant dexemples et toute laide footnoten note de bas de page;
en ligne.
permet de faire imprimer jusqu n = 10 notes de bas de page sur chaque
Maps contient les tables de donnes gographiques (fonds de carte).
page en sortie.

Options usuelles :
options linesize=75 pagesize=66 nodate number;
title "Mon titre";
footnote "Note de bas de page";

3.3

Production de rapports

Il est possible depuis la version 8 de produire directement des sorties dans


un format standard afin de les introduire sans un traitement de texte (.rtf) ou
une page web (.html). Cest le systme ODS (open delivery system).
ods rtf body="nomfichier.rtf";
/* Programme SAS */
ods rtf close;
Remplacer rtf par html, ps, pdf fournit dautres formats de sortie.
La version 9 permet galement la sortie de graphiques sur le mme principe.
Ils sont de bonne dfinition et directement produits pas les procdures statistiques (princomp, anova, corr, reg, glm...) mais leurs options
sont contraintes. Ces possibilits seront abordes au momment de lutilisation
de ces procdures.

Analyse interactive des donnes

A notre grand regret, le module SAS/Insight danalyse interactive des donnes nest plus maintenu dans SAS partir de la version 9.4. Lintroduction
ce module pour trs pratique et trs efficace pour faire de lexploration efficace
de donnes est en consquence supprime. On peut penser que la stratgie de
SAS consiste favoriser le dveloppement dun autre produit quivalent : JMP
mais qui est plus compliqu mettre en uvre et puis cest un autre logiciel !
Encore une raison pour utiliser plus systmatiquement lopen source R.

Introduction au logiciel SAS

SAS de base : gestion des donnes et


procdures lmentaires
Rsum
Description des commandes (module SAS de base) les plus utiles
de ltape data et principales procdures lmentaires pour crer,
transformer, normaliser, concatner, fusionner, transposer, trier des
tables SAS. Procdures de calcul des statistiques lmentaires.
Retour au plan du cours.

Introduction

SAS de base : gestion des donnes et procdures lmentaires

permettent de vrifier dans la fentre sortie la bonne constitution de la dernire table SAS cre.

2
2.1

tape Data de cration dune table


Lecture dune table

Lobjectif est de construire une table SAS dans le cas de figure le plus usuel
o les donnes sont contenues dans un fichier texte (ascii) provenant dun diteur, dun autre logiciel statistique ou encore dun gestionnaire de bases de
donnes. Les donnes peuvent galement tre directement saisies au clavier
(SAS/Insight) ou incluses au programme SAS (commande include card).
Enfin, SAS peut lire tout autre format de fichier que ceux succinctement dcrits ci-dessous (articles de longueur variable, binaire,. . . ) sur tout support mais
cest vite compliqu !

Le systme SAS offre un trs large ventail de traitements permettant das- syntaxe
surer toutes les fonctions de gestion des donnes quun statisticien peut tre
data <sasuser.>table-sas ;
amen mettre en uvre. Cette richesse est aussi source de complexit. Nous
infile fileref ou nom-de-fichier <dlm= carac lrecl=nn> ;
nous contenterons de dcrire les exemples les plus standards. Ces traitements
input liste de variables et spcifications ;
sont pris en charge par les tapes data (data step), qui reconnaissent un langage de programmation proche de PL/1 1 , et quelques procdures spcifiques.
Un programme SAS se dcompose en :
1. une (ou des) tape(s) data,
2. une (ou des) appels des procdures (proc).

Options

La liste des variables dfinit chaque identificateur ; il est suivi du caractre


Ces deux parties sont gnralement indpendantes, il est donc inutilement co- $ pour prciser, ventuellement le type alphanumrique de la variable. Il
teux de r-excuter ltape data, dont les rsultats sont stocks dans une table est fortement conseill de dclarer chaque variable qualitative de type alphaSAS (permanente ou temporaire), chaque mise au point des procdures qui numrique.
dlm= ; si le dlimiteur entre les valeurs est un ; ou 09x pour un
suivent.
caractre de tabulation,
Les commandes lmentaires :
dsd deux dlimiteurs successifs sont interprts comme une valeur manquante, sinon insrer un .,
proc print;
lrecl si la ligne est trs longue, majorant du nombre de caractres dun
run;
enregistrement,
1. Cr par IBM dans les annes 70s dans lespoir de remplacer la fois le Fortran et le
firstobs numro de la ligne laquelle commencer la lecture,
CoboL ; ce fut le premier langage structur. Le dploiement conjoint dUnix et du langage C a t
obs numro de la dernire ligne lire.
fatal au PL/1.

2.2

SAS de base : gestion des donnes et procdures lmentaires

Lecture en format libre

input var1 var2 $ var3 @@ ;


run;

Les donnes associes une unit statistique sont spares par des blancs ou
tout autre caractre dlimiteur spcifi dans loption dlm ( ; : ,. . . ) ; les units
Lorsque le volume des donnes est trs rduit, celles-ci peuvent tre intsont spares par des retours la ligne. Si les lignes du fichier en entre sont gres au programme avec la commande cards :
trop longues, dpassant la valeur par dfaut, elles sont tronques en lecture. Il
est ncessaire de dclarer un majorant de cette longueur dans loption lrecl. data sasuser.fich1;
input var1 var2 $ var3 @@ ;
Une observation par ligne
cards;
1.5 A 55 2.4 B 44 2.7 B 61 2.3 A 48
Chaque observation est dcrite par une ligne du fichier.
;
run;
data sasuser.fich1;
infile ~/data/fich.dat dlm=;;
Attention la place du dernier point-virgule.
input var1 var2 $ var3;
run;

2.3

Lecture formate

Attention, si une donne manque dans le ficher pour satisfaire le nombre


Le format libre ci-dessus nest plus utilisable lorsque, pour des raisons
de variables, SAS poursuit la lecture sur la ligne suivante sans prvenir. Il est dconomies despace disque, les donnes sont colles ; il faut alors indiquer
primordial de toujours vrifier la bonne lecture des donnes. Le cas chant, explicitement, la suite du nom de chaque variable, les positions (ou champs)
une donne manquante est code par un point ..
concerns.
Une observation sur plusieurs lignes
Chaque unit statistique est dcrite sur n lignes du fichier. Plusieurs dclarations input ou des caractres "/" permettent de prciser le dcoupage.
data sasuser.fich1;
infile ~/data/fich.dat dlm=;;
input var1 var2 $ var3 /
var4 $ var5 var6;
run;
Plusieurs observations par ligne
Le double caractre "@@" a pour effet de maintenir un article dans le buffer
de lecture jusqu ce quil soit compltement lu.
data sasuser.fich1;
infile ~/data/fich.dat;

data sasuser.fich1;
infile ~/data/fich.dat;
input var1 1-12 var2 $ 13-18 var3 19-25;
run;

2.4

Importation / exportation

Les donnes peuvent tre directement importes partir dautres formats car
issus dautres logiciels comme Excel si le module SAS/Access est implment
pour pouvoir accder ce type de format. Sinon seuls certains type de fichier
sont accessibles comme ceux .csv. Cest le rle de la procdure import
dont voici un exemple dutilisation. Le fichier .csv contient une premire
ligne avec les noms des variables, les valeurs sont spares par des "," et la
marque dcimale est le point. De manire rciproque, une table SAS peut tre
exporte dans un format donne, texte (ascii) ou Excel.
proc import datafile="nom-de-fichier.csv"

out=sasuser.table-sas dbms=dlm replace;


getname=yes;
datarow=2;
run;
/* traitements*/
proc export data= sasuser.table-sas
outfile="nom-de-fichier2.xls"
dbms=excel;

SAS de base : gestion des donnes et procdures lmentaires

Keep et Drop
Ces commandes peuvent apparatre comme des options des commandes
data, set ou dautres procdures :
data table_out (drop=var1 var2) ;
set table_in (keep=var1 var2 var3) ;
ou encore comme commandes dune tape data :

keep|drop var1 var2


De faon plus labore, la procdure SQL autorise linterrogation de bases Lutilisation de drop ou keep dpend du nombre relatif de variables limide donnes (Oracle, Access, MySQL...) en relation avec le module SAS/Ac- ner par rapport au nombre conserver.
cess.

3.2

3
3.1

tape data de transformations


Fonctionnement

Fonctions

Le langage reconnat les expressions arithmtiques usuelles, sait grer des


constantes numriques ou alphanumriques (constante) et des variables qui sont enregistres sur table_out moins davoir t limines
(drop, keep). Il reconnat, de plus, la plupart des fonctions mathmatiques
usuelles (round, sin, log, sqrt,...), les fonctions de gestion de
chanes de caractres (lenght, scan, substr,...), celles spcifiques
aux diffrentes lois de probabilits (quantiles) et dautres usage plus statistique (sum, mean, min, max, var, std,...). Ces dernires sappliquent une liste de valeurs avec la syntaxe suivante :

Ltape data est capable dinterprter un langage de programmation volu


qui, par sa syntaxe, est proche de PL/1. On y retrouve les mmes structures :
if, then, else, do. La diffrence fondamentale est quune tape data
peut tre assimile, en gnral, une lecture de la table traiter. Elle inclut
implicitement une boucle considrant chacune des observations de la premire
la dernire dune table ; une variable du langage est une colonne ou variable
sum (var1, of var10-var20, var 25)
statistique.
Syntaxe

3.3

Exemples

La syntaxe habituelle est la suivante :


data <sasuser.>table_out ;
set <sasuser.>table_in ;
. . . instructions ;
run ;
Chaque observation ou ligne de table_in est lue, transforme par excution des instructions puis enregistre sur table_out. Par dfaut, toutes
les variables de table_in sont considres et recopies sur table_out
ainsi que celles qui ont t cres par les instructions mais il est possible
den laisser tomber (drop) ou de nen conserver (keep) que certaines.

/* transformations de variables quantitatives */


data sasuser.table1;
set sasuser.table2 (drop=var10 var11);
newvar1=sqrt(var3);
newvar2=log(var4)/mean(of var5-var9);
run;
/* codage en classes dune variable quantitative */
data sasuser.table1 (keep taillec sexe csp);
set sasuser.table2 ;
if sexe=M then do;

if taille > 190 then taillec=grand;


else if taille > 170 then taillec=moyen;
else taillec=petit;
end;
else then do;
if taille > 180 then taillec=grand;
else if taille > 160 then taillec=moyen;
else taillec=petit;
end;
run;
/* codage en classes dune variable quantitative */
/* meme chose avec la commande select :*/
data sasuser.table1 (keep taillec sexe csp);
set sasuser.table2 ;
select (sexe);
when (M)
if taille > 190 then taillec=grand;
else if taille > 170 then taillec=moyen;
else taillec=petit;
when(F)
if taille > 180 then taillec=grand;
else if taille > 160 then taillec=moyen;
lse taillec=petit;
otherwise put probleme;
end;
run;

SAS de base : gestion des donnes et procdures lmentaires

otherwise;
end;
select(a);
when(1);
when(3,4,5) x=x*10;
otherwise;
end;
/* limination dobservations */
data sasuser.table1;
set sasuser.table2 ;
if var1 = nul then delete;
/* SAS passe a la suivante*/
...
run;
/* selection implicite dobservations */
data sasuser.table1;
set sasuser.table2 ;
if var1 = bon ;
/* sinon SAS passe a la suivante*/
...
run;

Des commandes spcifiques ltape Data nont pas t dcrites :


retain, return, put, output, missing, list, link,
label, goto, do. Ainsi, lexemple suivant utilise une variable dfinie de
Il est facile de supprimer ou plutt, de ne pas recopier dans la table cre faon implicite et une boucle pour rpter les diffrents niveaux dun facteur.
des observations vrifiant ou non une condition logique.
/* dfinition implicite dune variable */
data table1; /* fichier temporaire */
/* exemples de regroupement de modalits */
input var n ;
select(mon);
do i=1 to n ;
when(mon in(mars,avri,mai )) sais=printps;
input gain @@ ;
when(mon in(juin,juil,aout)) sais=ete;
output ;
when(mon in(sept,octo,nove)) sais=automne;
end;
when(mon in(dece,janv,fevr)) sais=hiver;

cards ;
16
28 29 26 24
0.04 11
186 229 220
0.07 12
179 193 183
0.10 8
130 87 135
0.13 11
154 130 130
;
run;

SAS de base : gestion des donnes et procdures lmentaires

Syntaxe

3.4

proc rank <options> ;


by <descending> variable ;
ranks liste de nouvelles variables ;
var liste de variables ;

26 25 229 23 29 24 20 22 20 29 22
208 228 198 222 273 216 198 213
180 143 204 114 188 178 134 208 196

Options
116 118 165 151 59
118 118 104 112 134 98 100 104

Tableau de variables

data=table sas indique le nom de la table, par dfaut, la dernire cre,


out=table sas spcifie le nom de la table cre qui contiendra les variables

initiales et les rangs,


fraction|groups=n|normal=blom pour obtenir, respectivement, les va-

leurs de la fonction de rpartition, un dcoupage en n classes de mme


effectif, les valeurs dune distribution normale, plutt que, par dfaut, les
valeurs des rangs.
descending rangs par valeurs dcroissantes,
ties= spcifie la faon de grer les ex-quos (mean|high|low).

Commandes
Des traitements plus sophistiqus (itratifs, conditionnels) peuvent tre oprs sur les variables dune table en les dclarant sous la forme dun tableau by suivi du nom dune variable qualitative indique que les statistiques sont
(array) dont les colonnes peuvent alors tre indices. Plus prcisment, cette
calcules par groupe dobservations ; la table doit tre trie.
dclaration revient considrer un vecteur ligne contenant successivement ranks doit tre spcifie si lon veut que les variables initiales soient recopies
chaque ligne de la table en cours de lecture.
en sortie. Sinon, les variables gardent le mme nom. Il y a une corresponDe nombreux exemples sont fournis dans les textes des macros-commandes.
dance terme terme entre les noms des deux listes de variables.

Procdures de transformation
Dautres transformations usuelles sont proposes sous forme de procdures.

4.1

Rangs

var les rangs des variables de la liste var sont calculs et recopis dans la table
de sortie ; par dfaut, toutes les variables numriques sont traites.

4.2

Normalisation

La rduction ou la standardisation de variables quantitatives sobtient en


excutant la procdure standard.

La procdure ranks calcule les rangs des valeurs de variables quantitatives


et les recopie dans une nouvelle table. Par dfaut, les valeurs gales sont affec- Syntaxe
tes du rang moyen. Une option (group=) permet de spcifier le nombre de
proc standard <options> ;
valeurs de rangs utilises et ainsi de dcouper en classes une variable quantitaby <descending> variable ;
tive avec des effectifs sensiblement gaux.
var liste de variables ;

weight variable ;
Options
data=table sas indique le nom de la table, par dfaut, la dernire cre,
out=table sas spcifie le nom de la table cre qui contiendra les variables

initiales et celles standardiss.


print imprime moyennes et carts-types des variables traites,
mean= spcifie la nouvelle valeur moyenne (=0),
std= spcifie la nouvelle valeur de lcart-type (=1),
replace demande que toute donne manquante soit remplace par la nouvelle moyenne (mean=),
vardef prcise le diviseur dans le calcul de la variance (df, n, wdf,wgt).

SAS de base : gestion des donnes et procdures lmentaires

Options
data=table sas indique le nom de la table, par dfaut, la dernire cre,
out=table sas spcifie le nom de la table cre,
prefix= spcifie le prfixe utilis pour crer les noms des nouvelles va-

riables,
name= spcifie le nom de la variable cre qui contiendra les noms des

anciennes variables pour dsigner les observations (par dfaut _name_).


Commandes

by : une observation est cre pour chaque variable transpose et pour chaque
groupe ; la variable de groupage est incluse en sortie mais non transpose.
La table doit tre trie.
copy les variables de la liste copy sont recopies dans la table de sortie sans
transposition.
Commandes
by suivi du nom dune variable qualitative indique que les statistiques sont var les variables de la liste var sont transposes et recopies dans la table
de sortie ; par dfaut, toutes les variables numriques, napparaissant pas
calcules par groupe dobservations ; la table doit tre trie.
ailleurs sont traites.
var les variables de la liste var sont standardises et recopies dans la table de
id nom de la variable en entre contenant les noms des variables aprs transsortie ; par dfaut, toutes les variables numriques sont traites.
position.
weight nom de la variable contenant les pondrations des observations.

4.3

Transposition

4.4

Tri

La procdure sort permet de trier une table SAS.


La procdure transpose lit toute ou partie dune table SAS et la recopie
aprs transposition : les lignes deviennent des colonnes et les colonnes des Syntaxe
lignes. Une nouvelle variable _name_ contient alors, en sortie, les noms des
proc sort <options> ;
variables transposes qui dsignent maintenant les observations. La commande
by <descending> variable1 <<descending> variable2> ;
by permet de rorganiser des donnes complexes. Attention, si une variable est
de type caractre, toutes les variables transposes le deviennent.
Options
Syntaxe
data=table sas indique le nom de la table, par dfaut, la dernire cre,
proc transpose <options> ;
out=table sas spcifie le nom de la table cre qui contiendra les observar liste de variables ;
vations tries.
id variable ;
nodup limine les observations identiques.
copy liste de variables ;
Commandes
by liste de variables ;
by liste des variables qui servent de cl de tri ; lordre est croissant par dfaut.

SAS de base : gestion des donnes et procdures lmentaires

Sur les tables tries, SAS gre deux variables gnres par la commande BY 5.2 Concatnation horizontale
permettant didentifier les dbuts et fin de groupes de lignes prenant les mmes
Les mmes units statistiques ont t observes sur des paquets de variables
valeurs dune variable utilise dans le tri. Par exemple, si la table est tries par
contenues
dans des tables SAS distinctes. La table regroupant toutes les vala variable sexe, la commande BY sexe gnre les variables temporaires
riables
est
obtenue
en utilisant plusieurs fois la commande set.
First.sexe et LAST.sexe qui prennent des valeurs 0 ou 1 pour indiquer
respectivement la premire observation ou la dernire de chaque modalit de
data sasuser.conchtable;
la variable.
set sasuser.table1;
set sasuser.table2;
5 Concatnation de tables
run;

5.1

Concatnation verticale et fusion

Le mme rsultat peut tre obtenu avec la commande merge. Elle permet,
Cette opration consiste complter une table SAS par une ou plusieurs en plus, de contrler la bonne correspondance des lignes de chaque table (trie)
autres contenant les mmes variables mesures sur dautres observations. Elle suivant les valeurs dune cl et introduit, le cas chant, des donnes manest trs simple raliser, il suffit de mentionner toutes ces tables dans la com- quantes.
mande set en renommant, liminant, conservant ventuellement certaines variables. Sil ny a pas une bonne correspondance entre les variables, des dondata sasuser.mergetable;
nes manquantes sont gnres.
merge sasuser.table1 sasuser.table2;
by varcom;
data sasuser.concvtable;
run;
set sasuser.table1 (rename=(var1=var15))
sasuser.table2 (rename=(var5=var15));
5.3 Affichage dune table
run;
Le menu affichage permet de vrifier le bon contenu dune table. Par ailleurs,
la
procdure print dite la liste dune table SAS dans la fentre SAS.sortie
Si chacune des tables est trie sur la mme cl, ce tri peut tre conserv dans
en
calculant ventuellement des sommes partielles.
la table concatne, il sagit alors dune fusion, en spcifiant la variable cl
dans une commande by.
data sasuser.fusiontable;
set sasuser.table1 (rename=(var1=var15))
sasuser.table2 (rename=(var5=var15));
by vartri;
run;
Dautres possibilits sont offertes par la procdure append.

Syntaxe
proc print <options> ;
by <descending> variable ;
var liste de variables ;
Options
data=table sas indique le nom de la table, par dfaut, la dernire cre,
noobs supprime les numros des observations,
round arrondit les rsultats avec deux dcimales.

SAS de base : gestion des donnes et procdures lmentaires

Commandes

La matrise de linstruction table est donc ncessaire si lon souhaite construire


des tableaux compliqus. Cette instruction est extrment sensible la ponctuaby suivi du nom dune variable qualitative indique que les statistiques sont
tion : la virgule marque la limite entre les lignes et les colonnes, un espace incalcules par groupe dobservations ; la table doit tre trie.
dique une juxtaposition de deux lments dans une mme dimension (ligne ou
var les variables de la liste var sont dites dans la fentre sortie ; par colonnes) et ltoile signifie que lon imbrique deux lments dans une mme
dfaut, toutes les variables sont traites.
dimension. Typiquement, on utilisera donc la syntaxe suivante :

Procdures statistiques lmentaires

6.1

procdure tabulate

table (lignes) , (colonnes * cellules);


Entre les parenthses de la dimension ligne, on trouve des noms de variables
cites dans class. Il en va de mme entre les parenthses de la dimension
colonne.

La procdure tabulate est trs intressante manipuler et apporte beaucoup


de richesse pour les sorties SAS. Des livres entiers lui sont dailleurs consaPour les cellules, on retrouve soit une statistique comme une frquence ou
crs. Elle permet en particulier de crer des tableaux de bord (reporting) synun pourcentage, soit une variable de calcul (dj cite dans var) suivie dune
thtiques qui compilent, rcapitulent et ventuellement analysent les donnes.
toile et de sa statistique.
La syntaxe est la suivante :
Syntaxe
proc tabulate <options> ;
class <liste1 > ;
var <liste2 > ;
table ... ;
run ;
Options
data=table sas indique le nom de la table, par dfaut, la dernire cre,

Chaque ligne de commande a un rle trs spcifique en fonction de la syntaxe


et de la ponctuation.
Les variables qualitatives contenues dans la liste 1 servent dfinir des
groupes dobservations sur lesquels des statistiques seront calcules. Ce
sont ces variables qui dfiniront les lignes et les colonnes du tableau
calculer.
Les variables contenues dans la liste 2 doivent ncessairement tre numriques. Cest sur ces dernires que lon pourra effectuer des oprations.
linstruction table permet de prciser et dfinir larchitecture du tableau.
En particulier, il est possible de concatner, croiser ou encore regrouper
des catgories.

data exemple; /* Cration de la table */


input jour veh $ effectif ener $;
cards;
1 voiture 6 e
1 camion 3 g
2 voiture 4 g
2 camion 5 g
3 voiture 12 e
;
run;
Exemple dutilisation de la procdure.
proc tabulate data=exemple;
var jour effectif;
class veh;
table veh, effectif*max effectif*mean;
run;
proc tabulate data=exemple;
var effectif;
class veh ener;

table veh, ener*(effectif*mean);


run;

SAS de base : gestion des donnes et procdures lmentaires

weight nom de la variable contenant les pondrations des observations.

6.3
6.2

procdure univariate

Cette procdure regroupe tous les rsultats qui peuvent tre obtenus, par
SAS, dans le cadre dune tude uni-varie de variables quantitatives : indicateurs de tendance centrale (moyenne, mdiane, mode), indicateurs de dispersion, dautres caractristiques de la distribution (quantiles, skewness, kurtosis), les graphiques en basse rsolution (histogrammes, tige-et-feuille, bote-moustaches, droites de Henri), le test de Student de nullit de la moyenne,
les tests de normalit dune distribution et les tests non-paramtriques (signe,
Wilcoxon,. . . ).
Syntaxe
proc univariate <options> ;
var liste de variables ;
by <descending> variable ;
weight variable ;
output <out=table sas> <liste de statistiques> ;
Options

procdure means

Les rsultats fournis par cette procdure sont inclus dans ceux produits par
la procdure univariate dcrite ci-dessus. Elle sutilise de la mme faon et
diffre par la prsentation des rsultats rsums sous la forme dun tableau plus
facile consulter. Elle ne fournit ni statistique non-paramtrique ni graphe. La
procdure summary ne diffre de la procdure means que dans le choix des
options par dfaut.

6.4

procdure freq

Cette procdure traite les variables qualitatives. Elle fournit donc des tris
plat et complte ces rsultats par des tudes bi ou multi-varis de tables de
contingences. On obtient ainsi les profils lignes et colonnes, les statistiques
des tests dindpendance (2 ) et des comparaisons avec les valeurs dduites
du modle dindpendance.
Syntaxe
proc freq <options> ;
by <descending> variable ;
tables liste des croisements requis </ options> ;
weight variable ;

La liste des options permet de prciser les rsultats attendus.


data=table sas indique le nom de la table par dfaut, la dernire cre,
Options
normal pour obtenir des tests de normalit,
data=table sas indique le nom de la table par dfaut, la dernire cre,
plot pour obtenir les graphiques, si la commande by est employe, les
order=freq dition ordonne par effectifs dcroissants,
botes sont affiches en parallle,
vardef= prcise le diviseur dans le calcul de la variance (df, n, wdf, wgt).
Commandes
Commandes
by suivi du nom dune variable qualitative indique que les statistiques sont
calcules par groupe dobservations ; la table doit tre trie.
by suivi du nom dune variable qualitative indique que les statistiques sont
calcules par groupe dobservations ; la table doit tre trie.
tables liste des croisements exprims sous une des formes : a*b, a*(b c),
(a b)*(c d), (a- -d)*c. Les options prcisent les rsultats et statistiques
output indique le nom du fichier et la liste des statistiques qui y seront enredemandes ; la plus utile est chisq qui excute un test du 2 , dautres
gistres.
permettent dviter certaines ditions (profils).
var liste des variables concernes par la procdure, par dfaut, toutes les vaweight nom de la variable contenant les pondrations des observations.
riables quantitatives.

10

6.5

SAS de base : gestion des donnes et procdures lmentaires

procdure corr

partir des rsultats dune ACP effectue au pralable. On peut lappliquer directement sur les sorties des procdures princomp, candisc, factor. . . ,
Cette procdure tudie les liaisons entre variables quantitatives et propose qui contiennent une matrice de type score.
donc les indicateurs usuels comme les coefficients de corrlation de Pearson
et de Spearman, dautres qui le sont moins, et les tests associs. Les rsultats Syntaxe
peuvent tre enregistrs dans des tables sas.
proc score <options> ;
Syntaxe
by <descending> variable ;
proc corr <options> ;
by <descending> variable ;
var liste de variables ;
weight variable ;
with liste de variables ;

Options
data=table sas indique le nom de la table, par dfaut, la dernire cre,
hoeffding kendall pearson spearman slectionne les types de mesure de

corrlation, pearson par dfaut,


vardef= prcise le diviseur dans le calcul de la variance (df, n, wdf,wgt),

Commandes

id variable ;
var liste de variables ;
run ;
Options
La procdure score multiplie les individus dune table SAS par des "scores"
contenus dans une autre table SAS. Elle effectue le produit de la matrice des
individus par la transpose de la matrice des scores. La table contenant
les scores doit possder une variable _TYPE_. Cette variable peut prendre les
valeurs SCORE pour indiquer les coefficients, et MEAN et STD si on souhaite
centrer et rduire les donnes avant dappliquer les coefficients.

by suivi du nom dune variable qualitative indique que les statistiques sont
calcules par groupe dobservations ; la table doit tre trie.

data=table sas contenant les individus,


out=table sas en sortie. Par dfaut, elle contient les nouvelles variables et

var les variables de la liste var sont croises avec celles de la liste with ; par
dfaut, toutes les variables numriques.

score=table sas contenant les coefficients. Elle doit possder une variable

with par dfaut, tous les couples de variables apparaissant dans la liste var.
weight nom de la variable contenant les pondrations des observations.

6.6

Produit de matrices avec score

les variables de la table initiale.


_TYPE_ et peut galement comprendre une variable _NAME_ donnant le
nom de la nouvelle variable ou des nouvelles variables (colonnes) cres.
type=nom indique que les coefficients sont conservs dans les lignes pour
lesquelles _TYPE_ prend la valeur nom (cf. exemple de la rgression o
TYPE=PARMS). Cette option est utiliser si _TYPE_ est diffrent de
SCORE.
nostd indique que lon ne centre pas et que lon ne rduit pas les donnes
avant application des coefficients.

La procdure score permet de calculer le produit entre deux matrices (reprsentes par deux tables SAS) sans faire appel au module SAS/IML. La procdure score multiplie, individu par individu, les variables dune table SAS
Commandes
par des coefficients (appels scores) associs ces variables et prsents dans
lautre table SAS considre. Cette procdure est utilise, par exemple, pour by suivi du nom dune variable qualitative pour effectuer les calculs selon les
calculer les coordonnes sur le plan factoriel dun individu supplmentaire
groupes dfinis par les modalits de cette variable. La table doit tre trie.

11

SAS de base : gestion des donnes et procdures lmentaires

var liste des variables sur lesquelles on applique les coefficients. Ces variables /* 0 = (3-1)/2*0.5 +(4-3)/1*(-0.5) */
doivent tre prsentes dans les tables appeles par score= et data=.
/* 0.5= (1-1)/2*0.5 + (2-3)/1*(-0.5) */
id liste des variables prsentes dans la table sortie dfinie par out=. Par dfaut
Utilisation des rsultats de la procdure reg pour calculer la valeur ajuste
toutes les variables.
de nouvelles observations.
Exemples
proc reg data=donnees outest=coeff;
/* Creation de la table contenant les scores */
model y = var1 var2;
data coeff;
run;
input _TYPE_ $ _NAME_ $ var1 var2;
/* affichage de la table coeff contenant les
cards;
coefficients de la regression */
MEAN clin 1 3
proc print data=coeff;
STD clin 2 1
run;
SCORE clin 0.5 -0.5
/* table coeff */
;
_TYPE_ _DEPVAR_ ... INTERCEP var1 var2
run;
PARMS
y
1.5
0.3
-0.7
/* Creation des donnes sur lesquelles
on souhaite appliquer les scores */
Il est alors possible, pour une nouvelle observation, destimer la valeur de la
data donnees;
variable y en appliquant la procdure score. Celle-ci tient automatiquement
input var1 var2 @@;
compte de la constante INTERCEP du modle si on prcise type=PARMS.
cards;
3 4 1 2 .....
/* calcul des y ajusts pour les nouvelles
;
observations */
run;
proc score data=autretab score=coeff type=PARMS
/* Creation de la nouvelle variable clin
out=valajust;
partir de scores aprs centrage et
var var1 var2;
rduction des donnes */
run;
proc score data=donnees score=coeff out=sortie;
var var1 var2;
Calcul des coordonnes dindividus supplmentaires (ACP).
run;
/* ACP du tableau initial */
/* la table coeff contient les coordonnes des
qui donne la table sortie suivante :
vecteurs propres permettant le calcul des composantes
principales */
var1 var2 clin
proc princomp data=table1 outstat=coeff;
3
4
0
var var1-var5;
1
2
0.5
..
..
..
run;

12

/* Calcul des composantes principales des individus


supplmentaires, on centre et rduit les donnes
automatiquement avant calcul des composantes
principales qui sont sauves dans la table
compr2 */
proc score data=table2 score=coeff out=compr2;
var var1-var5;
run;

SAS de base : gestion des donnes et procdures lmentaires

Graphiques Haute Rsolution avec


SAS/GRAPH
Rsum
Le module SAS/GRAPH permet de tracer des graphes dont la rsolution est adapte au priphrique utilis (cran, imprimante, page
web. . . ) et avec toutes les options possibles. Cette vignette dcrit les
principales procdures (gchart, gplot, annotate) et options parmi un
nombre de disponibles qui est considrable. Bien que la plupart des
procdures statistiques fournissent (open delevery system) des graphiques par dfaut, la construction spcifique du graphique adapt
au problme pos est souvent incontournable.
Retour au plan du cours.

1
1.1

Introduction
SAS/Graph

Le module SAS/GRAPH propose une trs grande varits de procdures


graphiques assorties dun nombre considrables doptions. En plus des procdures de base : gchart et gplot, bien dautres procdures et types de graphiques
sont accessibles :
fonds de cartes (gmap),
surfaces ou nuages de points en trois dimensions (gcontour, g3d),
dessiner dautres polices de caractres (gfont),
combiner plusieurs graphes de natures diffrentes sur une mme page
(greplay),
tester linstallation de SAS/GRAPH, les paramtres du priphrique courant et les options en vigueur (gtestit),
gradar, gkpi, gslide, gtile, gareabar, gbarline...
Dautre part, tout texte ou figure gomtrique complmentaires peuvent tre
rajouts sur un graphe en les dcrivant dans une table SAS spciale dite dannotation : Annotate Data Set.

Graphiques Haute Rsolution avec SAS/GRAPH

1.2

ODS Graphics

Pour "simplifier" le paysage, de nouvelles procdures graphiques directement accessibles du module SAS de base et sans utiliser SAS/Graph, sont apparues partir de la version 9.2 (en test puis en production dans la 9.3) de
SAS en relation avec le service ODS : sgdesign, sgpanle, sgplot,
sgrender, sgscatter. Les objectifs sont les mmes mais les jeux doptions et syntaxes changent ! Nanmoins la mme logique de dfinition des graphiques est utilise notamment dans notamment avec les tables dannotation.
Comme ce nouveau service ODS (open delevery system) Graphics, proposent systmatiquement des graphiques par dfaut dans toutes les procdures
statistiques, il est lgitime de sinterroger sur la ncessit de mettre en uvre
des procdures spcifiques, lourdes, complexes, notamment par la richesse des
options proposes. Lexprience montre assez systmatiquement, quutiles et
efficaces en phase exploratoire ou de mise au point, des graphes par dfaut
sont vite limits. La comprhension dun rsultat statistique, sa porte, son
impact sont souvent le rsultat dun graphique pertinent adapt la structure
des donnes et la mthode utilise. Quelque soit le logiciel, une pratique
professionnelle requiert les comptences indispensables pour dchiffrer une
documentation excessivement complexe afin daboutir au graphique voulu et
pas celui impos par dfaut. Autrement dit, il sagit de savoir qui contrle le
rsultat final, le statisticien ou le logiciel.

2
2.1

Environnement
Taille des graphiques

Le graphique demand est trac dans une zone dont les dimensions sont dfinies par les paramtres hsize et vsize de la commande globale goptions
(les valeurs maximales sont prises par dfaut) diminus de lespace ncessaire
ldition des titres, sous-titres, notes, lgendes,. . . . Les dimensions peuvent
tre exprimes en trois units : pouce, cm ou pct qui signifie pourcentage de la dimension totale. Cette dernire unit est prfrable pour exprimer
les tailles de caractres et symboles lorsque les dimensions globales, lis au
priphrique de sortie, sont sujettes modifications.

2.2

Sauvegarde des graphiques

En labsence de commande explicite, le graphe apparat sur le priphrique


par dfaut, lcran de lordinateur, dans la fentre de visualisation des rsultats.
Une fois les graphiques mis au point, ils peuvent tre sauvs dans des fichiers
ou un traitement de texte.

Graphiques Haute Rsolution avec SAS/GRAPH

gine), les marques dchelle (nombre, couleur, paisseur, hauteur), les valeurs
des chelles (format), le libell (police,. . . ).
axis1 order=(1973 to 1981 by 2)
label=(annee)
minor=(number=1)
width=3;
axis2 order=(0 to 10000 by 1000)
label=(Revenu en francs)
minor=none
width=3;

Un fichier de format .jpg est systmatiquement cr (sous windows) dans


un rpertoire temporaire ainsi quun fichier sashtml.html contenant le graphique ; consulter la fentre du journal. Il devrait tre possible de contrler la
destination de ce fichier.

2.3

Image cran

Un clic droit sur le graphique (windows mais unix ?) ouvre un menu qui
permet de sauver limage dans le format .png avec la dfinition de lcran.

2.4

ODS

Comme vu en introduction, le graphique peut tre automatiquement orient


dans une fichier au bon format (.rtf, .html...) et sans doute avec une meilleure
dfinition que celle de lcran.
ODS RTF BODY=nomfichier.rtf;
ODS GRAPHICS ON;
/* Programme SAS */
ODS GRAPHICS OFF;
ODS RTF CLOSE;

Axes

Lgendes

Comme pour les axes, diffrents types de lgendes (de 1 99) sont dfinissables. Ils spcifient positions et textes des libells qui identifient les diffrents
graphismes et symboles utiliss.

3.3

Symboles

Les diffrents types de symboles (1 99) sont dfinis afin de dcrire les
modes de reprsentation recherchs. Sont concerns : le symbole (forme,
taille, couleur) utilis pour reprsenter un point, le type de lignes reliant les
points (couleur, continue, hachure, pointille,. . . ), la faon ou mode dinterpolation incluant barres, botes moustaches, escaliers, splines, intervalles de
confiance, rgression (linaire, polynomiale, spline).
symbol1 interpol=sm50s /* lissage spline */
value=diamond
/* symbole
*/
height=3
/* taille du symb.*/
width=2;
/* epaisseur
*/

Commandes globales

Elles dfinissent des objets (axes, symboles, trames, lgendes) et les options
utiliss pour les tracs ; elles demeurent valables jusqu une nouvelle dfinition ou la fin de la session sas.

3.1

3.2

3.4

Options graphiques

Outre ceux dcrits ci-dessus (hsize, vsize), cette commande redfinit


Des types daxes, numrots de 1 99 sont dfinis avant de pouvoir tre les valeurs de plus de 80 paramtres affectant
utiliss dans les diffrents graphiques. Ils prcisent lchelle (liste de valeurs,
les diffrents aspects du graphique :
logarithmique), lapparence (longueur, couleur, paisseur, style de ligne, ori border cadre autour du graphique,

Graphiques Haute Rsolution avec SAS/GRAPH

des variables quantitatives ou qualitatives ; les variables quantitatives sont co gunit=cm|in|pct unit de mesure,
des explicitement ou automatiquement en classes ou, selon les besoins, som rotate=landscape|portrait orientation du graphique,
mes ou moyennes.
le texte :
ftext police du texte,
4.1 Syntaxe
ftitle police des titres,
texte, symboles, types de hachures, lgendes.
proc gchart <options gnrales> ;
Les paramtres reprennent leurs valeurs par dfaut la suite de :
by <descending> variable ;
reset=all|global all concerne tous les paramtres tandis que que global
vbar liste de variables
naffecte pas ceux dfinis dans la mme commande.
</<options dapparence>
<options statistiques> <options daxes> > > ;
3.5 Titres et notes
hbar liste de variables
</<options dapparence>
Les commandes title et footnote dfinissent des lignes de texte au<options statistiques>
tour du graphique, elles suivent le mme principe que celui dcrit au para<options daxes> > ;
graphe I.1.4 et dautres options sont disponibles : taille, couleur et police des
pie liste de variables
caractres, position, rotations de la ligne de texte et des caractres, tracs de
</<options dapparence>
lignes.
<options statistiques> ;
star liste de variables
goptions reset=global gunit=pct border
</<options dapparence>
ftext=swissb htext=3;
<options statistiques> > ;
title1 height=5 Institut;
title2
de;
title3 height=5 Mathmatiques;
footnote1 font=script justify=left
Universite de Toulouse;

4.2

Options gnrales

data=table sas indique le nom de la table ou, par dfaut, la dernire cre,
annotate= table contenant les complments graphiques.

4.3

Options dapparence

4.4

Options statistiques

Il est important de noter que chaque paramtre peut tre initialis ou redfini
diffrents endroits dun programme SAS : dans les commandes spcifiques
Elles spcifient les couleurs, les espacements et largeurs de colonnes ou
(symbol, legend, axes, pattern, title, footnote), par la barres. Il est galement possible dadjoindre un cadre (frame), de suppricommande goptions et dans chacune des procdures. Ceci impose de bien mer (nolegend) ou modifier la lgende. Une option annotate peut tre
distinguer les paramtres globaux, applicables tous les graphes, des para- introduite au niveau de chaque commande.
mtres spcifiques chaque graphe.

procdure gchart

Cette procdure trace des diagrammes en barres (hbar), en colonnes et histogrammes (vbar), en secteurs (pie) et arolaires (star). Elle peut traiter

sumvar= variable quantitative dont le cumul ou la moyenne est repr-

sent,
freq= variable de pondration des observations,
midpoints= liste des bornes de classes,

levels= nombre de classes,


type= spcifie ce que reprsente le graphique (par dfaut une frquence) :

Graphiques Haute Rsolution avec SAS/GRAPH

5.3

Options dapparence

Elles spcifient les couleurs, les polices de caractres, les tailles des bulles
cfreq (frquence cumule), cpt (pourcentage cumul), pct (pourcen(bubble),
le hachurage daires, la dfinition de lgendes, la superposition
tage), sum ou mean (associes sumvar=).
(plot).
group= reprsentation de plusieurs graphes cte cte suivant les modalits de la variable spcifie (hbar ou vbar),
5.4 Options daxes
subgroup= dcoupage des barres ou colonnes selon la participation des
Deux options permettent de dfinir les axes ou de leur assigner des dclaramodalits de la variable spcifie (hbar ou vbar).
tions antrieurs : vaxis=axisn pour laxe vertical et haxis=axisn pour
4.5 Options daxes
laxe horizontal o n caractrise la dfinition daxe concerne (cf. paragraphe
Deux options permettent de de dfinir les axes ou de leur assigner des dcla- 5.2.1.). De plus, frame trace un cadre tandis que noaxis supprime les axes.
rations antrieurs : gaxis=axisn pour laxe des groupes et maxis=axisn 5.5 Commandes
pour celui des bornes o n caractrise la dfinition daxe concerne (cf. paraby suivi du nom dune variable qualitative indique que les graphiques sont
graphe V.2.1.).
tracs par groupe dobservations ; la table doit tre trie.
plot liste des graphes sous la forme : y*x<=n|variable>, avec la mme
5 procdure gplot
syntaxe que prcdemment pour dsigner plusieurs graphes (a*(a b),. . . ).
La variable y fournit les ordonnes et x les abscisses des points reprsenGraphiques en haute rsolution de nuages de points en deux dimensions.
ts par des symboles dfinis dans la commande symboln ou par diff5.1 Syntaxe
rents symboles selon les valeurs de la variable spcifie qui induit une
classification.
Dans ce dernier cas, une lgende est cre par dfaut.
proc gplot <options gnrales> ;
bubble
liste
des
graphes
sous la forme : y*x = size o size est une vaby <descending> variable ;
riable
indiquant
la
taille
des bulles tracer autour des centres de coordonplot liste de graphiques
nes
x
et
y.
</ < annotate=data-set >
< options dapparence>
< options daxes>> ;
6 Annotate data set
bubble liste de graphiques
Une table dannotations, dfinie lors dune tape data, est une table SAS
</ < annotate=data-set >
contenant
les descriptifs dun ensembles de graphiques qui viendront se
< options dapparence>
superposer
aux rsultats des procdures prcdemment dcrites (gchart,
< options daxes>> ;
gplot,...). Il est alors possible de positionner tout libell ou toute figure
gomtrique simple et ainsi de personnaliser ses graphiques.

5.2

Options gnrales

data=table sas indique le nom de la table ou, par dfaut, la dernire cre,
annotate=table sas table contenant les complments graphiques.
uniform impose les mmes chelles aux axes des diffrents graphiques.

Des applications immdiates sont, par exemple, la production de plans factoriels avec identifications des points (variables, individus, modalits) par des
libells explicites ou encore le trac du cercle des corrlations en analyse en
composantes principales.

Par principe, chaque ligne ou observation dune table dannotations est


une commande de ralisation dun graphique particulier. Les valeurs de chacune des variables spcifient comment raliser ce graphique : type, emplacement, couleur,. . . . Les variables de la table dannotation ont des noms prdfinis ; les plus usuelles sont :
function indique ce quil faut trac : bar, draw, frame, pie, symbol, label,. . . ,
x positionnement en abscisses,
y positionnement en ordonnes,
size hauteur des caractres,
xsys unit de mesure des abscisses,
ysys unit de mesure des ordonnes,
hsys unit de mesure des hauteurs,
color couleur,
position dun texte par rapport aux coordonnes (cal gauche, centr,. . . ),
line type de ligne (par dfaut, continue),
text texte du libell
style police de caractres.
La mise en uvre de ces fonctionnalits est un peu fastidieuse mais cest
la seule faon de faire diter par SAS certains types de graphiques dont les
fameux plans factoriels avec les libells en clair de tous les points.
Cration dune table dannotations :
data annocomp;
set outcomp;
x
= prin1;
y
= prin2;
xsys= 2;
ysys= 3;
text= lib_ind;
size= 0.8;
label x = axe1;
label y = axe2;
keep x y text xsys ysys size;
run;

Graphiques Haute Rsolution avec SAS/GRAPH

SAS macros : criture de macros


commandes
Rsum
Cette vignette dcrit brivement les principes et objets du macro
langage de SAS permettant dcrire des macros commandes : macros variables, macros fonctions, passages de paramtres et syntaxe
dune macro commande.
Retour au plan du cours.

1
1.1

Introduction
Motivations

Ds quil sagit dcrire des programmes SAS suffisamment gnraux afin,


par exemple, de les appliquer diffrents jeux de donnes, il est ncessaire, par
souci defficacit, de faire appel aux ressources de SAS permettant de dfinir
des macro-variables et des macro-commandes.

SAS macros : criture de macros commandes

Le macro-langage, au mme titre, augmente les possibilits du langage de


base. Il permet de passer des paramtres entre les tapes DATA et PROC et de
systmatiser lenchanement dune squence donne dinstructions.
Les macro-variables et macro-commandes sont connues, sauf dclaration
explicite contraire (%global, %local), dans lenvironnement dans lequel
elles sont dclares : globalement pour toute une session SAS ou localement
lintrieur dune macro.

2
2.1

Macro-variables
syntaxe

La dclaration dune macro-variable consiste associer par la commande


%let une chane de caractres (jusqu 65534) un identificateur (de 1 32
caractres) :
%let nomvar1=taille;
%let nomvar2=poids;
%let varlist=csp sexe age taille poids revenu;
/* affichage du contenu : */
%put &varlist;

Lcriture de macros SAS est une activit courante dans les grandes enCertaines dclarations de macros variables sont implicites : compteur dune
treprises et les socits de service spcialises dans ce logiciel. Lobjectif est
boucle %do, paramtres dune macro-commande,. . . .
de concevoir puis carrosser un ensemble de traitement spcifiques afin de les
Dans la suite du programme, les rfrences une macro-variable sont prrendre accessibles des utilisateurs non spcialistes de SAS mais gros consomcdes du caractre & :
mateurs comme dans lindustrie pharmaceutique ou le marketing.

1.2

Principes

title "tude des variables &varlist";


proc plot;
Le principe gnral consiste associer une chane de caractres, une suite
plot &nomvar1*&nomvar2;
de commandes ou, un texte un identificateur. Par la suite, toute occurrence run;
de cet identificateur ou macro variable est remplace par le texte dsign au
cours dun traitement pralable lexcution proprement dite des commandes. Le caractre & est traduit au niveau du pr-traitement : remplacer la macroLe pr-processeur implicitement invoqu reconnat diffrents objets : va- variable qui suit par la chane de caractres avant de passer lexcution.
Attention aux chanes de caractres. Si la chane est entre "... ", une macro
riables, commentaires, commandes, fonctions, arguments, qui lui sont propres
(prcds des caractres & ou %) ; ils lui confrent les possibilits dun langage variable contenue dans la chane est interprte, remplace par sa "valeur". Ce
nest pas le cas si la chane est entre ....
de programmation rudimentaire mais structur.

Une macro-variable peut contenir elle-mme des commandes ou instructions SAS mais, dans ce cas, il est prfrable de dfinir une macro-commande.

SAS macros : criture de macros commandes

Macro fonction

Un ensemble de macros fonctions sappliquant des macros variables sont


Le systme gre des macros variables prdfinies comme sysdate et
prdfinies. En voici des exemples
sysday qui contiennent respectivement la date et le jour du dbut de la session SAS en cours. Excuter et consulter la fentre du journal :
%let semaine = lundi - mardi - mercredi - jeudi vendredi - samedi - dimanche;
%let longueur = %length(&semaine);
%put &sysdate;
%let jour2 = %scan(&semaine,2,-);
%put &sysday;
%put &_automatic_;
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
La dernire commande liste toutes les macros variables du systme. Ces masparateur est un tiret.
cros variables peuvent tre incluses dans un programme pour dater les sorties.
Par dfinition, une macro-variable sert stocker du texte. Par exemple, la
2.2 call symput
valeur dune macro-variable laquelle on affecte 1+2 est la chane de caractres 1+2 et non lentier 3. Toutefois, il est possible de forcer le compilateur
Linstruction call symput permet de crer une macro-variables en lui
macro effectuer lopration avec la macro fonction %eval qui opre des
affectant les valeurs dune variable dune table SAS. Cette instruction sutilise
soustractions, multiplications et divisions seulement sur des entiers partir
exclusivement dans une tape DATA.
dexpressions contenant des macro-variables. Si la valeur value contient des
CALL SYMPUT("nom-macro-var",valeur-macro-var);
dcimales, la valeur est tronque la partie entire.
Cela signifie que le contenu de cette macro variable nest pas prdfini par
une chane de caractres mais peut voluer en cours dexcution. Ainsi dans %let i = 22;
%let j = &i/7; /* j contient 22/7 */
lexemple :
%let k = %eval(&i/7); /* k contient 3 */
data _NULL_;
set table-sas;
call symput("nobs",_N_);
run;
Comme la variable prdfinie _N_ est incrment par le numro de lobservation courante, lissue de lexccution la macro variable contient comme
"valeur" le nombre dobservations de la table-sas. Cest videmment trs
pratique quand cette information nest pas connue a priori sur lensemble des
tables qui seront traites.

4
4.1

Macro-commandes
Syntaxe dune macro commande

La dclaration dune macro-commande (ou macro tout court) suit les mmes
principes,
%macro impdat;
%* ceci est un commentaire;
proc print;
run;
%mend impdat;

SAS macros : criture de macros commandes

elle peut inclure des paramtres qui deviennent des macro-variables locales :

%let dataset=&ldataset;
%let ident=&lident;
%let listev=&llistev;
%* Acp de dataset ;
%* ident : variable contenant les;
%*
identificateurs des individus;
%* llistev : liste des variables (numeriques);
%* par defaut : reduites sinon red=cov;

%macro plot(yvar,xvar);
proc plot;
plot &yvar*&xvar;
run;
%mend plot;
Lexcution dune macro est invoque en faisant prcder son nom du caractre % :

%* options edition;
options linesize=80 pagesize=60 number;
title "A.c.p. des donnees de &dataset";
footnote;

%impdat;
%plot(taille,poids);

4.2

Valeurs et ordre des paramtres

proc princomp data=donnees


outstat=eltpr out=compr
vardef=N &red;
var &listev;
run;
%mend acp;

Les paramtres peuvent avoir des valeurs par dfaut :


%macro plot(yvar=taille,xvar=poids);
proc plot;
plot &yvar*&xvar;
run;
%mend plot;
Il nest plus ncessaire de leur assigner des valeurs. Attention lordre des
paramtres qui est significatif dans le cas de paramtres sans valeurs par dfaut.
Sinon, le nom du paramtre est obligatoire au moment de lappel. Par principe,
les premiers paramtres dune macro commande sont ceux les plus utiliss qui
nont pas de valeur par dfaut.

/* acp reduite par defaut */


%acp(crime,staten,murder--auto);

6
6.1

Bibliothque de macros commandes


Dans un fichier

Une macro-commande doit tre dclare avant toute utilisation au cours


dun mme session SAS. Lorsque certaines macro-commandes sont rgulirement utilises, il est pratique de pouvoir les conserver les unes la suite des
Exemple rudimentaire dune macro commande pour faire de lAnalyse en autres dans un fichier muni de lextension .sas. En les ajoutant dans un ficomposantes principales partir de la procdure princomp.
chier appel macros.sas, par exemple, il suffira ensuite dans nimporte quel
programme SAS de faire lappel :
%macro acp(ldataset, lident, llistev, red=);
%INCLUDE "macro.sas";
%global dataset ident listev;

Exemple

6.2

Dans un rpertoire

Il est aussi possible de stocker les macros dans une bibliothque de macros
spcifique un utilisateur ou un groupe. Les rgles suivantes sont respecter :
1. Chaque dclaration de macro et une seule est enregistre dans un fichier
qui a pour nom lidentificateur de cette macro suivi de lextension .sas :
impdat.sas,
2. Tous ces fichiers sont regroups dans un ou des rpertoires qui constituent
la ou les bibliothques,
3. le ou les chemins daccs sont spcifis une fois pour toute dans le fichier de configuration SAS de lutilisateur. Encore faut-il avoir identifi
et localis ce fichier et pouvoir y avoir accs !
En dbut de chaque session, SAS charge le rpertoire de macros.

SAS macros : criture de macros commandes

La Procdure SAS/SQL

La Procdure SAS/SQL

describe dcl-description ;
drop dcl-suppression ;
insert dcl-insertion ;

Rsum
Cette vignette dcrit lusage de la procdure SQL qui permet linterrogation de tables SAS laide du langage de requte standard.
Retour au plan du cours.

Introduction

Syntaxe de la procdure

reset <options> ;
select dcl-slection ;
update dcl-mise jour ;
validate dcl-valuation ;

Remarques :
il est inutile de rpter linstruction proc sql avant chaque dclaration,
Le langage SQL (Structured Query Language) est un langage dinterrogasauf si lon excute une tape data ou si lon fait appel une autre proction de bases de donnes standardis commun la plupart des logiciels de base
dure entre deux commandes de sql.
de donnes. La procdure sql tudie dans cette vignette en constitue une im
linstruction run nest pas ncessaire.
plmentation dans la version 9.3 de SAS. Cette procdure permet dextraire,
corriger et mettre jour des donnes dans une table SAS, souvent plus rapide2.2 Options
ment que par une tape data.
inobs=n restreint le nombre dobservations traites (par exemple dans une
Le terme de table dsigne toujours une table SAS, correspondant un stoclause where) sur une table fournie en entre de la procdure.
ckage de donnes propre ce logiciel. On utilise galement deux nouveaux
outobs=n restreint le nombre dobservations traites (par exemple instypes dobjets : les vues et les index. Une vue est le stockage dune interrogares) dans une table retourne par la procdure.
tion ou ensemble de requtes : elle contient la description ou dfinition dune
feedback rappelle la dfinition des vues parentes lors de la description
table virtuelle. Une vue est donc une interrogation laquelle on donne un nom,
dune vue (commande describe).
pour son usage ultrieur dans une autre procdure SAS. Le principal intrt de
noprint pas ddition
dfinir une vue est le gain despace mmoire. Un index est un systme de pointeurs permettant dans certains cas daccder plus rapidement aux informations
3 Dtail des commandes
contenues dans une table SAS.

2.1

Commandes

3.1

La commande create

Elle permet de crer des tables, des vues, ou des index, partir dautres
tables ou dautres vues.

proc sql <options> ;

Cration dune table

alter table dclaration de modification ;

Syntaxe

create table dclaration de cration ;

create table nom-table as query-expression ;

delete dcl-destruction ;

create table nom-table like nom-table ;

La Procdure SAS/SQL

create table nom-table (def-col <, def-col>) ;

Cration dun index

La premire syntaxe est utilise pour stocker les rsultats dune interrogation.
Cest une faon de crer des tables temporaires. La deuxime syntaxe est utilise pour crer une table ayant les mmes noms de variables et mmes attributs
quune autre table. La troisime syntaxe est utilise quand on veut crer une
table dont les colonnes ne sont pas prsentes dans des tables dj existantes.
Les syntaxes 2 et 3 crent des tables vides, quil faut ensuite remplir avec la
commande insert. Cration dune table SAS permanente dans la librairie
sql

Un index stocke la fois les valeurs des colonnes dune table, et un systme de
directions qui permet daccder aux lignes de cette table partir des valeurs de
lindex. Lutilisation de lindex lors dinterrogations ou autres instructions de
la procdure est dtermine par le systme. Lindex est automatiquement mis
jour quand on modifie la table laquelle il est associ. Il permet damliorer
la performance de certaines commandes, par exemple la comparaison dune
colonne indexe une valeur constante laide de lexpression where.

libname sql sql;


proc sql;
create table sql.statlab like sasuser.statlab2;
create table sql.statlab2 as
select sexenf, gsenf, tenf_n,
penf_n, tenf_10, penf_10
from sasuser.statlab2
where (consm_n=nonfum);

Syntaxe
create <unique > index nom-index on nom-table ;
Le mot-cl unique garantit que chaque valeur de la colonne indexe est
unique. Ceci peut tre utile quand on manipule des variables telles que le numro de scurit sociale. Cration de lindex simple gse associ au groupe
sanguin
proc sql;
create index gse on sql.statlab2 (gsenf);

Cration dune vue


Syntaxe
create view nom-vue as query-exp <order byitem <, item>> ;
Une vue tant une interrogation stocke et ne contenant pas de donnes, on ne
peut utiliser les instructions suivantes quand on se rfre une vue : insert,
delete, alter, update.
Cration dune vue partir dune table
create view labv2 as
select sexenf, gsenf, tenf_n, penf_n,
tenf_10, penf_10
from sql.statlab2
where (sexenf=fille);
proc print data=labv2; run;

Cration de lindex composite consm associ deux variables


proc sql;
create index consm on sql.statlab2 (consm_n,consm_10);

3.2

La commande alter

Elle permet dajouter ou de supprimer des colonnes dans une table SAS, ou
den modifier les attributs (longueur, label, format).
Syntaxe
alter table nom-table
< add def-col <, def-col >>
< modify def-col <, def-col >>
< drop nom-col <, nom-col >> ;

La Procdure SAS/SQL

Modification dune table existante

Syntaxe

alter table sql.statlab2


add gender char(6);

insert into nom-table < ( nom-col < , nom-col > >)

3.3

Il existe deux autres manires dutiliser la commande insert (voir laide en


ligne).

La commande delete

Elle permet de supprimer des lignes dans une table.

values ( value < , value >) ;

Insertion de lignes dans une table

Syntaxe
delete from nom-table < where sql-exp > ;
Suppression des lignes dune table

insert into sql.statlab2


values (fille,AB,0,0,0,0,d)
values (garcon,AB,10,10,10,10,e);

delete from sql.statlab2 where gsenf=A+;

3.7

3.4

Elle permet de slectionner des colonnes dans une table, et dafficher les
rsultats dans la fentre output.

La commande describe

Elle donne la dfinition dune vue, et des vues parentes si loption


feedback est spcifie.
Syntaxe

La commande select

Syntaxe
select liste dobjets from liste < where sql-exp > ;

describe view nom-vue ;

3.8

La commande update

Description dune vue

Elle permet de modifier les valeurs de certaines observations pour des colonnes dune table existante.

describe view labv2;


Syntaxe

3.5

La commande drop

Elle permet de dtruire indiffremment une table ou une vue.


Syntaxe
drop table nom-table < , nom-table > ;

update nom-table set nom-col=sql-exp < where sql-exp > ;


Modification dune table
update sql.statlab2
set gender=sexenf;

drop view nom-vue < , nom-vue > ;

3.9
3.6

La commande insert

Elle permet dajouter des lignes une table.

La commande validate

Elle permet dvaluer la syntaxe dune interrogation sans lexcuter, et retourne un message dans la fentre log.

Syntaxe
validate query-exp ;
Cette commande est essentiellement utile dans des applications utilisant des
macro-variables. validate retourne alors une valeur indiquant si linterrogation est valide grce la macro-variable SQLRC (SQL Return Code).

Comparaison de la procdure sql avec


une tape data

On veut connatre la taille moyenne 10 ans et par sexe des enfants dont la
mre consommait entre 10 et 20 cigarettes par jour au moment de leur naissance. crire le programme permettant de calculer ces quantits laide des
procdures summary, sort et print ; puis comparer avec le programme
suivant utilisant la procdure sql.

4.1

Une utilisation de la proc sql

proc sql;
select sexenf , mean(tenf_10) as tmoy
from sasuser.statlab2
where consm_n=10a20cig
group by sexenf
order by tmoy;

La Procdure SAS/SQL