Vous êtes sur la page 1sur 23

Objectif du cours : acqurir les principes du langage de programmation SAS

Formation au logiciel SAS


Statistical Analysis System
Odile Wolber (CNAM)

Etape DATA
- import des donnes - saisie des donnes sous SAS - cration dun fichier texte partir dune table SAS - manipulation des donnes au cours dune tape DATA - chargement et fusion de tables SAS
Odile Wolber, CNAM, octobre 2003 2

Objectif du cours : acqurir les principes du langage de programmation SAS Etape PROC
- imprimer les observations dune table SAS : proc PRINT - trier un fichier selon des cls : proc SORT - afficher des comptages et des pourcentages : PROC FREQ - calculer des statistiques simples : PROC MEANS - calculer des corrlations : PROC CORR
Odile Wolber, CNAM, octobre 2003 3

Objectif du cours : acqurir les principes du langage de programmation SAS Etape PROC
- analyser une variable en dtail : PROC UNIVARIATE - afficher le contenu dune table : PROC CONTENTS - effectuer des oprations globales sur les tables : PROC DATASETS - crer des formats utilisateur : PROC FORMAT
Odile Wolber, CNAM, octobre 2003 4

Objectif du cours : acqurir les principes du langage de programmation SAS Autre modules SAS
- langage matriciel : module SAS IML - gestion de donnes informatiques des SGBD relationnels : SQL - graphiques : SAS GRAPH - macro langage SAS

Les fentres de SAS

Odile Wolber, CNAM, octobre 2003

Odile Wolber, CNAM, octobre 2003

Deux tapes : DATA et PROC Etape DATA


SAS possde son propre systme de gestion de bases de donnes. Les donnes sont structures sous forme de tables SAS (DATA SET). Une tape DATA dbute par linstruction : DATA nom_de_table; Si aucune table SAS nest cre (recopie dune table SAS dans un fichier texte) : DATA _NULL_; Ajout, suppression de variables ; fusion de tables SAS
Odile Wolber, CNAM, octobre 2003 7

Deux tapes : DATA et PROC Etape PROC


Analyse des tables SAS au moyen de procdures (ETAPE PROC) Par exemple : - imprimer les observations dune table - afficher la liste des variables contenues dans une table - obtenir la distribution dune variables - demander le calcul dune moyenne - effectuer une analyse factorielle, une classification
Odile Wolber, CNAM, octobre 2003 8

I. Etape DATA
Table SAS : matrice croisant en lignes les observations et en colonnes les variables.
Exemple : 15 premires lignes de la table SAS Russet
Obs 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Pays Argentine Australie Autriche Belgique Bolivie Brsil Canada Chili Colombie Costa Rica Cuba Danemark Rp. Dominic. Equateur Egypte gini 86.3 92.9 74 58.7 93.8 83.7 49.7 93.8 84.9 88.1 79.2 45.8 79.5 86.4 74 farm 98.2 99.6 97.4 85.8 97.7 98.5 82.9 99.7 98.1 99.1 97.8 79.3 98.5 99.3 98.1 rent 32.9 . 10.7 62.3 20 9.1 7.2 13.4 12.1 5.4 53.8 3.5 20.8 14.6 11.6 gnpr 374 1215 532 1015 66 262 1667 180 330 307 361 913 205 204 133 labo 25 14 32 10 72 61 12 30 55 55 42 23 56 53 64 inst 13.6 11.3 12.8 15.5 15.3 15.5 11.3 14.2 14.6 14.6 13.6 14.6 11.3 15.1 15.8 ecks 57 0 4 8 53 49 22 21 47 19 100 0 6 41 45 deat 217 0 0 1 663 1 0 2 316 24 2900 0 31 18 2 demo 2 1 2 1 3 3 1 2 2 2 3 1 3 3 3

I. Etape DATA
Tables permanentes / tables temporaires
Une table permanente est stocke dans une librairie. La librairie est dfinie par une instruction LIBNAME et assurant la correspondance entre le nom de librairie SAS et le nom physique (rpertoire) de la librairie : libname pays c:\Odile Wolber\Cours SAS; La table temporaire est dtruite la fin de la session SAS en cours : Par exemple, si on veut stocker de faon permanente la table temporaire Russet dans la librairie pays, la syntaxe est la suivante : data pays.Russet; set Russet; run; Odile Wolber, CNAM, octobre 2003 10

Source : Les donnes de Russet La rgression PLS Michel Tenenhaus Editions Technip page 172

Odile Wolber, CNAM, octobre 2003

I. Etape DATA
Import de donnes : cration dune table SAS partir dun fichier texte
Syntaxe : DATA nom_de_table; INFILE fichier_en_entre; INPUT format_de_lecture; RUN; DATA permet de nommer la table SAS crer INFILE indique la rfrence du fichier lire en entre INPUT prcise comment lire les donnes (position de la variable, son type caractre ou numrique - , nom de la variable)
Odile Wolber, CNAM, octobre 2003 11

I. Etape DATA
Import de donnes : cration dune table SAS partir dun fichier texte
Options de linstruction INFILE FIRSTOBS=numro_dobservation Numro de la premire observation du fichier en entre prendre en compte dans la table SAS cre. OBS=numro_dobservation Numro de la dernire observation du fichier en entre prendre en compte dans la table SAS cre. MISSOVER En cas denregistrements de longueur variable, si toutes les variables de lordre INPUT nont pas t lues, les variables non renseignes sont mises valeur manquante.
Odile Wolber, CNAM, octobre 2003 12

I. Etape DATA
Import de donnes : cration dune table SAS partir dun fichier texte
Exemple : Le fichier Russet est initialement un fichier texte stock dans le rpertoire c:\Odile Wolber\Cours SAS\Pays.txt. On cre une table SAS permanente du mme nom, stocke dans le mme rpertoire (librairie SAS pays prcdemment dfinie par une instruction libname). DATA pays.russet; INFILE c:\Odile Wolber\Cours SAS\Pays.txt; ; RUN; ou de manire quivalente, en utilisant linstruction filename : FILENAME russet c:\Odile Wolber\Cours SAS\Pays.txt; DATA pays.russet; INFILE russet; ; RUN;

I. Etape DATA
Import de donnes : cration dune table SAS partir dun fichier texte Exemple :
Si on utilise les options firstobs= et obs= : DATA pays.russet; INFILE c:\Odile Wolber\Cours SAS\Pays.txt firstobs=2 obs=4; ; RUN; Seules les lignes 2, 3 et 4 sont recopies dans la table SAS pays.russet :
Obs 1 2 3 Pays Australie Autriche Belgique Gini 92.9 74.0 58.7 Farm 99.6 97.4 85.8 Rent . 10.7 62.3 Gnpr 1215 532 1015 Labo 14 32 10 Inst 11.3 12.8 15.5 Ecks 0 4 8 Deat 0 0 1 Demo 1 2 1

Odile Wolber, CNAM, octobre 2003

13

Odile Wolber, CNAM, octobre 2003

14

I. Etape DATA
Import de donnes : cration dune table SAS partir dun fichier texte
Instruction INPUT
Linstruction la plus sre consiste prciser la colonne de dbut et la colonne de fin dune variable. On distingue les variables numriques et caractres, en faisant prcder les variables caractres par un signe $. Syntaxe : INPUT nom_de_variable <$> <colonne_de_dbut> <colonne_de_fin>; Si la variable noccupe quune colonne, la colonne de fin peut tre omise. Exemple :

I. Etape DATA
Import de donnes : cration dune table SAS partir dun fichier texte

Instruction INPUT
Au fur et mesure de lexcution de linstruction INPUT, un lment virtuel, appel pointeur de colonne est positionn afin de lire la variable suivante. Ce pointeur peut tre dplac avec les instructions suivantes : - INPUT @n dplace le pointeur la colonne n - INPUT +n dplace le pointeur de n colonnes vers la droite - INPUT / dplace le pointeur la ligne suivante Ces instructions posent des problmes lorsque le fichier contient des valeurs manquantes. Cest pourquoi on prfrera prciser les colonnes de dbut et de fin dune variable ( condition toutefois que les enregistrements soient de longueur fixe).
Odile Wolber, CNAM, octobre 2003 16

DATA pays.russet; INFILE c:\Odile Wolber\Cours SAS\Pays.txt; INPUT Pays $ 1-13 Gini 15-18 Farm 20-23 Rent 25-28Demo 52 ; Odile Wolber, CNAM, octobre 2003 15 RUN;

I. Etape DATA
Saisie des donnes sous SAS
Si les donnes sont saisies sous SAS, elles doivent :
- suivre directement ltape DATA - tre prcdes du mot cl CARDS - tre suivies dun caractre ; plac en dbut de ligne.
Exemple :

I. Etape DATA
Saisie des donnes sous SAS
data parc; input ZONE HERB $ BOSQUET $ EAU $ HIPPO $; cards; 1 courte oui proche moyen 2 haute oui loigne aucun 3 courte oui proche aucun 4 courte oui proche important 5 courte oui moyenne aucun 6 courte oui proche aucun 7 courte non loigne aucun 8 courte oui moyenne important 9 courte non loigne aucun 10 courte non loigne aucun ; run; Odile Wolber, CNAM, octobre 2003

Odile Wolber, CNAM, octobre 2003

17

18

I. Etape DATA
Export de donnes : cration dun fichier texte partir dune table SAS Pour crer un fichier texte partir dune table SAS : - assigner un fichier de sortie par une instruction FILENAME - crer une tape DATA _NULL_ (lobjectif nest pas de construire une table SAS, mais de recopier les lments dune table SA dans un fichier externe) - formater les variables laide de linstruction PUT

I. Etape DATA
Export de donnes : cration dun fichier texte partir dune table SAS
Instruction PUT
Linstruction PUT sutilise avec la mme logique que linstruction INPUT. Elle permet dcrire les donnes en utilisant ventuellement un format dcriture.

Syntaxe :
PUT <contrle du pointeur dcriture> <nom_de_variable1> <format_dcriture>; PUT <contrle du pointeur dcriture> <nom_de_variablen> <format_dcriture>;

- PUT @n var1 2. dplace le pointeur la colonne n - PUT +n var 1 2. dplace le pointeur de n colonnes - PUT / var1 2. dplace le pointeur au dbut de la ligne suivante
19 Odile Wolber, CNAM, octobre 2003 20

Odile Wolber, CNAM, octobre 2003

I. Etape DATA
Export de donnes : cration dun fichier texte partir dune table SAS
Exemple :
La table SAS pays.russet est recopie dans un fichier texte.

I. Etape DATA
Manipulation des donnes au cours dune tape DATA
- cration de variables Exemple : partir des variables du fichier pays.russet, on construit les variables suivantes : ln(RENT+1), ln(FARM), Exp(INST-16.3). La variable DEMO tant qualitative, on la remplace par les trois variables indicatrices des tats poltiques : DEMOSTAB, DEMOINST et DICTATUR : DATA pays.russet; SET pays.russet; LRENT=ln(RENT+1); LFARM=ln(FARM); EINST=Exp(INST-16.3); if DEMO=1 then DEMOSTAB=1; else DEMOSTAB=0; ; Odile Wolber, CNAM, octobre 2003 RUN;

FILENAME russet c:\Odile Wolber\Cours SAS\Russet.txt; DATA _NULL_; SET pays.russet; FILE russet; put pays $ @15 Gini @20 Farm@52 Demo; RUN;
ou de manire quivalente :

DATA _NULL_; SET pays.russet; FILE c:\Odile Wolber\Cours SAS\Russet.txt; put pays $ @15 Gini @20 Farm@52 Demo; RUN; Odile Wolber, CNAM, octobre 2003

21

22

I. Etape DATA
Manipulation des donnes au cours dune tape DATA
- conversion dune variable numrique en une variable caractre Exemple : la variable DEMO tant qualitative, on veut la remplacer par une variable caractre CDEMO. On utilise linstruction length : DATA pays.russet; SET pays.russet; LENGTH CDEMO $ 1; CDEMO=DEMO; RUN;
Odile Wolber, CNAM, octobre 2003 23

I. Etape DATA
Manipulation des donnes au cours dune tape DATA
- Slection de certaines observations : instructions IF et WHERE
Syntaxe : IF condition THEN OUTPUT; ou IF condition;

Linstruction IF filtre les observations en ne prenant en compte que celles qui vrifient la condition spcifie.
Exemple : Dans le fichier pays.russet, on slectionne uniquement les dmocraties :

DATA demo; SET pays.russet; IF demo=1 or demo=2; Odile Wolber, CNAM, octobre 2003 RUN;

24

I. Etape DATA
Manipulation des donnes au cours dune tape DATA
De manire quivalente, on peut utiliser linstruction WHERE : DATA demo; SET pays.russet; WHERE demo=1 or demo=2; RUN; - Suppression de certaines observations : instruction DELETE
Syntaxe : IF condition THEN DELETE;

I. Etape DATA
Manipulation des donnes au cours dune tape DATA - Slection de certaines variables : instructions DROP, KEEP et RENAME Ces mots-cls peuvent tre utiliss : - comme option de linstruction DATA ou de linstruction SET - comme instruction part entire

Odile Wolber, CNAM, octobre 2003

25

Odile Wolber, CNAM, octobre 2003

26

I. Etape DATA
Manipulation des donnes au cours dune tape DATA - Ne stocker quune partie des variables utilises dans ltape DATA : instruction KEEP
3 syntaxes possibles : DATA nom_de_table(KEEP=liste_de_variables) ; ou DATA nom_de_table ; SET nom_de_table(KEEP=liste_de_variables) ; ou DATA nom_de_table ; SET nom_de_table ; KEEP liste_de_variables;
Odile Wolber, CNAM, octobre 2003 27

I. Etape DATA
Manipulation des donnes au cours dune tape DATA - Ne pas stocker des variables cres au cours de ltape DATA : instruction DROP
3 syntaxes possibles : DATA nom_de_table(DROP=liste_de_variables) ; ou DATA nom_de_table ; SET nom_de_table(DROP=liste_de_variables) ; ou DATA nom_de_table ; SET nom_de_table ; DROP liste_de_variables;
Odile Wolber, CNAM, octobre 2003 28

I. Etape DATA
Manipulation des donnes au cours dune tape DATA - Renommer une ou plusieurs variables : instruction RENAME
3 syntaxes possibles : DATA nom_de_table(RENAME=(ancien_nom=nouveau_nom)) ; ou DATA nom_de_table ; SET nom_de_table(RENAME=(ancien_nom=nouveau_nom)) ; ou DATA nom_de_table ; SET nom_de_table ; RENAME ancien_nom1=nouveau_nom1ancien_nomn=nouveau_nomn;
Odile Wolber, CNAM, octobre 2003 29

I. Etape DATA
- Concatnation et chargement dune table : instruction SET
Syntaxe :
SET <nom_de_table1><nom_de_tablen;

La table rsultante contiendra toutes les variables provenant des tables en entre.

- Utilisation des variables FIRST. et LAST. :


Aprs tri dune table par une procdure SORT, lappel de cette table par une instruction :
SET nom_de_table;BY liste_de_variables; gnre automatiquement, pour chaque observation, une variable FIRST.variable_cl mise 1 sil y a eu changement de cl depuis lobservation prcdente, et une variable LAST.variable_cl mise 1 sil y a changement de valeur, pour la variable considre, entre lobservation courante et lobservation suivante. CNAM, octobre 2003 Odile Wolber, 30

I. Etape DATA
- Utilisation des variables FIRST. et LAST. :
Exemple : On a un fichier denquts, chaque individu tant rattach un mnage (repr par la variable MENAGE). Pour chaque individu, on a collect des informations aux 2 niveaux : mnage et individu. En outre, on possde ces informations pour deux annes (repres par la variable AN). On ne souhaite conserver, pour chaque anne, que les informations au niveau du mnage. Syntaxe : proc sort data=niv_ind; by menage an; run; data niv_men; set niv_ind; by menage an; if first.an; run;

I. Etape DATA
- Utilisation de linstruction RETAIN :
Lutilisation la plus courante consiste crer partir de linstruction RETAIN une variable compteur. Exemple : On a un fichier contenant les caractristiques des logements successifs occups par des mnages (reprs par la variable MENAGE). On veut compter le nombre de logements successifs occups par les mnages : Syntaxe : proc sort data=logement; by menage; run; data nb_log; set logement; by menage; retain nlog 0; if first.menage then nlog=0; nlog=nlog+1; if last.menage; Odile Wolber, CNAM, octobre 2003 run;

Odile Wolber, CNAM, octobre 2003

31

32

I. Etape DATA
- Appariement de tables SAS : instruction MERGE
Syntaxe : MERGE nom_de_table1 <IN=nom_de_variable>; nom_de_tablen <IN=nom_de_variable>; BY liste_de_variables;

I. Etape DATA
- Appariement de tables SAS : instruction MERGE
proc sort data=parc1; by Zone; run; proc sort data=parc2; by Zone; run; data parc; merge parc1 parc2; by Zone; run; Loption IN= nest pas indispensable. Si par exemple, on ne veut slectionner que les observations de la table1, les instructions seront les suivantes : MERGE nom_de_table1 <IN=A>; nom_de_tablen <IN=nom_de_variable>; BY liste_de_variables; Odile Wolber, CNAM, octobre 2003 IF A;

Les fichiers doivent tre tris, dans le mme ordre, selon la liste de variables noncs dans linstruction BY.
Exemple :

On dispose de deux tables SAS, sur 10 zones dun parc national, relatives aux caractristiques physiques de ces zones (table parc1) et la densit au km de neuf herbivores dans ces 10 zones (table parc2). On veut fusionner ces deux tables.
Odile Wolber, CNAM, octobre 2003 33

34

II. Etape PROC


Une procdure de traitement des donnes est annonce par le mot cl PROC suivi du nom de la procdure. Un certain nombre doptions et dinstructions permettent de dfinir le nom de la table en entre, les variables analyser, si les rsultats sont stocks dans une autre table Si aucun nom de table nest indiqu aprs PROC et le nom de la procdure, SAS traite la dernire table cre.

II. Etape PROC


Imprimer les observations dune table SAS : PROC PRINT
Cette procdure est utilise pour imprimer tout ou une partie des valeurs dune table SAS. Elle permet galement dimprimer des totaux et sous totaux pour des variables numriques.
Syntaxe : PROC PRINT DATA=nom_de_table <liste doptions>; VAR liste de variables; ID liste de variables; BY liste de variables; PAGEBY variable; SUMBY variable; SUM liste de variables; RUN;
Odile Wolber, CNAM, octobre 2003 36

Odile Wolber, CNAM, octobre 2003

35

II. Etape PROC


Imprimer les observations dune table SAS : PROC PRINT
Exemple : On veut imprimer le nombre de tus lors de manifestations violentes en fonction de linstabilit politique :

II. Etape PROC


----------- Demo=1 ---------Obs 1 2 ... 12 13 14 15 ---Demo Royaume-Uni Sude Suisse Uruguay 0 0 0 1 ---16 Pays Australie Belgique Deat 0 1

proc sort data=pays.russet; by demo; run; proc print; var pays deat; by demo; sum deat; run;
Odile Wolber, CNAM, octobre 2003 37

Odile Wolber, CNAM, ----------- Demo=2 ---------- octobre 2003

38

II. Etape PROC


Trier une table SAS selon une cl : PROC SORT
Cette procdure est utilise pour trier les observations dune table SAS selon une ou plusieurs variables. Les observations, une fois tries, peuvent tre stockes dans une nouvelle table (instruction OUT=).
Syntaxe : PROC SORT DATA=nom_de_table OUT=nom_de_table; BY <DESCENDING> variable1<DESCENDING> variablen; RUN; OUT= Table SAS en sortie. Si cette option est absente, la table dorigine est remplace par la table trie. <DESCENDING> Si ce mot-cl est prcis, les observations sont tries par ordre dcroissant de la variable indique aprs DESCENDING
Odile Wolber, CNAM, octobre 2003 39

II. Etape PROC


Afficher des comptages et des pourcentages : PROC FREQ
Cette procdure produit des tableaux de frquences unidimensionnelles ou des tris croiss multidimensionnels. Elle permet galement de faire certains tests statistiques tels que le test du chi2.
Syntaxe : PROC FREQ data=nom_de_table <liste doptions>; BY liste_de_variables; TABLES requte </liste doptions>; WEIGHT variable; RUN; Tables permet de dfinir la liste des distributions souhaites. Les tableaux croiss sont obtenus en sparant les variables par des astrisques.
Odile Wolber, CNAM, octobre 2003 40

II. Etape PROC


Afficher des comptages et des pourcentages : PROC FREQ
Exemple : Dans ltude de la relation herbivores-environnement, on veut croiser la densit au km des lphants et la proximit de leau : proc freq data=parc; tables A*EAU; run; Dans le cas de demande de plusieurs distributions simultanes, il suffit de sparer chaque distribution par un espace. Par exemple, TABLES a b correspond la demande la distribution simple de la variable a, puis de celle de la variable b. On peut stocker les rsultats de la procdure dans une table SAS : TABLES requte / OUT=nom_de_table; La table rsultante comprend, outre les variables dorigine, leffectif (variable COUNT) et le pourcentage par rapport lensemble des observations Odile Wolber, CNAM, octobre 2003 41 (PERCENT)

II. Etape PROC


Calculer des statistiques simples : PROC MEANS
Cette procdure permet de calculer des statistiques simples telles que la moyenne, la variance, le minimum, le maximum ou ltendue, sur une population ou sur des sous-populations.
Syntaxe : PROC MEANS data=nom_de_table <liste doptions>; CLASS liste de variables; VAR liste de variables numriques; BY liste de variables; FREQ variable; WEIGHT variable; ID variable; OUTPUT OUT=nom_de_table; RUN; Seule linstruction VAR est obligatoire. octobre 2003 Odile Wolber, CNAM,
42

II. Etape PROC


Calculer des statistiques simples : PROC MEANS
Comparaison des instructions CLASS et BY : linstruction CLASS permet dobtenir des sorties plus lisibles lorsque les sous-populations tudies sont constitues partir du croisement de deux variables ou plus. Linstruction CLASS permet galement dafficher les effectifs de chaque sous-population.
VAR= variables numriques pour lesquelles on sollicite la procdure WEIGHT variable de pondration OUTPUT permet de stocker les rsultats dans une table OUTPUT OUT=nom_de_table <statistiques conserver>; ID la valeur maximum de la variable mentionne, au niveau de chaque groupe dfini par linstruction CLASS, sera conserve dans la table de sortie.
Odile Wolber, CNAM, octobre 2003 43

II. Etape PROC


Calculer des statistiques simples : PROC MEANS
Par dfaut, PROC MEANS calcule les statistiques suivantes: N nombre dobservations sur lesquelles sont bass les calculs MEAN moyenne empirique STD cart-type empirique MIN valeur minimale MAX valeur maximale PROC MEANS peut galement calculer dautres statistiques, parmi lesquelles : KURTOSIS coefficient de kurtosis SKEWNESS coefficient de symtrie SUM somme T valeur de Student VAR variance
Odile Wolber, CNAM, octobre 2003 44

II. Etape PROC


Calculer des statistiques simples : PROC MEANS
Tous les rsultats issus de PROC MEANS peuvent tre sauvegards dans une table. Alors qu lcran ne sont affiches que les statistiques au niveau le plus fin, toutes les statistiques aux niveaux agrgs sont conserves dans la table de sortie. Syntaxe : OUTPUT OUT=nom_de_table <statistiques__conserver>;
Trois formes de demandes statistiques statistique= calcul des statistiques pour les variables prcises dans VAR= et donne les mmes noms aux variables en sortie que les variables en entre. Une seule statistique peut tre sauvegarde par ce biais. statistique=nom1nomn calcul des statistiques pour les variables de VAR mais les stocke sous un nom diffrent. Les noms de la liste sont attribus dans lordre des variables de VAR. statistique(var1varn)=nom1nomn applique les statistiques un sous-ensemble Odile Wolber, CNAM, octobre 2003 45 des variables de VAR.

II. Etape PROC


Calculer des statistiques simples : PROC MEANS
Exemple : Sur le fichier pays.russet, on calcule la moyenne et la variance des variables gini, farm et gnpr, en distinguant les trois groupes de pays (dmocratie stable, dmocratie instable et dictature). On stocke les rsultats dans la table temporaire m_russet. Aucun rsultat nest imprim dans la fentre OUTPUT. proc means data=pays.russet mean var noprint; class demo; var gini farm gnpr; output out=m_russet mean(gini farm gnpr)=m_gini m_farm m_gnpr var(gini farm gnpr)=v_gini v_farm v_gnpr; run;

Odile Wolber, CNAM, octobre 2003

46

II. Etape PROC


Calculer des statistiques simples : PROC MEANS
Contenu de la table m_russet :
Obs Demo _TYPE_ _FREQ_ 1 2 3 4 . 1 2 3 0 1 1 1 47 15 11 21 m_gini 71.3681 63.8867 74.0636 75.3000 m_farm m_gnpr v_gini v_farm v_gnpr

II. Etape PROC


Calculer des coefficients de corrlation : PROC CORR
PROC CORR permet le calcul des coefficients de corrlation entre les variabes (de PEARSON, de SPEARMAN, de KENDALL ou de HOEFFDING) et peut produire des matrices de produits croiss ainsi que des matrices de variance-covariance. On peut aussi calculer des statistiques univaries simples et cre de nouvelles tables contenant ces statistiques univaries et les corrlations. Syntaxe : PROC CORR data=nom_de_table <liste doptions>; BY liste de variables; FREQ variable; PARTIAL variable; VAR liste de variables; WEIGHT variable; WITH liste de variables; Odile Wolber, CNAM, octobre 2003 RUN;

92.9319 559.26 206.817 45.0018 239904.11 88.7600 1055.00 171.370 35.6183 272558.57 94.2545 490.27 211.895 42.7907 88473.42 95.2190 241.29 187.566 37.6676 23652.51

Odile Wolber, CNAM, octobre 2003

47

48

II. Etape PROC


Calculer des coefficients de corrlation : PROC CORR
BY la procdure est excute pour chaque sous groupe. VAR variables pour lesquelles les coefficients sont calculs. WITH utilis pour obtenir les corrlations uniquement pour certaines combinaisons de variables. Indiquer dans linstruction WITH les variables dont on veut les corrlations avec les variables de VAR. WEIGHT variable de pondration. A utiliser uniquement pour le calcul du coefficient de Pearson. FREQ spcifie la variable numrique dont la valeur reprsente la frquence de lobservation.
Odile Wolber, CNAM, octobre 2003 49

II. Etape PROC


Calculer des coefficients de corrlation : PROC CORR
Exemple 1 : Sur le fichier pays.russet, on calcule la corrlation entre les variables gini farm rent. Les rsultats sont stocks dans le fichier c_russet1 : proc corr data=pays.russet outp=c_russet1; var gini farm rent; run; Obs 1 2 3 4 5 6 _TYPE_ MEAN STD N CORR CORR CORR _NAME_ Gini Farm Rent 21.7477 17.8461 44.0000 0.1556 0.1982 1.000050

71.3681 92.9319 14.3811 6.7083 47.0000 47.0000 Gini 1.0000 0.9379 Farm 0.9379 1.0000 Rent Wolber, CNAM, octobre 20030.1982 0.1556 Odile

II. Etape PROC


Calculer des coefficients de corrlation : PROC CORR
Exemple 2 : Sur le fichier pays.russet, on calcule la corrlation des variables gini farm rent avec les variables gnpr et labo. Les rsultats sont stocks dans le fichier c_russet2 : proc corr data=pays.russet outp=c_russet2; var gini farm rent; with gnpr labo; run; Obs 1 2 3 4 5 _TYPE_ MEAN STD N CORR CORR _NAME_ Gini Farm Rent 21.7477 17.8461 44.0000 -0.0591 -0.0473 51

II. Etape PROC


Les procdures de gestion des donnes
PROC CONTENTS affiche la description dune table : nombre dobservations, nombre de variables, liste et position des variables.
Syntaxe : PROC CONTENTS data=nom_de_table; <OUT=nom_de_table>; RUN; OUT stocke le rsultat de la demande dans une table SAS.

71.3681 92.9319 14.3811 6.7083 47.0000 47.0000 Gnpr -0.2997 -0.3483 Labo Wolber, CNAM, octobre 2003 0.2989 0.2438 Odile

Odile Wolber, CNAM, octobre 2003

52

II. Etape PROC


Les procdures de gestion des donnes
PROC DATASETS permet deffectuer des oprations globales sur les tables.
Syntaxe : PROC DATASETS library=nom_de_librairie; <DELETE>; RUN; Les principales oprations couvertes par cette procdure sont : CONTENTS liste la description dune table (analogue la PROC CONTENTS) CHANGE ou AGE renomme une table COPY copie ou dplace une ensemble de tables dune librairie une autre DELETE dtruit un ensemble de tables APPEND concatne deux Odile Wolber, CNAM, octobre 2003 tables 53

II. Etape PROC


Notion de format
Un format permet de regrouper plusieurs modalits sous un mme libell. On distingue des formats caractres, appliqus des variables caractres, et des formats numriques, appliqus des variables numriques. Deux tapes : - cration et gestion de formats : PROC FORMAT - utilisation de formats : instructions de FORMAT existants dans de nombreuses procdures.
Syntaxe : PROC FORMAT DATA=nom_de_table <liste doptions>; VALUE nom_de_format Liste_de_valeurs=valeur1 formate Liste_de_valeurs=valeurn formate ; RUN; Odile Wolber, CNAM, octobre 2003

54

II. Etape PROC


Notion de format
Chaque liste de valeurs peut tre compose : - dune valeur simple 75=Paris - dune liste continue de valeurs 92-94=Petite couronne - dune liste exhaustive de valeurs 92.93.94=Petite couronne - dune liste discontinue de valeurs 75.77.78.91-95=Rgion parisienne Mots cls rservs : LOW plus petite valeur rencontre dans la table HIGH plus grande valeur rencontre dans la table OTHER toutes les valeurs non prvues par les autres classes
Odile Wolber, CNAM, octobre 2003 55

II. Etape PROC


Notion de format
Exemple 1 : Regroupement dges en classes quinquennales : PROC FORMAT; VALUE FQUIN 15-19=15 19 ans 20-24=20 24 ans 25-29=25 29 ans 30-34=30 34 ans 35-39=35 39 ans 40-HIGH=40 ans et plus ; RUN; PROC FREQ DATA=fic_age; TABLES age; FORMAT age FQUIN.; RUN;
Odile Wolber, CNAM, octobre 2003 56

II. Etape PROC


Notion de format
Exemple 2 : Regroupement des dpartements en rgion : PROC FORMAT; VALUE $ REGION Paris,Hauts-de-Seine,Seine-Saint-Denis,Val de Marne,Yvelines, Val dOise,Seine et Marne=Ile-de-France Ardennes,Aube,Marne,Haute-Marne=Champagne-Ardenne ; RUN; PROC FREQ DATA=fic_dpt; TABLES dpt; FORMAT dpt $REGION.; RUN;
Odile Wolber, CNAM, octobre 2003 57

II. Etape PROC


Rduction des variables quantitatives
PROC STANDARD permet de rduire ou standardiser les variables quantitatives Syntaxe : PROC STANDARD <liste doptions> ; BY <descending> liste_de_variables ; VAR liste_de_variables ; WEIGHT variables ; BY : suivi du nom dune variable qualitative indique que les statistiques sont calcules par groupe dobservations ; la table doit tre pralablement trie. VAR : variables standardises et recopies dans la table de sortie (instruction OUT=). Par dfaut, toutes les variables numriques sont traites. WEIGHT : nom de la variable contenant les pondrations des observations.
Odile Wolber, CNAM, octobre 2003

58

II. Etape PROC


Transposition des matrices
PROC TRANSPOSE Syntaxe :
PROC TRANSPOSE<liste doptions> ; VAR liste_de_variables ; COPY liste_de_variables ; BY liste_de_variables ; BY : une observation est cre pour chaque variable transpose et pour chaque groupe. COPY : variables recopies dans la table de sortie sans transposition. VAR : variables transposes et recopies dans la table de sortie ; par dfaut, toutes les variables numriques sont traites. Options principales : OUT = TABLE SAS spcifie le nom de la tables cre NAME = spcifie le nom de la variable cre qui contiendra les noms des anciennes variables pour dsigner les observations (par dfaut _name_).
Odile Wolber, CNAM, octobre 2003 59

II. Etape PROC


Transposition des matrices
Exemple : proc transpose data=DataOW.pays out=pays name=variable; var Gini Ecks Farm; run;
Obs 1 2 3 variable Gini Ecks Farm COL1 86.3 57.0 98.2 COL2 92.9 0.0 99.6 COL3 COL45 74.0 4.0 97.4 81.7 1.0 96.6 COL46 90.0 36.0 99.3 COL47 43.7 9.0 79.8

Odile Wolber, CNAM, octobre 2003

60

III. Le langage matriciel


SAS IML : module spcialis interprtant un langage de calcul matriciel. Lobjet de base de manipulation du langage est une matrice, un tableau bidimensionnel (nrow X ncolumn) de valeurs numriques ou de caractres. Un table SAS peut tre lue dans une matrice ou, inversement, cre partir dune matrice. SAS IML commence par linstruction PROC IML et se termine par QUIT.
Syntaxe :

III. Le langage matriciel


Lire les colonnes dune table SAS et les mettre en matrice

Pour copier les variables var1 var2 varn dans la matrice X : proc iml ; use nom_de_table ; READ ALL VAR {var1 var2 varn} INTO X; QUIT; Pour copier toutes les variables dans la matrice X : proc iml ; use table SAS ; READ ALL VAR _ALL_ INTO X; QUIT; Odile Wolber, CNAM, octobre 2003

Odile Wolber, CNAM, octobre 2003

61

62

III. Le langage matriciel


Crer une table SAS partir dune matrice Syntaxe : Pour copier la matrice X dans une table SAS : proc iml ; ; CREATE nom_de_table FROM matrice_X ; APPEND FROM matrice_X ; CLOSE nom_de_table ; quit;

III. Le langage matriciel


Dfinir un vecteur colonne ou une matrice
Pour dfinir un vecteur colonne au cours dune procdure IML : X={1 2 3} ; Pour dfinir une matrice 2X3 : A = {2 1 9, 1 3 4} ; ou : A = {2 1 9, 1 3 4} Pour transposer une matrice X : Y=X` ; ou : Y=T(X) ;

Odile Wolber, CNAM, octobre 2003

63

Odile Wolber, CNAM, octobre 2003

64

III. Le langage matriciel


Les fonctions matricielles
La fonction j(n1,n2,val) peut tre utilise pour crer une matrice de n1 lignes et n2 colonnes dont tous les lments prennent la valeur val : A=j(1,5,1) cre un vecteur ligne de 5 colonnes prenant la valeur 1. Pour crer la matrice identit, on utilise la fonction I : Ident=I(4) cre une matrice identit 4X4. La fonction DIAG permet de crer une matrice diagonale dont les lments sont les termes diagonaux de la matrice argument. Exemple : D proc iml; X={4 9 6, 2 5 7, 1 9 7}; => 4 0 0 D=diag(X); print D; 0 5 0 quit; 0 0 7
Odile Wolber, CNAM, octobre 2003 65

III. Le langage matriciel


Les fonctions matricielles
La fonction VECDIAG permet de crer un vecteur dont les lments sont les lments diagonaux de la matrice argument. Le calcul des vecteurs et des valeurs propres dune matrice seffectue partir des fonctions EIGVEC et EIGVAL.
La fonction EIGVAL retourne le vecteur colonne des valeurs propres, tries dans leur ordre dcroissant. La fonction EIGVEC retourne la matrice des vecteurs propres.
Odile Wolber, CNAM, octobre 2003 66

III. Le langage matriciel


Les fonctions matricielles
La fonction TRACE retourne la trace de la matrice. La fonction DET calcule le dterminant dune matrice. Linverse dune matrice peut tre utilise partir de la fonction INV : Y=INV(X) Le calcul dune puissance dune matrice seffectue partir de loprateur ** : Y=X**

III. Le langage matriciel


Les rsultats obtenus par la fonction INV ne sont pas toujours trs stables. Ils ne le sont pas non plus lorsque lon calcule une puissance ngative dune matrice. Cest pourquoi pour calculer X ( ngatif), il est prfrable de procder selon les tapes

dcrites ci-aprs :
Odile Wolber, CNAM, octobre 2003 68

Odile Wolber, CNAM, octobre 2003

67

III. Le langage matriciel


1. Calcul de L, matrice diagonale des valeurs propres de X :
PROC IML ; USE nom_de_table1 ; READ ALL VAR {var1 var2 var3} INTO X ; L=DIAG(EIGVAL(X)) ; CREATE nom_de_table2 FROM L ; APPEND FROM L ; CLOSE L ; QUIT ;
Odile Wolber, CNAM, octobre 2003 69

III. Le langage matriciel 2. Calcul de L :


DATA nom_de_table2 ; SET nom_de_table2(KEEP=COL1-COL3) ; COL1=COL1** ; COL2=COL2** ; COL3=COL3** ; RUN ;

Odile Wolber, CNAM, octobre 2003

70

III. Le langage matriciel


3. Calcul de U, matrice des vecteurs propres de X, puis de X = U L U :
PROC IML; USE nom_de_table2; READ ALL VAR _ALL_ INTO L; USE nom_de_table1; READ ALL VAR {var1 var2 var3} INTO X; U=EIGVEC(X); X=U*L*U` ; QUIT;
Odile Wolber, CNAM, octobre 2003 71

IV. SAS SQL


Le SQL (Structured Query Language) est le langage universel de gestion des donnes informatiques des SGBD relationnels.
Extraction de donnes Syntaxe : PROC SQL ; CREATE TABLE nom_de_table ( variable1 type1(long1) <LABEL=label1 FORMAT=fmt1 INFORMAT=inf1>, variable2 type2(long2) <LABEL=label2 FORMAT=fmt1 INFORMAT=inf1>, variable3 type3(long3) <LABEL=label3 FORMAT=fmt1 INFORMAT=inf1>, ); QUIT ; Odile Wolber, CNAM, octobre 2003

72

IV. SAS SQL


Exemple : crer la table PARC avec les variables : - Zone (ZONE), entier sur 2 caractres - Hauteur de lherbe (HERB), caractre (longueur 6) - Prsence de bosquets (BOSQUET), caractre (longueur 3) - Accs leau (EAU), caractre (longueur 8) - Prsence dhippopotames (HIPPO), caractre (longueur 8) proc sql; create table parc( ZONE integer label='zone' format=2., HERB char(6) label='hauteur de l"herbe', BOSQUET char(3) label='prsence de bosquets', EAU char(8) label='accs l"eau', HIPPO char(8) label='prsence d"hippopotames'); quit;
Odile Wolber, CNAM, octobre 2003 73

IV. SAS SQL


La commande SELECT La commande SELECT permet informations par une slection :
Syntaxe : SELECT variable <,variable>
FROM nom_de_table ou nom_de_vue nom_de_vue> <WHERE expression> <GROUP BY variable <,variable>> <HAVING expression> <ORDER BY variable <,variable>>;
Odile Wolber, CNAM, octobre 2003

de

rechercher

des

<,nom_de_table

ou

74

IV. SAS SQL


Exemple :
proc sql; select ZONE, HERB from parc3 where ZONE>6; quit;
Le rsultat dune requte SELECT est par dfaut affich dans lOUTPUT ZONE HERB ___________________________ 7 courte 8 courte 9 courte 10 courte 11 courte 12 haute 13 courte
Odile Wolber, CNAM, octobre 2003 75

IV. SAS SQL


On peut aussi stocker le rsultat dune requte SELECT dans une table SAS : Exemple : on slectionne toutes les variables pour les zones 7 et plus. proc sql; create table extract as select * from parc3 where ZONE>6; quit;

Odile Wolber, CNAM, octobre 2003

76

IV. SAS SQL


La commande WHERE La commande WHERE permet de spcifier un critre de slection. Exemple : crer une table EXTRACT des zones 7 et plus et dont laccs leau contient la chane de caractre loig . proc sql;
create table extract as select * from parc3 where ZONE>6 and EAU like '%loig%';

IV. SAS SQL


La clause ORDER BY
La clause ORDER BY permet de trier le rsultat de la requte. Options suivantes de la proc SQL permettent de restreindre le nombre dobservations traites : INOBS=n restreint n le nombre dobservations de chaque table incorporer (les n premires). OUTOBS=n restreint n le nombre dobservations en sortie (les n dernires).

run; On obtient la table EXTRACT suivante :


Obs 1 2 3 4 ZONE 7 9 10 12 HERB BOSQUET EAU HIPPO aucun aucun aucun aucun

courte non loigne courte non loigne courte non loigne haute oui loigne Odile Wolber, CNAM, octobre 2003

77

Odile Wolber, CNAM, octobre 2003

78

IV. SAS SQL


La clause ORDER BY
Exemple : trier la table parc3 par la variable ZONE (ordre descendant) et ne conserver que les variables ZONE, HIPPO, EAU et la dernire observation pour laquelle il existe un bosquet. proc sql outobs=1; select ZONE,HIPPO,EAU from parc3 where BOSQUET='oui' order by ZONE desc; run; Il saffiche dans la fentre OUTPUT :
ZONE HIPPO EAU _____________________ 13 Wolber, CNAM, octobre proche aucun Odile 2003

IV. SAS SQL


Supprimer les doublons : option DISTINCT
Elimine les doublons sur les variables HERB, BOSQUET et EAU. Exemple : proc sql; select distinct HERB, BOSQUET, EAU from parc3 order by HERB desc; run; Dans la fentre OUTPUT saffiche le rsultat suivant :
HERB BOSQUET EAU haute oui loigne courte non loigne courte oui moyenne Wolber, CNAM, octobre 2003 courte Odileoui proche

79

80

IV. SAS SQL


Regrouper les modalits dune variable : la clause GROUP BY
La clause GROUP BY permet de regrouper les modalits dune variable. Cette clause est utilise uniquement lorsque la requte utilise une fonction somme. SELECT fonction (variable) FROM table GROUP BY variable1, variable2 Lexpression HAVING permet doprer sur un sous-ensemble dobservations de la table. Cest lquivalent du WHERE appliqu au groupe. La clause GROUP BY doit toujours prcder une expression HAVING et dfinit la groupe sur lequel lexpression HAVING va oprer. On utilise lexpression HAVING lorsque la requte utilise une fonction de groupe (AVG, COUNT).
Odile Wolber, CNAM, octobre 2003 81

IV. SAS SQL


Exemple : proc sql; select mean(Gini) as Mgini from pays.russet group by Demo having Mgini>70; quit; Regroupement par type de rgime (Demo) et calcul de la moyenne des coefficients de gini. Slection des observations pour lesquelles la moyenne (Mgini) est suprieure 70.
Odile Wolber, CNAM, octobre 2003 82

IV. SAS SQL


Les fonctions
Ces fonctions sont les suivantes : - MEAN, AVG : moyenne - COUNT, N : compte le nombre de valeurs non manquantes - CV : coefficient de variation - MAX : donne la plus grande valeur dune variable - MIN : donne la plus petite valeur dune variable - SUM : somme - VAR : variance

IV. SAS SQL


Exemple : calculer la moyenne du coefficient de gini, les coefficients minimal et maximal de gini par type de rgime pour la table pays.russet.
proc sql; select Demo, avg(Gini) LABEL='Moyenne des coefficients de Gini', min(Gini) LABEL='Coefficient minimal', max(Gini) LABEL='Coefficient maximal' from pays.russet group by Demo; quit;

Syntaxe :
SELECT fonction1(variable) <AS nomvar1 LABEL=label>, fonction2(variable) <AS nomvar2 LABEL=label>, FROM table GROUP BY variable AS permet de donner un nom la variable rsultat lorsque lon cre une table en sortie (CREATE TABLE). LABEL permet dassocier un label la colonne.
Odile Wolber, CNAM, octobre 2003 83

On obtient la sortie suivante :


Moyenne des coefficients Coefficient Coefficient Demo de Gini minimal maximal 1 63.88667 45.8 92.9 2 74.06364 47 93.8 Odile Wolber, CNAM, octobre 2003 3 75.3 43.7 93.8

84

IV. SAS SQL


Lexpression when
Cette expression permet de changer la reprsentation des donnes en donnant un code chiffr une chane de caractres ou inversement, en donnant un code un intitul plus significatif. Exemple : on recode en binaire la variable HIPPO : 1 si prsence dhippopotames, 0 sinon.
proc sql; select *, case when HIPPO='aucun' THEN 0 else 1 end as BIN_HIP from parc3; run;

IV. SAS SQL


Les jointures
1/ On slectionne communes.
PROC SQL ; SELECT a.*, b.* FROM table1 AS a, table2 AS b WHERE a.var1=b.var1; QUIT;

uniquement

les

observations

On obtient la sortie suivante :


ZONE HERB BOSQUET EAU HIPPO BIN_HIP 1 courte oui proche moyen 1 2 haute oui loigne aucun 0 3 courte oui proche aucun 0 85 4 Odile Wolber, CNAM, octobre 2003 courte oui proche importan 1

Cette jointure correspond au cas IF INA AND INB du merge en SAS de base.
Odile Wolber, CNAM, octobre 2003 86

IV. SAS SQL


Les jointures
2/ Jointure gauche
PROC SQL ; SELECT a.*, b.* FROM table1 AS a LEFT JOIN table2 AS b ON a.var1=b.var1; QUIT;

IV. SAS SQL


Les jointures
3/ Jointure droite :
PROC SQL ; SELECT a.*, b.* FROM table1 AS a RIGHT JOIN table2 AS b ON a.var1=b.var1; QUIT;

Elle correspond au cas IF INA du merge.

Elle correspond au cas IF INB du merge.

Odile Wolber, CNAM, octobre 2003

87

Odile Wolber, CNAM, octobre 2003

88

IV. SAS SQL


Les jointures
4/ Jointure full
PROC SQL ; SELECT a.*, b.* FROM table1 AS a FULL JOIN table2 AS b ON a.var1=b.var1; QUIT;

IV. SAS SQL


Les jointures
5/ Produit cartsien
PROC SQL ; SELECT a.*, b.* FROM table1 AS a table2 AS b; QUIT;

Elle correspond au merge by sans condition.


Odile Wolber, CNAM, octobre 2003 89

On fusionne chaque observation de la table A avec chaque observation de la table B. Si A contient na observations et B nb observations, le rsultat contient naXnb lignes.
Odile Wolber, CNAM, octobre 2003 90

IV. SAS SQL


Les jointures
6/ Jointure dune table avec elle-mme Il est possible de faire une jointure dune table avec elle-mme pour obtenir davantage dinformations. Exemple : Nous avons la table EMPLOI avec les variables : - Empnum (numro de lemploy) - Empnom (nom de lemploy) - Emptitre (titre de lemploy) - Numsup (numro du suprieur)
EMPNUM 101 201 213 214 401 412 EMPNOM John Betty Joe Jeff Sam Nick EMPTITRE head man. manager respvent respvent manager respvent NUMSUP . 101 201 201 101 401

IV. SAS SQL


proc sql; select a.*, b.EMPNOM as SUPNOM, b.EMPTITRE as SUPTITRE from emploi as a, emploi as b where a.NUMSUP=b.EMPNUM; quit;
EMPNUM 101 201 213 214 401 412 EMPNOM John Betty Joe Jeff Sam Nick EMPTITRE head man. manager respvent respvent manager respvent NUMSUP . 101 201 201 101 401 SUPNOM John Betty Betty John Sam SUPTITRE head man. manager manager head man. manager
92

Construire une table Odile Wolber, CNAM, octobre 2003 avec pour chaque employ le nom de 91son suprieur hirarchique (nomsup) et son titre (titresup).

Odile Wolber, CNAM, octobre 2003

Lunion

IV. SAS SQL


La commande INSERT INTO

IV. SAS SQL

Loprateur UNION est un oprateur ensembliste. Il effectue lunion des rsultats de deux requtes SELECT, cest dire qu partir de deux tables rsultats, il en cre une troisime comportant lensemble des observations des deux tables de dpart, en liminant les doublons parfaits et en triant selon lordre des variables dans la commande select. Exemple :
PROC SQL ; CREATE TABLE table3 AS SELECT * FROM table1 UNION SELECT * FROM table2 ; QUIT ; Cette tape correspond dans ce cas : DATA table3 ; SET table1 table2 ; RUN; PROC SORT DATA=table3 noduplicates; BY _ALL_; RUN; Odile Wolber, CNAM, octobre 2003

Cette commande est utilise pour insrer des observations dans une table. Elle ncessite le nom de la table, le nom des variables initialiser et la valeur leur assigner. INSERT INTO table SET variable1=valeur1, variable2=valeur2 Exemple : insrer une observation dans la table parc proc sql; insert into parc3 set ZONE=14, HERB='haute', BOSQUET='non', EAU='loigne', HIPPO='moyen' ; quit;

93

Odile Wolber, CNAM, octobre 2003

94

IV. SAS SQL


La commande INSERT INTO
Associe une clause SELECT, cette commande permet de copier un sous-ensemble dune table dans une autre. La table cible doit exister pralablement, et les types de donnes doivent correspondre de faon trs prcise. Exemple : insrer des observations de la table parc4 (zone 14 20) dans la table parc3 proc sql; insert into parc3 select * from parc4 where ZONE>13; quit;
Odile Wolber, CNAM, octobre 2003

IV. SAS SQL


La commande INSERT INTO
On peut galement insrer les valeurs de chaque observation avec linstruction VALUES. INSERT INTO table VALUES (valeur1, valeur2, valeur3) Exemple : insrer 5 observations dans la table parc3 proc sql; insert into parc3 values(15,'haute','oui','proche','moyen') values(16,'courte','non','proche','moyen') values(17,'haute','oui','proche','aucun') values(18,'haute','non','loigne','moyen') values(19,'courte','non','loigne','importan'); quit;
Odile Wolber, CNAM, octobre 2003 96

95

IV. SAS SQL


La commande UPDATE
La commande UPDATE spcifie le nom de la table qui va tre modifie, suivi dune clause SET dfinissant les modifications apporter, et dune clause WHERE avec le critre prcisant les observations modifier. UPDATE TABLE SET variable1=valeur1, variable2=valeur2 WHERE condition Exemple : remplacer la modalit loigne de la variable EAU par loin : proc sql; update parc3 set EAU='loin' where EAU='loigne'; Odile Wolber, CNAM, octobre 2003 97 quit;

IV. SAS SQL


La commande DELETE
Cette commande consiste en une clause DELETE FROM spcifiant le nom de la table concerne, et dune clause WERE avec le critre prcisant les observations supprimer. Exemple : dtruire les observations des zones 14 et plus. proc sql; delete from parc3 where ZONE>13; quit;
Odile Wolber, CNAM, octobre 2003 98

V. SAS GRAPH
Gchart : trac dhistogrammes, de camemberts, de graphiques toils Gplot : graphiques deux dimensions Gmap : fonds de cartes G3d : surfaces ou nuages de points en trois dimensions Les graphiques sont stocks dans des catalogues graphiques que lon pourra consulter nouveau en utilisant la procdure greplay. 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.
Odile Wolber, CNAM, octobre 2003 99

V. SAS GRAPH
Instructions gnrales pour la construction des graphiques Structure du programme dtaille dans le polycopi de cours :
goptions . ; /*orientation du graphique, bordures, dimensions, couleurs, police de caractre*/ title1. ; /*dition de titres dans les graphiques*/ titlei. ; footnote1 ; /*notes de bas de graphique*/ footnotei ; legend1 ; /*lgendes*/ legendi ; axis1...; /*options sur les axes*/ axisi...; symbol1...; /*uniquement dans gplot*/ symboli ; pattern1 ; /*instructions sur les surfaces*/ patterni ; Odile Wolber, CNAM, octobre 2003 100

V. SAS GRAPH
Structure du programme (suite) : data annotate ; /*pour crer les instructions qui */ /*permettent dcrire lintrieur du graphique*/ run ; proc gplot data= .gout= ; plot y*x=n/<options>; run ; gout : envoi dans un catalogue graphique y : axe des ordonnes x : axe des abscisses n : renvoi un numro de symbole
Odile Wolber, CNAM, octobre 2003 101

V. SAS GRAPH

Annotate data set


Une table dannotations, dfinie lors dune tape data, est une table SAS contenant les descriptifs dun ensemble de graphiques qui viendront se superposer aux rsultats des procdures prcdemment dcrites (gchart, gplot,). Elle contient ainsi un certain nombre de variables de positions, de descriptions et de texte.

Odile Wolber, CNAM, octobre 2003

102

V. SAS GRAPH
Annotate data set Annotate data set -

V. SAS GRAPH
le systme de coordonnes pour le trac (se combine avec size) : hsys unit utiliser pour la taille du texte xsys systme de coordonnes pour x ysys systme de coordonnes pour y zsys systme de coordonnes pour z Ces variables dont les noms sont prdfinis sont des variables caractres ; leurs valeurs doivent tre rentres comme telles. les variables dattribut : color couleur du texte style police de caractre text contient le texte crire ou le nom de la variable du fichier qui contient les diffrents textes comme autant de valeurs size dtermine la hauteur du texte position dun texte par rapport au point (cal gauche, centr) line type de ligne (parOdile Wolber, CNAM, octobre 2003 dfaut, continue). 104

Les variables de la table dannotation ont des noms prdfinis. Les plus usuelles sont : - les variables qui dfinissent les lments de dessins : function. function indique ce quil faut tracer : bar, draw, frame, pie, symbol, label - les variables de position qui spcifient les coordonnes des points o les tracs doivent tre faits et le systme de coordonnes : x abscisse du point y ordonne du point z si 3 dimensions
Odile Wolber, CNAM, octobre 2003 103

Exemple :

V. SAS GRAPH
Annotate data set
Obs x y xsys ysys text

V. SAS GRAPH

Reprsentation des resultants dune analyse des correspondances des donnes de parc3 partir dun fichier de sortie de proc corresp.
data anno; set corr1(keep=_TYPE_ _NAME_ dim1 dim2); x=dim1; y=dim2; xsys='2'; ysys='2' ; if _TYPE_='OBS' then do; text=_NAME_; size=0.7; color='b1'; style='hwdmx010'; output; end; if _TYPE_='VAR' then do; text=_NAME_; size=0.7; color='b1'; style='hwdmx011'; output; end; label x='dimension 1' y='dimension 2'; keep x y text xsys ysys size color style ; Odile Wolber, CNAM, octobre 2003 run;

size 0.7 0.7 0.7 0.7 0.7 0.7 0.7

color b1 b1 b1 b1 b1 b1 b1

style hwdmx010 hwdmx010 hwdmx010 hwdmx011 hwdmx011 hwdmx011 hwdmx011

1 -0.15047 -0.00000 2 0.82759 0.00000 3 0.93777 0.00000 ... ... ... ... ... ... ... 14 -0.28133 0.00000 15 0.89370 0.00000 16 -0.55856 0.96462 17 -0.55856 -0.32154

2 2 1 2 2 2 2 2 3 ... ... ... ... ... 2 2 HERB 2 2 BOSQUET 2 2 EAU 2 2 HIPPO

Dans les versions antrieures de SAS, lenrichissement des graphiques tait difficile : tout devait tre programm, en particulier partir des fichiers annotate. Maintenant, la prsentation peut tre trs soigne en utilisant de faon conviviale lditeur graphique de SAS.
105 Odile Wolber, CNAM, octobre 2003 106

Procdure gchart

V. SAS GRAPH
Procdure gchart

V. SAS GRAPH
Il est important de spcifier loption discrete pour les variables qui ont t recodes par la procdure proc format, sinon le programme essaiera de crer des classes. Lorsque la variable principale est une variable numrique continue, on peut laisser SAS crer les classes reprsenter ; il faut spcifier alors combien de classes retenir, par loptions levels= .

La procdure proc gchart a de nombreuses options de reprsentation : - block barres 3 dimensions - vbar histogramme barres verticales - hbar histogramme barres horizontales - pie camemberts - star graphiques toils Syntaxe : proc gchart <data=fichier des donnes> <annotate=fichier annotate> <gout=catalogue graphique> ;
Appel de loption de trac (exemple barres verticales) :

vbar variables reprsenter </annotate=fichier annotate> <options dapparence> <options statistiques> <options de classes> <options daxes> <autres options descriptives>> ; Odile Wolber, CNAM, octobre 2003 <by <variable> ;

Exemple : on a un fichier denqute avec le nombre de vols par ge et par sexe . Le programme utilisera loption sumvar= et loption sum. Dans ce cas, les statistiques ne sont plus imprimes.
title1 f=hwdmx010 h=0.4 cm c=blue 'Repartition des voles en 1986 selon l"age et le sexe' ; pattern1 c=gray v=s ; pattern2 c=blue v=s; axis1 w=3 c=red label=none length=8 cm; axis2 w=3 label=none length=8 cm; 2003 Odile Wolber, CNAM, octobre 108

107

V. SAS GRAPH
Procdure gchart
proc gchart data=chart; hbar age/discrete sumvar=count subgroup=sex sum frame axis=axis2 maxis=axis1 space=1 coutline=bl; run;
Odile Wolber, CNAM, octobre 2003 109

V. SAS GRAPH
Procdure gchart On obtient alors la reprsentation suivante :

Odile Wolber, CNAM, octobre 2003

110

V. SAS GRAPH
Exemple avec une seule courbe :

V. SAS GRAPH
goptions reset=all rotate=landscape border ftext=hwdmx013 htext=0.35; title1 c=blue f=hwdmx020 h=1.4 j=center 'Evolution de la population francaise de 1987 a 2002' ; title2 c=bl f=hwdmx011 h=0.7 ' Source : OCDE'; symbol1 v=none I=join l=1 c=blue w=2; axis1 length=8 cm label=(h=1 f=hwdmx021 h=0.8) value=(f=hwdmx021 h=0.8) order=(1987 to 2002 by 2) minor=(h=0.2 w=1.0 n=4); axis2 length=6 cm label=(h=1 f=hwdmx021 'population') value=(f=hwdmx021 h=0.8) order=(55500 to 59500 by 1000) major=(h=0.5 w=1.5) minor=(h=0.2 w=1.0 n=4); proc gplot data=population gout=graf1; plot France*Annee=1 / haxis=axis1 vaxis=axis2; Odile Wolber, CNAM, octobre 2003 run;

Procdure gplot
La procdure gplot produit des graphiques deux dimensions dans un systme daxes perpendiculaires haxis et vaxis. Les points sont dfinis par leurs coordonnes sur les axes. Syntaxe : proc gplot data=<nom du fichier des donnes> gout=<nom du catalogue de sortie du graphique> annotate=<fichier annotate valable pour tous les graphiques dans cette procdure> par exemple si on utilise by <uniform> spcifie que les mmes axes doivent tre utiliss pour tous les graphiques de cette procdure ;

Odile Wolber, CNAM, octobre 2003

111

112

V. SAS GRAPH
Procdure gplot Procdure gplot

V. SAS GRAPH
Exemple de courbes multiples avec option overlay :
goptions reset=all rotate=landscape border ftext=hwdmx013 htext=0.35 cm; title2 c=blue f=hwdmx020 h=1.4 j=center 'Evolution des populations de 1987 a 2002'; title3 c=bl f=hwdmx011 h=0.7 ' Source : OCDE'; symbol1 v=none i=j l=1 c=blue w=2; symbol2 v=none i=j l=8 c=green w=2; symbol3 v=none i=j l=34 c=red w=2; axis1 length=10 cm label=(h=1 f=hwdmx021 'annees') value=(f=hwdmx021 h=0.8); axis2 length=8 cm label=(h=0.8 f=hwdmx021 'Population') value=(f=hwdmx021 h=0.8) major=(h=0.5 w=1.5) minor=(h=0.2 w=1.0 n=4); Odile Wolber, CNAM, octobre 2003 114

Odile Wolber, CNAM, octobre 2003

113

V. SAS GRAPH
Procdure gplot
data anno; set population; length text $ 10; if Annee=2000 then do; xsys='2'; ysys='2'; position='2'; size=0.8 ; color='bl' ; style='hwdmx020'; x=Annee; y=France;text='France';output; y=Germany;text='Allemagne';output; end ; keep x y text xsys ysys size color style position; run; proc gplot data=population gout=graf2; plot France*Annee=3 Germany*Annee=2 / overlay haxis=axis1 vaxis=axis2 annotate=anno; run;
Odile Wolber, CNAM, octobre 2003

V. SAS GRAPH
Procdure gplot

115

Odile Wolber, CNAM, octobre 2003

116

V. SAS GRAPH
Sauvegarde des graphiques
Les graphiques sont sauvegards dans des catalogues graphiques qui peuvent tre temporaires ou assigns par un libname. Laccs aux catalogues se fait par la procdure proc greplay. Exemple : on effectue la procdure suivante : proc greplay data=graf2; run;

VI. Le macro langage SAS


Ds que lon souhaite crire des programmes SAS gnraux afin, par exemple, de les appliquer diffrents jeux de donnes, il est ncessaire, par souci defficacit, de faire appel au macro langage SAS. Les objets macros sont prcds des caractres & ou %. Toute macro SAS dbute par la dclaration : %MACRO nom de la macro ; et se termine par les 2 instructions ; %MEND ; %nom de la macro ;

Odile Wolber, CNAM, octobre 2003

117

Odile Wolber, CNAM, octobre 2003

118

VI. Le macro langage SAS


Dclaration dune macro-variable Linstruction la plus simple pour crer une macro-variable est dutiliser la commande %LET. Cette instruction permet dassocier une chane de caractres un identificateur : %LET nomvar1=taille ; %LET nomvar2=poids ; %LET varlist=csp sexe age taille poids revenu; Une autre possibilit pour crer une macro- variable consiste utiliser la routine SYMPUT dans une tape data. Lappel de cette routine se fait grce linstruction CALL : CALL SYMPUT(nommacro,valeur) ; Exemple : on veut rcuprer le nombre dindividus dans un fichier. On peut procder de la manire suivante : data _null_; set fichier; N=_N_; call symput('N',N); Odile Wolber, CNAM, octobre 2003 119 run;

VI. Le macro langage SAS


Interprtation des macro-variables
Une fois que la macro-variable est cre, il est possible de rcuprer son contenu (valeur) laide du code & suivi du nom de la macro variable dsire. Dans lexemple prcdent : TITLE Etude des variables &varlist (avec au lieu de ) PROC PLOT ; PLOT &nomvar1*&nomvar2 ; RUN ; Lorsque le processeur macro rencontre &, il recherche la macro variable qui suit ce & et remplace &nomvar1 par le texte contenu dans la macro. Si par exemple la valeur taille est affecte la macro-variable &nomvar1 et la valeur poids la macro-variable &nomvar2, le texte gnr aprs la passage dans le processeur macro est le suivant : PROC PLOT ; PLOT taille*poids ; RUN ;
Odile Wolber, CNAM, octobre 2003 120

VI. Le macro langage SAS


Interprtation des macro-variables
Linterprtation de noms suffixs se fait diffremment : supposons que lon dsire imprimer la premire valeur dune srie de mesures effectues diffrentes dates ((taille1,poids1) ; (taille2,poids2) ; (taille3,poids3)) : %LET nomvar1=taille ; %LET nomvar2=poids ; PROC PLOT; PLOT &nomvar1.1*&nomvar2.1; RUN; Le texte gnr par la processeur macro est le suivant : PROC PLOT ; PLOT taille1*poids1 ; RUN ; Le . situ aprs nomvar1 et nomvar2 indique au processeur macro la fin du nom de la macro-variable chercher. Il est utilis pour viter des confusions, comme la recherche dune macro-variable nomvar11.
Odile Wolber, CNAM, octobre 2003 121

VI. Le macro langage SAS


Interprtation des macro-variables
La dclaration dune macro-commande peut inclure des paramtres qui deviennent des macro-variables locales : %MACRO PLOT(yvar,xvar) ; PROC PLOT ; PLOT &yvar*&xvar ; RUN ; %MEND ; %PLOT(taille,poids) ; On peut aussi dfinir des paramtres par dfaut : %MACRO PLOT(yvar=taille,xvar=poids) ; PROC PLOT ; PLOT &yvar*&xvar ; RUN ; %MEND ; %PLOT ; Odile Wolber, CNAM, octobre 2003 122

VI. Le macro langage SAS


Macros instructions simples Le macro-langage intgre des instructions des langages de programmation traditionnels pour permettre des traitements procduraux (traitements conditionnels, boucles). Traitement conditionnel Linstruction %IF permet de raliser ce traitement. Sa syntaxe est la mme que celle du langage SAS de base au % prs et se prsente comme suit. Syntaxe : %IF expression %THEN %DO; texte %END; %ELSE %DO; texte %END;
Odile Wolber, CNAM, octobre 2003 123

VI. Le macro langage SAS


Traitement itratif Lorsquune squence de commandes doit tre rpte tant quune condition est ralise, on utilise une des instructions suivantes : Syntaxe 1 : %DO %UNTIL(expression); texte %END; Le texte est rpt tant que lexpression reste vraie.

Odile Wolber, CNAM, octobre 2003

124

VI. Le macro langage SAS


Exemple : la macro suivante renvoie le nombre de mots contenus dans une chane de caractres : %MACRO exemple; %MACRO Nbmot(chaine); %let i=1; %do %until(&lm=0); %let lm=%length(%scan(&chaine,&i)); %let i=%eval(&i+1); %end; /* %do until(&lm=0) */ %eval(&i-2) %MEND Nbmot; %let semaine=lundi mardi mercredi jeudi vendredi samedi dimanche; %put %Nbmot(&semaine); %mend; %exemple;
Odile Wolber, CNAM, octobre 2003 125

VI. Le macro langage SAS


Traitement itratif
Syntaxe 2 (boucle avec compteur) : %DO compteur=dbut %TO fin <BY increment> ; instructions %END; Exemple : la macro suivante renomme les colonnes du fichier : %macro rencol; data fichier; set fichier(keep=col1-col100); %do i=1 %to 100; rename col&i=var&i; %end; run; %mend; %rencol;
Odile Wolber, CNAM, octobre 2003 126

VI. Le macro langage SAS


Les entres/sorties lcran
Linstruction %PUT permet dcrire un texte dans la log. Cette instruction sert souvent vrifier la valeur dune macro-variable, dune macro-expression. Linstruction %INPUT permet de faire saisir des valeurs rentres par lutilisateur. Syntaxe : %INPUT <nom1 nom2> ; Exemple : %macro accueil; %PUT Entrer votre nom et votre mot de passe :; %INPUT nom password; %mend accueil; %accueil;
Odile Wolber, CNAM, octobre 2003 127

VI. Le macro langage SAS


Les entres/sorties lcran
Le macro-processeur attribue les valeurs spares par des blancs aux macro-variables dans lordre spcifi. Si lutilisateur tape un nom particule, le programme prcdent ne fonctionnera pas. Dans ce cas, il faut utiliser la macro &SYSBUFFR, comme suit : %macro accueil; %put Entrer votre nom :; %input; %let nom=&SYSBUFFR; %put Entrer votre mot de passe :; %input password; %mend accueil; %accueil;
Odile Wolber, CNAM, octobre 2003 128

VI. Le macro langage SAS


Environnements GLOBAL et LOCAL
Instruction %GLOBAL %GLOBAL nommacro_1 <nommacro_n>; Linstruction %GLOBAL cre une macro-variable. Quel que soit lendroit o est situe cette ligne de code, la macro-variable nommacro est cre dans lenvironnement global et sera utilisable pendant toute la session SAS. Instruction %LOCAL Linstruction %LOCAL nest utilisable que dans un macroprogramme. Linstruction %LOCAL est utilise lorsque lon dsire conserver la valeur dune macro-variable homonyme dfinie avant lappel dun macro-programme. %LOCAL nommacro_1 <nommacro_n> ;
Odile Wolber, CNAM, octobre 2003 129

VI. Le macro langage SAS


Les entres/sorties lcran
Exemple : dans lexemple suivant, la macro variable locale index prend les valeurs 1 3 au cours du traitement de la macro keepm. %let index=100; %macro keepm(max=); %local index; %do index=1 %to &max; data period&index; set fichier; if period=&index; run; %end; %mend; %keepm(3);
Odile Wolber, CNAM, octobre 2003 130

VI. Le macro langage SAS


La fonction %EVAL
Une macro-variable est toujours de type caractre, mme si dans certains cas, son contenu peut-tre interprt de manire numrique. Exemple : %LET x=5 ; %LET y=7 ; %LET z=&x+&y ; Lexemple prcdent affecte z la valeur 5+7. Pour affecter la valeur 12 z, il faut utiliser la fonction %EVAL. %LET z=%EVAL(&x+&y) ; Attention : le macro-langage ne traite que des entiers.
Odile Wolber, CNAM, octobre 2003 131

VI. Le macro langage SAS


Quelques fonctions de traitement des chanes de caractre
La fonction %LENGTH La macro-fonction %LENGTH fournit la longueur dune macro-expression. Exemple : %macro valeur; %let var1=Liste de caracteres; %let longueur1=%length(&var1); %put result1=&longueur1; => result1 = 19 %let var2= Test; %let longueur2=%length(&var2); %put result2=&longueur2; octobre=> result2 = 4 Odile Wolber, CNAM, 2003

132

VI. Le macro langage SAS


La fonction %LENGTH Exemple :
%let var3=%str( Test ); %let longueur3=%length(&var3); %put result3=&longueur3; => result3 = 22 %mend; %valeur; La macro-fonction %LENGTH ignore les blancs externes aux macroexpressions. Cest pourquoi result2 vaut 2. En revanche, tous les espaces contenus entre deux caractres dune macro-expression sont comptabiliss. Pour que les espaces externes une macro-expression soient pris en compte, il est ncessaire dutiliser les macros-fonctions de quoting. Dans lexemple prcdent, la macro-fonction %STR est utilise pour pouvoir tenir compte des espaces externes la valeur Test. Cest Odile 133 pourquoi result3 vaut 22. Wolber, CNAM, octobre 2003

VI. Le macro langage SAS


La fonction %SCAN La macro-fonction %SCAN extrait un mot (macro-expression) spare par deux dlimiteurs dans une macro-expression. Syntaxe : %LET retour=%SCAN(argument, nime,<delimiteurs>) ; Exemple :
%let LF=1-2 1-3 ; /*liste de plans factoriels*/ %let I=1 ; /*nombre de plans factoriels reprsenter*/ %do %until(&LM=0); %let LM=%length(%scan(&LF,&I," ")); %let I=%eval(&I+1); %end; %let NPLANS=%eval(&I-2); %do I=1 %to &NPLANS; %let P&I.AXH=%scan(%scan(&LF,&I," "),1,"-"); %let P&I.AXV=%scan(%scan(&LF,&I," "),2,"-"); %let P&I=%scan(%scan(&LF,&I," "),1,"-")_%scan(%scan(&LF,&I," "),2,"-"); Odile Wolber, CNAM, octobre 2003 134 %end;

VI. Le macro langage SAS


La fonction %SUBSTR
La macro-fonction %SUBSTR permet dextraire une sous-chane de caractres dune macro-expression. Exemple : la macro suivante extrait les deux derniers caractres dun mot : %MACRO exemple; %macro Extcar(mot) ; %substr(&mot,%eval(%length(&mot)-1),2) %mend; %let period=annee88; %let annee=%Extcar(&period); %put &annee; %mend; %exemple; Odile Wolber, fentre Output. => Le rsultat 88 saffiche dans laCNAM, octobre 2003

VI. Le macro langage SAS


La fonction %UPCASE
La macro-fonction %UPCASE transforme une expression en majuscule. Exemple : %put %upcase(minuscules); Le rsultat est le suivant : MINUSCULES

La fonction %STR
La macro-fonction %STR empche le macro-langage dinterprter les caractres de largument. Exemple : %LET var=%STR(or) ; empche linterprtation de la valeur var : or comme oprateur logique.
135 Odile Wolber, CNAM, octobre 2003 136

VI. Le macro langage SAS


La fonction %NRSTR
La macro-fonction %NRSTR va encore plus loin que la macro-fonction %STR. Toute rfrence une macro variable (&) ou macro-programme ou fonction (%) est ignore.

Exemple :
%let var1=A;%put &var1; %let var2=%str(&var1*B);%put &var2; %let var3=%nrstr(&var1*B);%put &var3; Le rsultat est le suivant : A A*B &VAR1*B
Odile Wolber, CNAM, octobre 2003 137