1. UNIVERSITE PARIS XII VAL DE MARNE
FACULTE DE SCIENCES ECONOMIQUES ET DE GESTION
Master 2 Recherche
Economie Appliquée
Le logiciel SAS
1ère partie
P. Blanchard
blanchard@univ-paris12.fr
ERUDITE
http://www.univ-paris12.fr/www/labos/erudite
Septembre 2006
2. 2
Plan du cours
Partie I – Introduction à l’étape DATA et aux procédures
1) L'interface SAS sous Windows
2) Notre premier programme. Eléments du langage SAS.
3) Introduction à l’étape DATA
• Création/modification d'un tableau SAS
• Création et modification des variables
• Sélection de variables
4) Introduction aux principales procédures
• Les procédures utilitaires : PROC PRINT et PROC CONTENTS
• Les procédures statistiques : PROC MEANS, PROC FREQ et PROC CORR
• Les instructions BY/CLASS et la procédure PROC SORT
• Les procédures graphiques : Proc GCHART, PROC GPLOT
• Les procédures économétriques : PROC REG et PROC AUTOREG
5) Présentation du programme, de l’OUTPUT et du LOG
Partie II – Approfondissements sur l’étape DATA et les procédures
1) Approfondissements sur l’étape DATA
• Création d'un tableau à partir d'un fichier externe au format ASCII ou EXCEL
• Sélection des variables et des observations
• Les instructions de totalisation
• Les boucles sur les variables et sur les observations
• Manipulation des variables chaîne de caractères. Les labels
• Concaténation et fusion contrôlée de tableaux
2) Approfondissements les procédures
• Importation et exportation d’un fichier au format XLS
• La création de tableaux par une procédure
• La procédure PROC FORMAT
• PROC TABULATE
Annexes : Informats, Formats et fonctions
P. Blanchard – Logiciel SAS – Master 2 Recherche
3. 3
Introduction
I) Informations pratiques
P. Blanchard, bureau 218, tel: 01 41 78 46 49, email: blanchard@univ-paris12.fr
Pré-requis à ce cours: Windows.
Documentation SAS : officielle, INSEE, BDF, Internet…
Bibliographie (par niveau croissant de difficulté).
• L. D. Delwiche & S. J. Slaughter, The Little SAS Book : A Primer, 2003, SAS Institute.
• E. Duguet, Introduction à SAS, Economica, 2004.
• R. Aster, Professional SAS Programming Shortcuts, Breakfast, 2002, 1st edition.
Les fichiers de données et de programmes pour les exercices peuvent être téléchargés sur la
page WEB:
http://www.univ-paris12.fr/www/labos/erudite/membres/pb/etrie.html
SAS (http://www.sas.com/france) propose une licence gratuite pour les étudiant(e)s
suivant une formation SAS et organise aussi un Master’s club.. Il existe aussi une liste de
discussion pour SAS LISTSERV@LISTSERV.UGA.EDU
Cours/td : 18h + 4 td de 1.5h
Questions/réponses
P. Blanchard – Logiciel SAS – Master 2 Recherche
4. 4
FORMULAIRE LICENCE GRATUITE A DOMICILE « ETUDIANT »
Doit être complété par l’étudiant et remis à son professeur qui l’adressera au CRI Diffuseur
BENEFICIAIRE
fi Mme fi Mlle fi M.
Nom* :
Prénom* :
Adresse personnelle* :
Code Postal* :
Ville* :
Téléphone* :
E.mail* :
Date probable de fin d’études* :
Centres d’intérêt professionnels* :
ETABLISSEMENT
Nom* : Université Paris XII Val de Marne – Faculté de Sciences Economiques et de Gestion
Département/Filière* : Département d’Economie
Professeur(s) enseignant SAS* : Pierre Blanchard
Diplôme (intitulé)* : Master 2 Recherche
Logiciel(s) SAS enseigné(s)* : SAS 9.1
Adresse* : 61 avenue du Général de Gaulle
Code Postal* : 94010
Ville* : Créteil cédex
« Je suis étudiant à l’Université Paris XII val de Marne et SAS fait partie intégrante de mon cursus.
J’ai adhéré au Masters’ Club de l’Academic Program, en complétant le formulaire d’adhésion ou de
renouvellement sur http://www.sas.com/france/academic
Je m’engage à installer les logiciels SAS® sur mon ordinateur, situé à mon adresse personnelle, renseignée
ci-dessus, à n’utiliser les Logiciels que pour un usage personnel et pédagogique à but non lucratif, à
n’effectuer aucune copie desdits Logiciels et à ne jamais les utiliser dans un environnement professionnel
(ex. : stage).
Je reconnais que la société SAS Institute Inc., Cary, Caroline du Nord, USA, est propriétaire, au sens du
Code de la Propriété Intellectuelle, des Logiciels et de sa documentation.
Je suis informé qu’en cas d’atteinte avérée aux droits de propriété intellectuelle de SAS, j’encourre une
indemnité à payer à SAS de 1000 (mille) euros »
La licence gratuite est composée des Progiciels Base SAS®, SAS/ETS®, SAS/GRAPH®, SAS/STAT®,
SAS/IML®, SAS/INSIGHT®, SAS/Enterprise Guide®, SAS/QC® et SAS/ACCESS® TO PC FILE FORMATS
sur poste client Windows.
Date et Signature de l’étudiant : Signature Professeur
CADRE RESERVE A SAS
Réf4 :
Site :
Date de Licence :
* Informations obligatoires
* Les présentes informations sont nécessaires aux fins de permettre la mise à disposition du Progiciel à
l'Utilisateur.
Seul SAS est destinataire des informations que vous nous communiquez. Certaines informations peuvent
ponctuellement être partagées avec nos partenaires. Conformément à la loi Informatique et Libertés du 6
janvier 1978, vous disposez d'un droit d'accès, d'opposition et de modification sur les données qui vous
P. Blanchard – Logiciel SAS – Master 2 Recherche
5. 5
concernent. Pour l'exercer, n'hésitez pas à vous adresser à : Responsable CNIL - SAS Institute France -
Domaine de Grégy - BP5 – F-77166 Grégy-sur-Yerres ou à envoyer un mail à acces_donnees@fra.sas.com.".
P. Blanchard – Logiciel SAS – Master 2 Recherche
6. 6
II ) Les caractéristiques essentielles de SAS
1. Le sigle SAS signifie Statistical Analysis System et se prononce SASSE et non S.A.S. La
société SAS a été fondé en 1976 par J. Goodnight.
2. SAS est un logiciel qui a pour ambition de couvrir toutes les étapes du traitement des
données. SAS est donc un logiciel de gestion et d’analyse statistique des données.
3. SAS est principalement un logiciel de traitement de données individuelles peu orienté vers le
traitement des séries temporelles.
4. SAS est proposé sous la forme de modules. Par ailleurs, SAS ne s'achète pas, il se loue à
l'année (fichier SID.TXT). cf. page suivante pour l’installation
5. SAS existe pour pratiquement tous les types d'ordinateurs et tous les systèmes
d'exploitation.
P. Blanchard – Logiciel SAS – Master 2 Recherche
7. 7
NOTES POUR L'INSTALLATION DE SAS-LICENCE GRATUITE ETUDIANT V 9.1
Si une ancienne version de SAS est déjà installée, il vaut mieux la désinstaller.
1°) Mettez le CD SAS. L'installation se lance automatiquement. Si elle ne démarre pas, exécuter le
programme SETUP.EXE qui est sur le CD.
2°) Utiliser les choix du menu pour END USERS STEP.
a) Optionnel : Vérifiez tout d’abord votre système en cliquant sur « verify system
requirements » )
b) cliquez sur « install sas system »
Attention : pour certains portables, il peut y avoir des problèmes d’installation. Cf. le mail reproduit
à la fin du document.
A partir de là, plusieurs fenêtres de dialogue vont apparaître (entre 8 et 10), répondez à chaque fois
« suivant » Sauf quand SAS va vous demandez un fichier SID. Taper (ou faites apparaître avec
parcourir) dans la fenêtre indiquée D:SID.TXT
Ce fichier est sur le CD-ROM.
3°) Si SAS vous pose une question sur les extensions de nom de fichier, cochez la case : utiliser
cette réponse pour tous les types, puis cliquez sur « oui »
7°) au message, « installation terminée » cliquez sur « Fin » Quand l'installation est terminée SAS
est installé dans c:PROGRAM FILESSASSAS 9.1
Pour lancer SAS, faites Démarrer Programmes SAS puis SAS 9.1
En cas de problème
Vous devez arrêter l'anti-virus, le firewall, et être connecté en tant
qu'administrateur.
1. Exécuter les pré-requis :
D:srwbundlesvcredst7setup.exe.
2. Télécharger puis installer les Run-Time
http://www.microsoft.com/downloads/release.asp?ReleaseID=28337
3. Puis installer SAS en outrepassant les pré-requis :
D:sassetup.exe nomsupdate
où D: est le lecteur de CD-Rom.
Si cela échoue, essayez avec cette syntaxe :
"D:sassetup.exe nomsupdate"
P. Blanchard – Logiciel SAS – Master 2 Recherche
8. 8
Partie I) Introduction à l’étape DATA et aux procédures
1) L'interface SAS sous Windows
• Notre version de SAS est la version 9.1 et fonctionne sous WINDOWS
XP/2000/Me/NT.
• L'interface sous WINDOWS (version anglaise/française).
• Utilisation: mode menu ou programme.
Autres fenêtres utiles.
Attention: sous SAS, il y a deux éditeurs, le Enhanced Program Editor (le plus utile) et le Program
Editor.
P. Blanchard – Logiciel SAS – Master 2 Recherche
9. 9
2) Notre premier programme
Le tableau donnees
nom revenu conso
AA 22.3 19.9
BB 30.3 10.1
etc.
Exemple n°1.
DATA essai ; SET donnees ;
lconso = LOG(conso) ;
lrev = LOG(revenu) ;
RUN ;
PROC PRINT DATA = essai ;
RUN ;
DATA essai ; SET essai ;
pmc = conso/revenu ;
RUN ;
PROC REG DATA = essai ;
MODEL lconso = lrev / DW;
RUN ; QUIT ;
PROC MEANS DATA = essai N MEAN MIN MAX NMISS ;
VAR revenu conso pmc ;
RUN ;
Quels principes pour SAS ?
P. Blanchard – Logiciel SAS – Master 2 Recherche
10. 10
PROC.
A) Un programme SAS se compose d'une suite d'étapes DATA et de PROC Notre programme
se compose de deux étapes DATA et de trois étapes PROC.
• L'étape DATA a pour objet de créer ou de modifier un tableau (on dit aussi une table) de
données (stocké dans un fichier de données SAS, temporaire ou permanent).
• Une étape PROC a pour objet d'utiliser un tableau SAS existant pour en faire une analyse
(statistique, graphique, économétrique…).
Etape DATA Etape PROC
Commence par DATA Commence par PROC
Lit des données Effectue une analyse statistique, graphique…
Crée ou modifie des variables/observations
Crée ou modifie un tableau
Se termine par RUN, DATA ou PROC Se termine par RUN, QUIT, DATA ou PROC
DATA essai ; SET donnees ; |
lconso = LOG(conso) ; |
lrev = LOG(revenu) ; | Etape DATA
RUN ; |
PROC PRINT DATA = essai ; | Etape PROC
RUN ; |
- Un tableau SAS peut être utilisé par une ou plusieurs étapes DATA et/ou PROC.
- Une instruction DATA ou PROC est terminée dans 2 cas:
- Une instruction RUN est généralement mise à la fin de chaque étape DATA ou PROC.
- Elle permet d’exécuter un bloc d’instructions à l’aide de la souris sans nécessairement exécuter
la totalité du programme. C’est une bonne idée pour mettre un programme au point par petit
bout.
PROC PRINT DATA = essai ; RUN ;
- Il n'y a pas de END à la fin d’un programme (ne pas mettre ENDSAS ;). Par contre, on mettra
un RUN ; sinon, la dernière instruction ne sera pas exécutée (ou pas au bon moment).
P. Blanchard – Logiciel SAS – Master 2 Recherche
11. 11
B) On distingue les instructions d’appel, les instructions, les options des instructions d'appel,
les options des instructions, les variables, les tableaux et les fonctions.
• Les instructions d’appel sont DATA ou PROC.
• Les instructions de l’instruction d’appel sont parfois obligatoires (par exemple MODEL),
parfois facultatives (par exemple VAR) selon les cas.
• Par définition, les options peuvent ne pas être spécifiées (options par défaut). Attention, il y
a deux types d’options : les options de l’instruction d’appel et les options des instructions.
• Les instructions, les noms des variables et des tableaux peuvent être spécifiées en
minuscules, en majuscules ou dans un mélange des deux.
• Il peut y avoir plusieurs d’instructions dans une instruction d’appel. L'ordre des instructions
dans une PROC (ou dans DATA) est indifférent. Idem pour les options.
• /* … */ permet d’introduire des commentaires dans le programme. Très utile.
Exemple n°2.
PROC PRINT ; RUN ; /* correct */
PROC MEANS DATA = temp ; RUN ;
PROC REG ; RUN ; /* incorrect */
PROC REG DATA = temp SIMPLE ; /* instructions et options */
MODEL y = x1 x2 x3 /DW COVB STB ;
TEST x1 = 1 ;
RUN ; QUIT ;
P. Blanchard – Logiciel SAS – Master 2 Recherche
12. 12
C) Les principales règles syntaxiques
Chaque instruction se termine par un ;
Les instructions, les variables, les fonctions… peuvent être écrites en minuscules ou majuscules.
Une instruction peut être écrite sur plusieurs lignes.
Une instruction peut commencer à n’importe quelle colonne.
L'espace est le caractère séparateur entre les instructions, les options, les variables ou les noms de
tableau. L’oubli du ; est l’erreur la plus fréquente dans un programme SAS. Cette erreur peut être
difficile à détecter.
• Vous noterez que le ; sépare les instructions d’appel et les instructions entre elles (mais pas
de ; entre les instructions et les options).
• Par contre, mettre deux points-virgule ne génère aucune erreur (= 1 instruction vide).
• Plusieurs instructions peuvent se trouver sur la même ligne.
• Néanmoins, il vaut mieux aérer le programme avec les lignes vides.
• Une instruction commence et finit à n’importe quelle colonne d’une ligne donnée. Ceci
permet d’utiliser l'indentation pour isoler l'instruction d'appel des instructions qui en font
partie.
Exemple n° 3.
PROC PRINT DATA = temp ; RUN ; PROC MEANS DATA = temp ; RUN ;
/* ou */
PROC PRINT DATA = temp ; RUN ;
PROC MEANS DATA = temp ; RUN ;
PROC PRINT DATA = temp ; /* pas PROC P RINT ; */
RUN ;
PROC MEANS DATA = temp ; /* stat. des. par année */
BY annee ;
VAR conso revenu ;
RUN ;
P. Blanchard – Logiciel SAS – Master 2 Recherche
13. 13
D) Les tableaux SAS et les variables
• Un tableau SAS peut être crée soit dans une étape DATA soit dans une étape PROC. Un tableau
SAS comporte une ligne par observation et une colonne par variable:
Obs Nomvar1 Nomvar2 … Nomvark
1 4 1268.2 Texte 1
2 4.2 -2 Texte 2
…
• Un tableau SAS est stocké dans un fichier (temporaire ou permanent) dont l’extension est la
plupart du temps .sas7bdat (V8/V9).
• Un tableau SAS peut contenir 2 types de variables : des variables numériques ou chaînes de
caractères. (Attention, une fois qu’une variable a été définie numérique ou caractère, elle ne
peut changer de type).
- i) Les valeurs numériques, par exemple 5.31, 1.4E13 et 8 sont des valeurs numériques
correctes. SAS ne fait pas de différence entre les entiers et les réels (1 ou 1.0). Une valeur
manquante est notée par un point (•) et peut résulter d’un calcul (x=log(0)) ou d’une
affectation ( x = • ).
- ii) Les variables chaînes de caractères dont le contenu est entré entre apostrophes ou
guillemets et dont la longueur est au maximum de 32767 car. (V8/V9). Une valeur
manquante est notée par un une chaine vide (rep1 = '' ;).
- iii) Pour créer une variable logique (0/1), il faut le faire sous la forme d'une variable
numérique ou d'une chaîne de caractères.
• Les noms des variables et des tableaux ont de 1 à 32 caractères et sont composés de lettres, de
chiffres et du blanc souligné ( _ ). Le premier caractère doit être impérativement une lettre ou le
blanc souligné. Les caractères accentués ne sont pas admis. Idem pour les symboles spéciaux &,
*, $, % ...
rep1 = 'OUI' ;
rep2 = 'oui' ;
rep3 = "OUI" ;
rep3 = ‘d’’accord’ ;
cc = '123' ; /* attention aux apostrophes/guillemets non balancés /
Exemples de noms de variables corrects ou incorrects : pnb_fr , x1 , y , numtelephone , 1pb ,
bizarre , _123 , moi , keynes , x$ , taux% , a&b , télé, _mes erreur
P. Blanchard – Logiciel SAS – Master 2 Recherche
14. 14
• Fonctionnement de l’étape DATA
L’instruction DATA est une boucle sur le tableau.
DATA essai ;
SET mesdonnees ;
lconso = LOG(conso) ;
lrev = LOG(revenu) ;
RUN ;
Données en Etape DATA Tableau SAS
entrée (tableau crée (essai)
mesdonnees)
Obs 1 Instruction 1 Obs 1
Obs 2 Obs 2
Obs 3 Instruction 2 Obs 3
… …
Instruction 3
…
P. Blanchard – Logiciel SAS – Master 2 Recherche
15. 15
E) Les librairies SAS
Exemple n°4.
DATA temp ; SET donnees ;
...
RUN ;
Définir un LIBNAME revient à assigner un nom physique de répertoire à un nom logique de
librairie. C’est le nom logique (une sorte de synonyme) qui sera utilisé dans le programme SAS.
Exemple n°5.
LIBNAME malib 'E:Mes Documents' ; RUN; /* une partie des étapes DATA est reproduite */
DATA deux ; SET malib.donnees ;
...
DATA malib.deux ; SET malib.donnees ;
...
DATA malib.un ; SET deux ;
...
DATA un ; SET deux ;
...
DATA work.un ; SET work.deux ;
...
On suppose que tous les tableaux des SET et le répertoire MES Documents existent.
1. Le LIBNAME assigne la librairie logique « malib » au répertoire « Mes Documents » du
disque dur E : (minuscules = majuscules sous DOS/Windows). Le nom logique (malib) doit
avoir 8 caractères maxi mais le nom du tableau peut avoir 32 car. maximum.
2. En effet, SAS tourne sur des ordinateurs dont les conceptions en terme de stockage sur
disque diffèrent (façon d’accéder à un répertoire d’un disque).
NB:
P. Blanchard – Logiciel SAS – Master 2 Recherche
16. 16
• Où est la librairie par défaut ? proc contents
• L’utilisation de plusieurs LIBNAME est possible mais pas souvent utile.
• On peut aussi définir une librairie ave l'icône NEW LIBRARY ou avec l'EXPLORER.
• Les tableaux SAS sont stockés sur disque sous la forme de fichiers de données de SAS et
ont l'extension .SD2 (V6) ou sas7bdat (V8-V9) sur micro-ordinateurs.
• LIBNAME in V6 "c:vieuxfichiers" ; RUN ; pour des lire des tableaux SAS
version 6.
• Dans la documentation SAS, une table SAS est souvent appelée un "member" (un membre
d’une librairie).
• Il est possible de faire (mais non conseillé):
DATA deux ; SET 'C:Mes Documentsdonnees’ ; /* sans extension */
...
DATA 'C:Mes Documentsdeux’ ; SET 'C:Mes Documentsdonnees’;
...
PROC PRINT DATA = 'C:Mes Documentsdeux’ ; RUN ;
DATA ‘deux’ ; SET malib.donnees ;
P. Blanchard – Logiciel SAS – Master 2 Recherche
17. 17
3) Introduction à l'étape DATA
L'étape DATA sert à préparer des données qui seront stockées dans un tableau pour une analyse
ultérieure (PROC). Elle a donc pour objet de créer ou modifier un tableau SAS en créant ou
modifiant des variables et/ou des observations. L’étape DATA opère soit sur des tableaux SAS déjà
existants, soit sur des données présentes dans le programme lui-même (dites données dans le flot
d'entrée), soit sur des fichiers crées par certains logiciels (pas Excel).
A) Création/modification d'un tableau SAS
a) Création d’un nouveau tableau à partir d’un autre tableau SAS.
Exemple n°6.
DATA regress1 ; SET datac ;
lconso = LOG(conso) ;
lrevenu = LOG(revenu) ;
RUN ;
PROC PRINT DATA = regress1 ; VAR lconso lrevenu ;
RUN ; /* DATA = regress1 optionnel */
b) Modification d’un tableau existant
Exemple n°7.
DATA datac ; SET datac ; /* attention risqué si erreur */
lconso = LOG(conso) ;
lrevenu = LOG(revenu) ;
RUN ;
PROC PRINT ; VAR lconso lrevenu ; RUN ; /* DATA = datac optionnel */
P. Blanchard – Logiciel SAS – Master 2 Recherche
18. 18
c) Lecture de données dans le flot d'entrée.
Cette solution est utile quand on veut introduire des données peu nombreuses. Cela évite de créer
un fichier de données séparé du programme. Par conséquent, les données sont dans le programme.
Exemple n°8.
DATA essai2 ;
INPUT nom $ salaire datenais csp $ ; /* $ signale 1 var. chaîne de car. */
DATALINES ; /* on peut mettre aussi CARDS ; */
DUPONT 100000.4 1954 cadre
DURANT 50000.1 1960 ouvrier
TOTO • 1985 cadre /* notez la valeur manquante notée • */
; /* notez le ; qui annonce la fin des CARDS */
PROC PRINT ;
RUN ;
notes:
- L'espace sépare les valeurs en colonnes (format ASCII).
- Il ne faut pas oublier de valeurs pour 1 observation.
- Ordre des valeurs = ordre des colonnes.
- Il y a de très nombreuses options qui permettent de lire n’importe quelle autre structure de
données.
- La lecture de données sur fichiers externes (ASCII) est facile (INFILE et FILENAME) et
puissant (cf. la documentation de C. Truy).
- Autre solution pour créer un tableau VIEWTABLE (Menu Outils + Editeur de tables SAS)
P. Blanchard – Logiciel SAS – Master 2 Recherche
19. 19
B) Création/modification des variables d'un tableau SAS
a) L’instruction IF ... THEN ... ELSE (ELSE est optionnel) ; qui permet la
création/modification conditionnelle d’une ou plusieurs variables.
IF/THEN/ELSE
Il y a plusieurs formes possibles pour l'instruction IF/THEN/ELSE
Exemple n°9.
IF datenais <= 1992 THEN classe = ‘jeune’ ; ELSE classe = ‘agé’ ;
IF etage > 3 AND ascenseur = ‘non’ then type = 1 ; else type = 0 ;
IF banque = ‘BNP’ THEN DO ; pays = ‘France’ ; type = ‘dépôt’ ; END ;
ELSE DO ; pays = ‘Autre’ ; type = ‘nd’ ; END ;
IF cout < 0 THEN cat = '<0' ;
ELSE IF cout = 0 THEN cat = '=0' ; ELSE cat = '>0' ;
IF date = '1983' THEN dum83 = 1 ; ELSE dum83 = 0 ;
/* ou */ dum83 = date EQ '1983' ;
/* ou */ dum83 = date = '1983' ;
NB
- opérateurs logiques: = EQ ^= NE > GT < LT >= GE <= LE . Attention >< et <>
signifient respectivement minimum et maximum.
- opérateurs de comparaisons multiples: NOT AND & et OR | !
- opérateur IN : IF x IN(1,3,5,7,9) THEN impair = ‘oui’ ;
- opérateurs mathématiques: =, +, -, *, /, **
- fonctions: cf. photocopie en annexe.
Exemple : la fonction LAG
P. Blanchard – Logiciel SAS – Master 2 Recherche
20. 20
b) L'instruction SELECT/WHEN Son objectif est de remplacer le IF...THEN...ELSE peu
SELECT/WHEN.
clair. Elle est en outre plus rapide lors du traitement de gros fichier.
Exemple n°10.
DATA essai1 ; SET essai ;
SELECT ;
WHEN(effectif=.) taille = 'nd' ;
WHEN(0<effectif<50) taille = '1' ;
WHEN(50<=effectif<100) taille = '2' ;
WHEN(100<=effectif) taille = '3' ;
OTHERWISE taille = 'pb' ;
END ; RUN ;
Exemple n°11.
DATA essai1 ; SET essai ;
SELECT (a);
WHEN(1) DO ; b = 1 ; c = 5 ; END;
WHEN(2) DO ; b = 2 ; c = 2 ; END ;
WHEN(5) b = 3 ; /* ou DO ; b=3 ; END ; */
OTHERWISE ;
END ; RUN ;
NB :
• une autre solution à IF et SELECT sera présentée en 2ème partie (PROC FORMAT).
• condition multiple WHEN(a=1 AND c = 0) …
• attention si a est une valeur manquante
DATA essai1 ; SET essai ;
SELECT ;
WHEN(a<0) b = 1 ;
...
END ; RUN ;
/* ou */ /* b=1 car une val. manq. est codée comme -10308
*/
DATA essai1 ; SET essai ; IF a <0 THEN b = 1 ; RUN ;
P. Blanchard – Logiciel SAS – Master 2 Recherche
21. 21
c) La sélection de variables dans l’étape DATA
Exemple n°12.
DATA tab1 ; SET donnees ;
KEEP budget consomm ;
...
DATA tab1 ; SET donnees ;
DROP datnaiss ;
...
DATA tab1; SET donnees ;
RENAME budget = revenu ;
...
• RENAME budget = revenu ; se lit comme RENAME anciennom = nouveaunom ;
• on peut utiliser KEEP et DROP en même temps, mais ce n'est pas conseillé.
• on utilisera DROP ou KEEP selon le nombre de variables à conserver ou à éliminer.
• Les instructions KEEP, DROP et RENAME peuvent se mettre n'importe où dans une étape DATA.
• Et avec un ordre indifférent.
P. Blanchard – Logiciel SAS – Master 2 Recherche
22. 22
Exemple n°13.
DATA tab1 ; SET donnees ; /* contient au moins x1 budget */
KEEP lconso budget x1 lagbudget ;
RENAME x1 = conso ;
lconso = LOG(x1) ;
lagbudget = LAG(budget) ;
RUN ;
• Ne pas faire lconso = LOG(conso) ; En effet, le RENAME n'est effectif qu'à la fin de
l'étape DATA.
• Dans le même ordre d'idée, comme le RENAME ne se fait qu’à la fin, il ne faut pas mettre
conso dans le KEEP, mais x1.
• De même, si on fait un KEEP, il ne faut pas oublier de mettre la liste complète des variables à
garder y compris lconso et lagbudget dans le KEEP (sinon créée mais pas gardée).
Attention de ne pas s'embrouiller dans les DROP, KEEP et RENAME comme instruction ou option.
Exemple n°14.
DATA tab1 ( KEEP = budget consomm ) ; /* options au nom de tableau */
SET donnees ;
...
DATA tab1 ( DROP = dat_naiss ) ; SET donnees ;
...
DATA tab1 ( RENAME = ( budget = revenu ) ) ; SET donnees ;
...
P. Blanchard – Logiciel SAS – Master 2 Recherche
23. 23
4 ) Introduction aux principales procédures
Les données utilisées dans ce qui suit :
DATA temp ;
INPUT nom $ num sexe $ csp $ revenu conso datenaiss DDMMYY8. ;
CARDS ;
un 1 h employé 10 9 19/02/80
deux 2 f cadre 11 7 19/03/81
trois 3 h ouvrier 5 4 29/08/64
quatre 4 h employé 8 7 10/12/54
cinq 5 h cadre 14 10 05/10/90
six 6 h ouvrier 6 4 10/11/06
sept 7 h ouvrier 7 6 12/06/89
huit 8 f cadre 11 10 30/05/87
neuf 9 h ouvrier 9 8 01/04/81
dix 10 h employé 9 8 10/09/79
onze 11 f employé 8 7 18/09/78
douze 12 h ouvrier 9 • 17/07/94
;
RUN ;
NB : DDMMYY8. est un informat. En réalité 19/02/80 est stocké par SAS comme une nombre égal
à 7354 (c’est à dire le nombre de jours écoulés depuis le 1/1/1960). A noter que c’est un
peu pareil avec Excel (sauf que 0 est pour le 1/1/1900).
Le symbole • repère une valeur manquante.
P. Blanchard – Logiciel SAS – Master 2 Recherche
24. 24
A) Les procédures utilitaires
1) PROC PRINT
permet d'imprimer le contenu d'un tableau.
Exemple n°15.
PROC PRINT DATA = temp ; VAR nom sexe csp conso ;
RUN ;
Essai de Proc print 09:17 Monday, March 24, 2003 1
Obs nom sexe csp conso
1 un h employé 9
2 deux f cadre 7
3 trois h ouvrier 4
4 quatre h employé 7
5 cinq h cadre 10
6 six h ouvrier 4
7 sept h ouvrier 6
8 huit f cadre 10
9 neuf h ouvrier 8
10 dix h employé 8
11 onze f employé 7
12 douze h ouvrier •
Quelques variantes utiles.
PROC PRINT DATA = temp (OBS=10) ; RUN ;
PROC PRINT ; VAR X1-X10 ; RUN ; /* dans certains cas */
PROC PRINT ;
VAR nom datenaiss revenu conso ;
FORMAT nom $4. datenaiss DDMMYY10. revenu dollar10.2 conso comma4.1 ; RUN ;
Autre façon de visualiser une table: Le wiewer de SAS avec l'EXPLORER puis sélection de la
librairie et de la table SAS.
P. Blanchard – Logiciel SAS – Master 2 Recherche
25. 25
PROC
2) PROC CONTENTS
Exemple n°16.
PROC CONTENTS DATA = temp SHORT ; RUN ;
The CONTENTS Procedure
-----Alphabetic List of Variables for WORK.TEMP-----
conso csp nom num revenu sexe
Exemple n°17.
PROC CONTENTS DATA = temp ; RUN ;
The CONTENTS Procedure
Data Set Name: WORK.TEMP Observations: 12
Member Type: DATA Variables: 6
Engine: V8 Indexes: 0
Created: 14:15 Tuesday, September 24, 2002 Observation Length: 48
Last Modified: 14:15 Tuesday, September 24, 2002 Deleted Observations: 0
Protection: Compressed: NO
Data Set Type: Sorted: NO
-----Engine/Host Dependent Information-----
Data Set Page Size: 4096
Number of Data Set Pages: 1
First Data Page: 1
Max Obs per Page: 84
Obs in First Data Page: 12
Number of Data Set Repairs: 0
File Name: C:DOCUME~1PIERRE~1LOCALS~1TempSAS
Temporary Files_TD932temp.sas7bdat
Release Created: 8.0202M0
Host Created: WIN_PRO
-----Alphabetic List of Variables and Attributes-----
# Variable Type Len Pos
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
6 conso Num 8 16
4 csp Char 8 40
2 nom Char 8 24
1 num Num 8 0
5 revenu Num 8 8
3 sexe Char 8 32
Variantes:
• PROC CONTENTS DATA = malib._ALL_ SHORT ;
• PROC CONTENTS ; RUN ; pour le dernier tableau crée.
P. Blanchard – Logiciel SAS – Master 2 Recherche
26. 26
B) Les procédures de statistiques descriptives
1) PROC MEANS
Exemple n°18.
PROC MEANS DATA = temp ; VAR revenu conso ;
RUN ;
The MEANS Procedure
Variable N Mean Std Dev Minimum Maximum
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
revenu 12 8.9166667 2.4293034 5.0000000 14.0000000
conso 11 7.0833333 2.0652243 4.0000000 10.0000000
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
Les principales options de PROC MEANS options sont :
• N NMISS MEAN STD MIN MAX ...
• les quantiles (ou fractiles): P1 P5 P10 Q1 (P25) MEDIAN (P50) Q3 (P75)
P90 P95 P99 QRANGE etc.
• CSS CV KURTOSIS RANGE SKEWNESS SUM USS STDDEV (ou STD) VAR
...
• CLM (intervalle de confiance à 95%) ...
NB : On peut obtenir d’autres statistiques et certains graphiques avec PROC UNIVARIATE.
P. Blanchard – Logiciel SAS – Master 2 Recherche
27. 27
2) L’instruction PROC FREQ
Exemple n°19.
PROC FREQ DATA = temp ; TABLES sexe ; RUN ;
The FREQ Procedure
Cumulative Cumulative
sexe Frequency Percent Frequency Percent
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
f 3 25.00 3 25.00
h 9 75.00 12 100.00
NB: Frequency = Effectif et PERCENT = Fréquence.
Exemple n°20.
PROC FREQ DATA = temp ; TABLES csp*sexe ; RUN ;
Table of csp by sexe
csp sexe
Frequency‚
Percent ‚
Row Pct ‚
Col Pct ‚f ‚h ‚ Total
ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ
cadre ‚ 2 ‚ 1 ‚ 3
‚ 16.67 ‚ 8.33 ‚ 25.00
‚ 66.67 ‚ 33.33 ‚
‚ 66.67 ‚ 11.11 ‚
ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ
employé ‚ 1 ‚ 3 ‚ 4
‚ 8.33 ‚ 25.00 ‚ 33.33
‚ 25.00 ‚ 75.00 ‚
‚ 33.33 ‚ 33.33 ‚
ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ
ouvrier ‚ 0 ‚ 5 ‚ 5
‚ 0.00 ‚ 41.67 ‚ 41.67
‚ 0.00 ‚ 100.00 ‚
‚ 0.00 ‚ 55.56 ‚
ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ
Total 3 9 12
25.00 75.00 100.00
P. Blanchard – Logiciel SAS – Master 2 Recherche
28. 28
Options
NOFREQ: n’édite pas les effectifs.
NOPERCENT: n’édite pas les % par rapport au total des effectifs. NOROW: n’édite pas les % par
rapport à la somme en ligne.
NOCOL: n’édite pas les % par rapport au total de chaque colonne.
NOCUM: n’édite pas les effectifs cumulés (pour tableau à 1 caractère).
MISSING: les valeurs manquantes comptent dans le calcul (comme une modalité et dans le calcul
des effectifs totaux et donc des %) sinon elles sont comptabilisées à part.
MISPRINT: les valeurs manquantes sont dans le tableau mais ne comptent pas comptent dans le
calcul des %.
Exemple n° 21.
PROC FREQ DATA = temp ; TABLES csp*sexe /NOROW NOCOL ;
RUN ;
csp sexe
Frequency‚
Percent ‚f ‚h ‚ Total
ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ
cadre ‚ 2 ‚ 1 ‚ 3
‚ 16.67 ‚ 8.33 ‚ 25.00
ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ
employé ‚ 1 ‚ 3 ‚ 4
‚ 8.33 ‚ 25.00 ‚ 33.33
ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ
ouvrier ‚ 0 ‚ 5 ‚ 5
‚ 0.00 ‚ 41.67 ‚ 41.67
ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ
Total 3 9 12
25.00 75.00 100.00
P. Blanchard – Logiciel SAS – Master 2 Recherche
29. 29
Exemple n°22.
PROC FREQ DATA = temp ; TABLES sexe csp*sexe ; RUN ;
NB :
- A noter qu'en présence de variables numériques (revenu, age, chiffre d’affaires...) il est la plupart
du temps nécessaire de recoder la variables en une variable (numérique ou caractère) composé d’un
nombre de classe limité.
- Il y a de très nombreuses options (statistiques notamment).
Exemple n°23.
PROC FREQ DATA = temp ; TABLES csp*sexe / CHISQ;
RUN ;
Statistiques pour table de csp par sexe
Statistique DF Valeur Proba.
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
Khi-2 2 4.4444 0.1084
Test du rapport de vraisemblance 2 5.1783 0.0751
Khi-2 de Mantel-Haenszel 1 3.9855 0.0459
Coefficient Phi 0.6086
Coefficient de contingence 0.5199
V de Cramer 0.6086
AVERTISSEMENT : 100% des cellules nécessitent un effectif inférieur
à 5. Le Khi-2 ne peut pas convenir.
Taille de l'échantillon = 12
/* Le tableau à 2 car. n’est pas reproduit de nouveau */
P. Blanchard – Logiciel SAS – Master 2 Recherche
30. 30
3) L’instruction PROC CORR
Exemple n°24.
PROC CORR NOSIMPLE DATA = temp ; VAR revenu conso; RUN ;
The CORR Procedure
2 Variables: revenu conso
Pearson Correlation Coefficients
Prob > |r| under H0: Rho=0
revenu conso
revenu 1.00000 0.83503
0.0007
12 11
conso 0.83503 1.00000
0.0007
11 11
• Une variante utile est :
PROC CORR ; VAR conso age revenu ; WITH pmc secteur ;
• Différents coefficients de corrélation peuvent être calculés.
• Les principales options sont:
a) NOSIMPLE : pas de stat. des. fournies.
b) NOMISS : si une observation est manquante pour une variable, elle est éliminée pour
toutes les autres variables de l’analyse (cylindrage).
c) NOPROB : pas d’affichage du niveau de significativité marginale associée à chaque
coefficient de corrélation.
d) SSCP et/ou COV fait afficher la matrice des produits croisés (XtX) et/ou de la matrice de
variance-covariance.
P. Blanchard – Logiciel SAS – Master 2 Recherche
31. 31
C) Les instructions BY/CLASS et la procédure PROC SORT
1) L'instruction PROC SORT ... ; Cette instruction joue un rôle fondamental dans SAS pour
des raisons que nous verrons dans un deuxième temps.
Exemple n°25.
PROC SORT DATA = temp ; BY pays ; RUN ; /* tri par ordre croissant de pays */
/* numérique ou caractère */
On trie le dernier tableau crée. Le résultat trié aura donc le même nom, le fichier de base est perdu.
PROC SORT ; BY region annee ; RUN ;
PROC SORT ; BY region DESCENDING annee ; /* ordre croiss. de region (alphab.)*/
RUN ; /* et décroiss. d’année : 83,82,81. */
/* region et non région !!! */
PROC SORT DATA =temp OUT = ftrie ; BY pays ; /* fichier d'origine conservé */
RUN ;
Remarques: pour supprimer les doublons dans un tableau SAS, on peut faire:
PROC SORT DATA =temp OUT = ftrie NODUPKEY ; /* supprime les doublons / clés de tri */
BY pays annee ; RUN ;
ou
PROC SORT DATA =temp OUT = ftrie NODUPLICATES ; /* supprime les doublons / obs. */
BY pays annee ; RUN ;
P. Blanchard – Logiciel SAS – Master 2 Recherche
32. 32
2) Les instructions BY et CLASS : une application à PROC MEANS ;
Exemple n°26.
PROC MEANS ; BY csp ; RUN ;
PROC FREQ ; TABLES csp ; BY sexe ; RUN ; /* attention il faut un PROC SORT */
PROC REG ;
MODEL conso = revenu ; BY region ; RUN ; /* et ici un autre !!!! */
MAIS ATTENTION, il est indispensable que le tableau soit d'abord trié sur les mêmes variables et
dans le même ordre que celles de l'instruction BY.
Exemple n°27.
PROC SORT DATA = temp ; BY csp ; RUN ;
PROC MEANS ; VAR revenu conso ; BY csp ; RUN ;
----------------------------------------- csp=cadre ------------------------------------------
The MEANS Procedure
Variable N Mean Std Dev Minimum Maximum
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
revenu 3 12.0000000 1.7320508 11.0000000 14.0000000
conso 3 9.0000000 1.7320508 7.0000000 10.0000000
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
---------------------------------------- csp=employé -----------------------------------------
Variable N Mean Std Dev Minimum Maximum
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
revenu 4 8.7500000 0.9574271 8.0000000 10.0000000
conso 4 7.7500000 0.9574271 7.0000000 9.0000000
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
---------------------------------------- csp=ouvrier -----------------------------------------
Variable N Mean Std Dev Minimum Maximum
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
revenu 5 7.2000000 1.7888544 5.0000000 9.0000000
conso 4 5.4000000 1.6733201 4.0000000 8.0000000
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
P. Blanchard – Logiciel SAS – Master 2 Recherche
33. 33
Une alternative à BY est CLASS sexe ; qui évite d’avoir à trier le tableau. Les
résultats ont une présentation légèrement différente.
Exemple n°28.
PROC MEANS DATA = temp ; VAR revenu conso ; CLASS csp ; RUN ;
The MEANS Procedure
N
csp Obs Variable N Mean Std Dev Minimum Maximum
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
cadre 3 revenu 3 12.0000000 1.7320508 11.0000000 14.0000000
conso 3 9.0000000 1.7320508 7.0000000 10.0000000
employé 4 revenu 4 8.7500000 0.9574271 8.0000000 10.0000000
conso 4 7.7500000 0.9574271 7.0000000 9.0000000
ouvrier 5 revenu 5 7.2000000 1.7888544 5.0000000 9.0000000
conso 4 5.4000000 1.6733201 4.0000000 8.0000000
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
Mises en garde:
• si la variable est continue, chaque valeur distincte est une modalité. BY peut produire alors
des résultats très volumineux, voire inutilisables comme par exemple, si l’on fait
PROC MEANS ; BY revenu ; RUN ;
• En général, BY s'utilise plutôt sur des variables de type caractère ou sur des variables
continues avec peu de valeurs différentes (année..)..
• CLASS ne fonctionne pas pour toutes les procédures (PROC PRINT ; BY ; ).
• On peut donc faire PROC REG ... ; BY ; RUN ; ou PROC FREQ ... ; BY ;
RUN ; etc.
P. Blanchard – Logiciel SAS – Master 2 Recherche
34. 34
D) Les procédures graphiques
Elles sont de deux types:
a. les procédures basse définition. On laisse de côté.
b. les procédures haute définition.
Les graphiques haute définition sont affichés dans une fenêtre spécifique.
Les graphiques haute définition crées peuvent être facilement exporter dans des formats très variés
de fichier graphique bmp, jpg,wmf, gif, ps... par le menu (fichier, exporter).
P. Blanchard – Logiciel SAS – Master 2 Recherche
35. 35
1) PROC GPLOT: graphique dit XY.
Exemple n°29.
Goptions Ftext = swissb ; /* ce n’est pas une étape DATA ni une PROC */
Axis1 Label=('Revenu') ;
Axis2 Label =('N') ;
Symbol1 Color = Black I=Join Value=Circle ;
RUN ;
PROC GPLOT DATA = temp ;
PLOT revenu*num ;
RUN ; QUIT ;
P. Blanchard – Logiciel SAS – Master 2 Recherche
36. 36
Exemple n°30. (on peut demander plusieurs graphiques dans une demande).
PROC GPLOT DATA = temp ;
PLOT revenu*num ;
PLOT conso*revenu ;
RUN ; QUIT ;
Exemple n°31. (superposition)
DATA temp ; SET temp ;
Age = 2006 - YEAR(datenaiss) ;
RUN ;
Goptions Ftext = swissb ;
Axis1 Label=('Revenu et Age') ; Axis2 Label =('N') ;
Symbol1 Color = Black I=Join Value=Circle ;
Symbol2 Color = Red I=Join Value=square ;
RUN ;
PROC GPLOT DATA = temp ;
PLOT revenu*num age*num / OVERLAY haxis = axis2 vaxis = axis1 ;
TITLE Graphique overlay ; Footnote Source : PB ;
RUN ; QUIT ;
P. Blanchard – Logiciel SAS – Master 2 Recherche
37. 37
2) PROC GCHART: permet de représenter une série (num. ou car.) sous la forme d’histogramme
ou sectoriel.
Exemple n°32.
PROC GCHART DATA = temp ;
PIE sexe ;
HBAR csp ;
TITLE Utilisation de PROC GCHART ; Footnote Source : PB ;
RUN ; QUIT ;
• Graphiques en couleur
• HBAR csp / TYPE = PCT ; pour avoir les % et non les effectifs.
• Nombreuses variantes
P. Blanchard – Logiciel SAS – Master 2 Recherche
38. 38
Exemple n°33.
Goptions Ftext = swissb ;
Axis1 Label=('CSP') ; Axis2 Label =('Revenu moyen') ;
Symbol1 Color = Black I=Join Value=Circle ;
Symbol2 Color = Red I=Join Value=square ;
RUN ;
PROC GCHART DATA = temp ; VBAR csp / TYPE = MEAN SUMVAR = revenu ;
RUN ; QUIT ;
• TYPE peut être égal à FREQ, CFREQ, PCT, CPCT SUM ou MEAN.
• Très nombreuses options qui dépendent souvent du type de graphique.
• Rôle du QUIT.
Exemple n°34. création automatique des classes
PROC GCHART DATA = temp ;
VHBAR revenu / MIDPOINTS = 6 8 10 12 ; /* HBAR est aussi possible */
RUN ; QUIT ;
P. Blanchard – Logiciel SAS – Master 2 Recherche
39. 39
Un dernier graphique !
Comment le faire ?
P. Blanchard – Logiciel SAS – Master 2 Recherche
40. 40
E) Les instructions économétriques
1) PROC REG
PROC REG permet d'estimer une modèle économétrique par les moindres carrés ordinaires.
Exemple n°35.
PROC REG ;
MODEL conso = revenu ; /* specification informatique */
RUN ; QUIT ;
The REG Procedure
Model: MODEL1
Dependent Variable: conso
Analysis of Variance
Sum of Mean
Source DF Squares Square F Value Pr > F
Model 1 32.71384 32.71384 23.03 0.0007
Error 10 14.20282 1.42028
Corrected Total 11 46.91667
Root MSE 1.19176 R-Square 0.6973
Dependent Mean 7.08333 Adj R-Sq 0.6670
Coeff Var 16.82479
Parameter Estimates
Parameter Standard
Variable DF Estimate Error t Value Pr > |t|
Intercept 1 0.75353 1.36303 0.55 0.5925
revenu 1 0.70988 0.14791 4.80 0.0007
Le modèle est donc : Consoi = β1 + β 2 × Re venui + ui :
écriture économétrique
P. Blanchard – Logiciel SAS – Master 2 Recherche
41. 41
Les principales options disponibles dans PROC REG options_reg ; sont:
- DATA = nomtab nom du tableau utilisé, le dernier par défaut
- NOPRINT n'imprime aucun résultat
- SIMPLE imprime des stat. des. pour les variables utilisées dans la procédure
- ALL imprime toutes les statistiques possibles dans PROC REG (volumineux)
Exemple n°36.
Goptions Ftext = swissb ;
Symbol1 Color = Black Value=Circle ;
Symbol2 Color = Red Value=square ;
RUN ;
PROC REG SIMPLE DATA = temp ;
MODEL conso = revenu age / NOINT DW COVB ;
PLOT Residual.*Obs. ;
PLOT conso*Obs. Predicted.*Obs. / OVERLAY ;
RUN ; QUIT ;
P. Blanchard – Logiciel SAS – Master 2 Recherche
42. 42
Exemple n°37.
Pour obtenir un test d'hétéroscédasticité et des estimations robustes à l'hétéroscédasticité, faire :
PROC REG DATA = essai ;
MODEL lnc = lnp lny /ACOV SPEC; RUN ; QUIT ;
(résultats des mco non reproduits)
Dependent Variable: LNC
Consistent Covariance of Estimates
Variable Intercept LNP LNY
Intercept 1.1212904796 0.2181771074 -0.241869513
LNP 0.2181771074 0.1102122418 -0.050163679
LNY 0.241869513 -0.050163679 0.0523332408
Test of First and Second Moment Specification
DF Chi-Square Pr > ChiSq
5 5.70 0.3365
P. Blanchard – Logiciel SAS – Master 2 Recherche
43. 43
Exemple n°38.
PROC REG ;
MODEL consom = revenu age ;
TEST revenu = 0 , age = 1 ; RUN ; QUIT ;
Exemple n°39.
PROC REG ;
MODEL y = x1 x2 x3 z1 z2 ;
RESTRICT x1 + x2 + x3 = 1 ; RUN ; QUIT ;
2) PROC AUTOREG.
AUTOREG
Exemple n°40.
/* test de Chow */
PROC AUTOREG DATA = temp ;
MODEL conso = revenue age / CHOW = (8);
TITLE test de Chow ; RUN ;
Test de Chow Structural Change Test
Break
Test Point Num DF Den DF F Value Pr > F
Chow 8 3 40 5.29 0.0036
Exemple n°41.
/* PRAIS-WINSTEN */
PROC AUTOREG ;
MODEL y = x / METHOD = YW GODFREY DWPROB ;
TITLE Prais-Winsten ;
RUN ;
P. Blanchard – Logiciel SAS – Master 2 Recherche
44. 44
5) Présentation du programme, de l'output et du LOG
• Le contenu de chaque fenêtre (pgm, output, log…) peut être imprimé, sauvegardé, coupé-collé.
• D’autres fenêtres peuvent apparaître (aide, graphique...)
• les affichages s’empilent dans le Log et dans l’Output après chaque exécution (RUN).
• Il est inutile de sauvegarder le LOG et l’OUTPUT en règle générale.
i) il faut documenter le programme.
* commentaire ; ou par /* commentaire */
Exemple n° 42.
DM ‘CLEAR LOG ; CLEAR OUTPUT ; ‘ ; /* efface output et log à chaque exéc. */
* Blanchard P., essai.sas, 5/03/2003 ;
DATA temp ; SET consom ;
...
/* édition des données */
PROC PRINT DATA = temp ; RUN ;
PROC PRINT DATA = temp ; RUN ; /* édition du tableau temp */
/***************/
/* commentaire */
/***************/
PROC PRINT DATA = temp ; RUN ;
Exemple n° 43.
Bleu foncé
DATA temp ; SET temp ;
Bleu clair age = 2006 - YEAR(datenaiss) ;
chaine = 'v' ;
Vert foncé
violet
RUN ;
rouge
PROC FREQ ; TABLES Sexe age ;
vert TITLE Mon Titre ;
RUN ;
Noir
ceci est une erreur ;
/* ceci est un commentaire */
DATA, PROC FREQ, RUN et QUIT : BF
SET, TABLES et TITLE : BC
P. Blanchard – Logiciel SAS – Master 2 Recherche
45. 45
ii) L'OUTPUT
Exemple n° 44.
OPTIONS NOCENTER ; RUN ;
TITLE ; FOOTNOTE ; RUN ;
. . .
PROC MEANS ; RUN ;
PROC MEANS ; TITLE Mon Titre ; RUN ;
Le Système SAS 13:39 Thursday, April 20, 2006 1
La procédure MEANS
Variable Nb Moyenne Écart-type Minimum Maximum
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
num 12 6.5000000 3.6055513 1.0000000 12.0000000
revenu 12 8.9166667 2.4293034 5.0000000 14.0000000
conso 11 7.0833333 2.0652243 4.0000000 10.0000000
datenaiss 12 8206.33 4909.87 -1848.00 17115.00
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
Mon Titre 13:39 Thursday, April 20, 2006 2
La procédure MEANS
Idem ci dessus
- On peut faire du couper-coller (mais il y a mieux l’ODS, cf. plus loin).
- Utilisation de Title et de Footnote
• une instruction TITLE est en effet jusqu'à la prochaine instruction TITLE ;
• TITLE ; annule tous les titres (au début du programme)
• TITLE doit être placée dans une PROC avant le RUN ; sinon il modifie le titre de la PROC
précédente. Par conséquent, l’ordre des instructions est PROC ... ; TITLE ... ; RUN ;
• TITLEn (avec n=1,...,10) permet d'écrire des textes sur plusieurs lignes: par exemple,
TITLE texte en première ligne ; TITLE3 texte en troisième ligne ;
• L’instruction FOOTNOTE qui suit la même logique que TITLE.
- OPTIONS NOCENTER NODATE NONUMBER LINESIZE = 64-256
ORIENTATION = PORTRAIT ou LANDSCAPE PAGENO = 1 ;
P. Blanchard – Logiciel SAS – Master 2 Recherche
46. 46
iii) Le LOG
C’est un élément indispensable pour contrôler le bon déroulement de l’exécution. A examiner avant
de regarder les résultats.
Exemple n° 45.
DATA temp ; SET temp ;
age = 2006 - YEAR(datenaiss) ;
lconso = LOG(conso) ;
RUN ;
PROC MEANS ; RUN ;
77 DATA temp ; SET temp ;
78 age = 2006 - YEAR(datenaiss) ;
79 lconso = LOG(conso) ;
80 RUN ;
NOTE: Des valeurs manquantes ont été générées à la suite d'une opération sur
des valeurs manquantes.
Chaque endroit est défini par : (Nombre de fois) dans (Ligne):(Colonne).
1 dans 79:10
NOTE: 12 observations copiées de la table WORK.TEMP.
NOTE: La table WORK.TEMP a 12 observations et 9 variables.
NOTE: L'étape DATA a utilisé (Durée totale du processus) :
temps réel 0.04 secondes
temps processeur 0.04 secondes
81
82 PROC MEANS ; RUN ;
NOTE: 12 observations copiées de la table WORK.TEMP.
NOTE: La procédure MEANS a utilisé (Durée totale du processus) :
temps réel 0.01 secondes
temps processeur 0.01 secondes
P. Blanchard – Logiciel SAS – Master 2 Recherche
47. 47
Exemple n° 46.
DATA temp ; SET temp ;
age = 2006 - YEAR(datenaiss) ;
lconso = LOG(conso) ;
RUN ;
PROC MOYENNE ; RUN ;
PROC MEANS RUN ; /* RUN n’est pas en BF */
87
88 PROC MOYENNE ; RUN ;
ERREUR: Procédure MOYENNE introuvable.
NOTE: Le Système SAS a interrompu le traitement de cette étape en raison
d'erreurs.
NOTE: La procédure MOYENNE a utilisé (Durée totale du processus) :
temps réel 0.01 secondes
temps processeur 0.00 secondes
89
90 PROC MEANS RUN ;
--- -
22 200
ERREUR 22-322: Erreur de syntaxe ; syntaxe requise : ;, ALPHA, CHARTYPE, CLASSDATA, CLM,
COMPLETETYPES, CSS, CV,
DATA, DESCEND, DESCENDING, DESCENDTYPES, EXCLNPWGT, EXCLNPWGTS,
EXCLUSIVE, FW, IDMIN, KURTOSIS, LCLM,
MAX, MAXDEC, MEAN, MEDIAN, MIN, MISSING, N, NDEC, NMISS, NONOBS, NOPRINT,
NOTHREADS, NOTRAP, NWAY,
ORDER, P1, P10, P25, P5, P50, P75, P90, P95, P99, PCTLDEF, PRINT,
PRINTALL, PRINTALLTYPES, PRINTIDS,
PRINTIDVARS, PROBT, Q1, Q3, QMARKERS, QMETHOD, QNTLDEF, QRANGE, RANGE,
SKEWNESS, STDDEV, STDERR, SUM,
SUMSIZE, SUMWGT, T, THREADS, UCLM, USS, VAR, VARDEF.
ERREUR 200-322: Le symbole n'est pas reconnu et sera ignoré.
P. Blanchard – Logiciel SAS – Master 2 Recherche
48. 48
Partie II) Approfondissements sur l’étape DATA et les procédures
I ) Approfondissements sur l’étape DATA
1) Lecture d'un fichier externe au format EXCEL
Pour importer (i.e. convertir) un fichier Excel SAS, il y a de nombreuses possibilités:
• Utiliser l'utilitaire d'importation utilisable avec les menus.
• Utiliser la procédure PROC IMPORT (cf. plus loin).
• Utiliser des logiciels spécialisés (DBMS-copy, STAT-Transfer...).
• Utilisation d'ODS (pour l'exportation uniquement). Non traité ici.
• Utilisation du DDE. Non traité ici.
Soit le tableau Excel (c:Documents and Settingstab.xls) à importer.
A B
1 nomvar1 nomvar2
2 1 a
3 2 b
4 3 c
5 4 d
6 5 e
Vous noterez qu’il est souhaitable qu’il n’y ait pas de colonne et de ligne vides et il faut que les
colonnes aient des intitulés conformes à la syntaxe SAS pour les noms de variables. Si une donnée
est manquante, saisir dans la cellule =NA().
Etape 1 : définir un Libname en exécutant, par exemple, l’instruction suivante dans la fenêtre
Editeur:
LIBNAME moi ‘c:Mes Documents’ ; RUN ;
Etape 2 : Appel du Menu File / Import Data et choisir Microsoft Excel 97 ou 2000 (.xls). Next.
Etape 3 : Avec Parcourir sélectionner le fichier Excel à convertir puis Next.
Etape 4 : Définir Library avec moi et donnez un nom de tableau dans Member. Puis Next.
Etape 5 : Cliquez sur Finish.
P. Blanchard – Logiciel SAS – Master 2 Recherche
49. 49
2) La sélection d'observations dans l’étape DATA
Il y a trois techniques principales de sélection d’observations.
i) L’instruction IF
Exemple n°47.
DATA tab1 ; SET donnees ; /* en general on ne met qu’un IF */
IF annee = 1963 ;
IF 10 <= age <= 50 ;
IF ((x1=5) AND (c=20 OR c=25)) ;
IF annee IN(1989,1991,1993) ;
IF test ; /* IF test = 1 */
... /* il peut y avoir d’autres instructions */
RUN ;
Voici une variante.
DATA essai ; SET tableau ;
IF annee <= 1979 THEN DELETE ;
pmc = conso/revenu ;...
RUN ;
Exemple n°48.
DATA essai ; SET tableau ;
IF _N_ <= 1000 ;
/* ou */
IF 100 <= _N_ <= 1000 ;
RUN ;
P. Blanchard – Logiciel SAS – Master 2 Recherche
50. 50
ii) L'instruction/option WHERE
Supposons que l’on souhaite faire un calcul statistique en se limitant aux individus de sexe féminin.
On peut faire :
Exemple n°49.
DATA femme ; SET total ; IF sexe = ‘F’ ; /* solution 1, déjà vue */
RUN ;
/* ou */
DATA femme ; SET total ; WHERE sexe = ‘F’ ; /* WHERE = instruction */
RUN ;
/* puis */
PROC MEANS DATA = femme ; RUN ;
/* mieux encore */
PROC MEANS DATA = total ; VAR salaire ; WHERE sexe = 'F' ; RUN ;
NB : avantages de WHERE
• Mais surtout, WHERE offre d'autres possibilités, comme par exemple :
WHERE nom CONTAINS ‘BLANCHARD’ ;
WHERE salaire BETWEEN 100 AND 100000 ;
WHERE ident IS MISSING ;
autres possibilités : LIKE, SAME.
• WHERE fonctionne aussi avec les procedures (mais PAS IF).
• WHERE en général plus rapide que IF.
/* NB : WHERE = option au nom de tableau */
DATA femme (WHERE = (sexe = 'F')) ; SET total ; RUN ;
PROC MEANS DATA = total(WHERE=(sexe='F')) ; VAR salaire ;
RUN ;
P. Blanchard – Logiciel SAS – Master 2 Recherche
51. 51
iii) Les options OBS et FIRSTOBS de SET
Les options suivantes sont très intéressantes et ne sont valables que sur le tableau en entrée.
Exemple n°50.
DATA tab1 ; SET donnees (FIRSTOBS=80 OBS = 100 ) ;
/* qui est identique à */
DATA tab1 ; SET donnees ; IF 80 <= _N _<= 100;
Si l’on veut faire la même chose pour tout le programme SAS, on peut mettre au début du
programme :
Exemple n°51.
OPTIONS FIRSTOBS=80 OBS=100 ;
• Notez que OBS = 100 ne veut pas dire les 100 suivantes, mais jusqu'à la 100ième.
• Il faut bien sûr que OBS > FIRSTOBS
• OPTIONS OBS=MAX FIRSTOBS=1 ; annule OPTIONS ... ;
• On peut utiliser ces options pour tester un programme d’un point de vue syntaxique sur une
partie des données avec OPTIONS OBS = 0 ;
Exemple n°52.
DATA tab1 ; SET donnees (OBS = 0 ) ;
/* ou */
PROC MEANS DATA = essai(OBS=0) ; VAR x1 x2 x3 x4 ;
P. Blanchard – Logiciel SAS – Master 2 Recherche
52. 52
3) Les variables de totalisation.
Considérons que l'on dispose de 2 variables dans un tableau SAS (essai1):
A = 1 10 2 30 44
B = 1 10 2 . 44
Supposons que l'on veuille créer 2 variables de cumul suma (pour a) et sumb (pour b) plus une
variable donnant le numéro de l'observation (nobs = 1, 2, 3 …).
Une possibilité est d'utiliser l'instruction RETAIN.
Exemple n°53.
DATA essai1 ; SET essai1 ;
RETAIN nobs 0 suma 0 sumb 0 ;
nobs = nobs + 1 ; /* 1 2 3 4 5 */
suma = suma + a; /* 1 11 13 43 87 */
sumb = sumb + b ; /* 1 11 13 . . (propagation des val. manq.) */
P. Blanchard – Logiciel SAS – Master 2 Recherche
53. 53
4) Les boucles sur les observations et sur les variables
a) Les boucles sur les observations
Exemple n°54.
DATA simul ; /* (pas de SET, c’est rare) */
DO N = 1 TO 10 ;
x = UNIFORM(0) ;
perturb = NORMAL(0) ;
y = 3 + (-2*x) + perturb ;
OUTPUT ; /* (sinon on ne crée que la dernière observation */
/* Dans une étape DATA, il y a un OUTPUT implicite */
END ;
PROC PRINT ; RUN ;
Obs N x perturb y
1 1 0.95395 0.49853 1.59063
2 2 0.23939 -0.94737 1.57385
3 3 0.65603 0.44621 2.13415
4 4 0.85442 -1.12369 0.16746
5 5 0.93359 0.25209 1.38491
6 6 0.86566 0.51277 1.78145
7 7 0.53576 -0.76820 1.16028
8 8 0.36002 0.45920 2.73916
9 9 0.57523 2.42160 4.27114
10 10 0.85086 1.68401 2.98230
DO WHILE condition ; action(s) ; END ; /* condition évaluée au début, => au moins 0 itération */
DO UNTIL condition ; action(s) ; END ;/* condition évaluée à la fin, => au moins 1 itération */
P. Blanchard – Logiciel SAS – Master 2 Recherche
54. 54
b) Les boucles sur les variables. C'est très utile car cela permet d'effectuer des traitements
répétitifs sur de nombreuses variables avec peu d'instructions.
Exemple n°55.
DATA temp ; SET temp ;
ARRAY vecvar x1-x12 x14 x1 r40-r55 effec ;
DO OVER vecvar ;
vecvar = LOG(vecvar) ; /* ttes les var. de vecvar sont passées en log. */
END ;
Exemple n°56.
DATA temp(DROP = i) ; SET temp ;
ARRAY vliste(4) ventes export import invest ;
DO i = 1 TO 4 ;
vliste(i) = vliste(i) * 1.206 ; /* passage en TTC */
END ;
P. Blanchard – Logiciel SAS – Master 2 Recherche
55. 55
5) Les types de variables. Les Labels. Manipulation des chaînes de caractères.
a) Retour sur la création des variables
Lors de l'affectation d'une valeur à une variable, il s'opère quatres opérations purement techniques :
• une déclaration du type de la variable (caractère/numérique),
• une définition de la longueur de la variable,
• l'initialisation de la variable à une certaine valeur (par défaut, valeur manquante).
• éventuellement association avec un format (cf. plus loin).
Rappelez-vous que SAS ne connaît que les variables numériques (réelles) et les variables de type
chaîne de caractères.
Exemple n°18
DATA temp ;
INPUT x nom $ prenom $ pays $ ;
CARDS ;
1 moi jacques A
2 dupont rené 1
f toto 123 bb
• Pour la première observation (celle qui conditionne le type et la longueur des variables) : x
vaut 1, nom vaut moi et prenom vaut jacqueset pays vaut A.
• Pour la deuxième observation, x vaut 2, nom vaut dup (troncation automatique) et prenom
vaut rené (pas de troncation). Pays vaut 1.
• Pour la troisième observation, x vaut ., nom vaut tot (troncation automatique) et prenom
vaut 123. Pays vaut b.
/* La solution consiste à faire */
DATA temp ;
LENGTH nom $ 6 prenom $ 7 pays $ 2 ;
INPUT x nom $ prenom $ pays $
CARDS ;
1 moi jacques A
2 dupont rené 1
3 toto 123 bb
P. Blanchard – Logiciel SAS – Master 2 Recherche
56. 56
• On ne peut pas changer le type d'une variable définie.
• mais on peut créer une autre variable de type différent
Exemple n°19
Si an est une variable caractère (qui vaut '86', '87', '88' etc.), l’instruction
DATA temp ; SET temp;
IF an = 86 ;
• SAS effectue automatiquement, quand c’est possible, des conversions de type de variable
(avec un warning dans le LOG).
Exemple n°20
Si an est une variable caractère (qui vaut '86', '87', '88' etc.), l’instruction
DATA temp ; SET temp;
annee = 0 ; annee = an ;
crée année en numérique.
P. Blanchard – Logiciel SAS – Master 2 Recherche
57. 57
b) Les labels
Exemple n°21
DATA temp ; SET temp;
LABEL pmc = "propension marginale à consommer" ;
pmc = conso/revenu ;
NB :
• 256 car. maxi pour un label
• Attention les éditions peuvent être plus volumineuses
• il y a aussi un LABEL pour les tables SAS (option au nom de tableau, moins utile).
• un label peut être défini dans une procédure mais il n'est pas alors conservé dans le tableau
SAS
• On peut mettre des caractères accentués dans le LABEL, c'est d'ailleurs un des rares
endroits où l'on puisse le faire dans SAS (avec les titres et les commentaires).
• Néanmoins, avec les noms plus longs de variables avec SAS 8 (32 car.), ceci est moins
utile.
c) Les chaînes de caractères
Exemple n°22
ville = 'PARIS' ;
IF ville = 'paris' THEN ... ; /* est faux */
ville = 'PARIS' ;
IF ville > 'paris' THEN ... ; /* est vrai */
P. Blanchard – Logiciel SAS – Master 2 Recherche
58. 58
7) Concaténation et fusion contrôlée de tableaux SAS
Jusqu’à présent, nous avons utilisé l’instruction SET dans le contexte suivant :
DATA temp ; SET essai ;
etc...
En pratique, les informations dont on a besoin sont fréquemment stockées dans des fichiers (des
tableaux) différents. Comment procéder alors ?
a ) Comment créer plusieurs tableaux dans une seule étape DATA.
Examinons comment créer trois tableaux à partir d'un seul.
Exemple n°23
DATA hommes femmes erreurs ; SET total ;
IF sexe = ‘F’ THEN OUTPUT femmes ;
ELSE IF sexe = ‘H’ THEN OUTPUT homes ;
ELSE OUTPUT erreurs;
PROC PRINT DATA = erreurs ; RUN ;
On peut bien sur faire d’autres opérations dans l’étape DATA.
P. Blanchard – Logiciel SAS – Master 2 Recherche
59. 59
b ) La concaténation (verticale) de tableau SAS par SET.
Considérons les trois tableaux SAS suivants :
Exemple n°24
tab1 tab2 tab3
nom age nom age nom nbannee
B 10 d 40 e 88
A 20 e 50 f 99
C 30
Considérons que nous souhaiterions réunir ces trois tableaux par une opération de concaténation
verticale (les empiler les uns en dessous des autres). Pour cela, il faut faire :
DATA total ; SET tab1 tab2 tab3 ;
Cette instruction procède à une concaténation verticale des trois tableaux telle que le tableau
résultant soit total :
nom age nbannee
b 10 .
a 20 .
c 30 .
d 40 .
e 50 .
e . 88
f . 99
notez :
- que le nouveau tableau a autant de colonnes qu'il y avait dans les tableaux tab1, tab2 et tab3 de
variables ayant des noms différents,
- que les données des différents tableaux ne sont pas nécessairement triées,
- que les observations sont complétées par des valeurs manquantes quand une variable est dans
un tableau et pas dans un autre,
- que le fait qu'il y ait 2 individus e ne pose pas de pb particulier (sauf si on voulait en ignorer
un; pb des doublons, cf. plus loin).
- Que fait : DATA total ; SET tab2 tab1 ;
- Il peut y avoir autant de tableaux que l'on veut dans cette instruction. Bien sur, il est possible
d'utiliser les options/instructions DROP, KEEP, WHERE, RENAME, IF, SELECT….
P. Blanchard – Logiciel SAS – Master 2 Recherche
60. 60
Voyons une variante résolvant le problème de nbannee et age :
Exemple n°25
DATA total ; SET tab1 tab2 tab3(RENAME=(nbannee=age)) ;
produit
total
Nom age
b 10
a 20
c 30
d 40
e 50
e 88
f 99
P. Blanchard – Logiciel SAS – Master 2 Recherche
61. 61
c ) Les fusions contrôlées de tableaux par MERGE ; BY ;
Cette instruction se révèle fondamentale.
i) fusion contrôlée : Supposons que l'on dispose de trois fichiers de données
Exemple n°26
ESE EAE DDAS
ident effectif ident va ident salaire
1 11 2 22 1 13
2 21 3 32 3 33
3 31 5 52 4 43
4 41 5 53
6 63
Si les trois tableaux ne sont pas triés par ident, il faut le faire, à cause de l’utilisation du BY.
PROC SORT DATA = ese ; BY ident ; RUN ;
DATA total ; MERGE ese eae dddas ; BY ident ;
ident effectif va salaire
1 11 . 13
2 21 22 .
3 31 32 33
4 41 . 43
5 . 52 53
6 . . 63
P. Blanchard – Logiciel SAS – Master 2 Recherche
62. 62
ii) Cylindrage. On ne souhaite conserver que les individus (repérés par leur identifiant)
présents dans les trois fichiers à la fois.
Exemple n°27
EAE DDAS
ESE
ident effectif Ident va ident salaire
1 11 2 22 1 13
2 21 3 32 3 33
3 31 5 52 4 43
4 41 5 53
6 63
DATA cylind ; MERGE ese(in=in1) eae(in=in2) ddas(in=in3) ;
BY ident ;
IF in1 & in2 & in3 ;
ident effectif Va salaire
3 31 32 33
P. Blanchard – Logiciel SAS – Master 2 Recherche
63. 63
d) La gestion des doublons: les options FIRST et LAST.
Soit le tableau total
total
Nom age
b 10
a 20
c 30
d 40
e 50
e 50
f 99
Considérons que l'individu e soit en doublon. Comment l'éliminer ?
Exemple n°28
PROC SORT DATA = total ; BY nom ;
DATA total1 ; SET total ; BY nom ;
IF FIRST.nom ;
total1 contient :
Nom age
a 20
b 10
c 30
d 40
e 50
f 99
que produit IF LAST.nom ?
P. Blanchard – Logiciel SAS – Master 2 Recherche
64. 64
II) L'ODS : L'ODS signifie Output Delivery System.
Exemple n°57.
ODS RTF file = 'c:resultat1.rtf' BODYTITLE STYLE = DEFAULT ;
TITLE ; OPTIONS NODATE NONUMBER ;
PROC MEANS ; RUN ;
ODS RTF CLOSE ;
RUN ;
La procédure MEANS
Variable Nb Moyenne Écart-type Minimum Maximum
num 12 6.5000000 3.6055513 1.0000000 12.0000000
revenu 12 8.9166667 2.4293034 5.0000000 14.0000000
conso 11 7.2727273 2.0538213 4.0000000 10.0000000
datenaiss 12 8206.33 4909.87 -1848.00 17115.00
NB:
• Le résultat apparait aussi dans l’Output sauf si ODS LISTING CLOSE ;.
• On peut sélectionner certains résultats, créer des fichiers au format HTML.
• Avantage fondamental : couper/coller sous Word. Les tableaux sont de vrais tableaux.
• Attention : si erreur de syntaxe, le fichier sera vide.
• On peut essayer différents styles avec STYLE = Analysis, Astronomy, Banker,
BarrettsBlue, Beige, Brick, Brown, Curve, D3d, Default, EGDefault,
Education, Electronics, Festival, Gears, Journal, Magnify, Meadow,
Minimal, Money, NoFontDefault, Normal, Printer, Rsvp, Rtf, Sasweb,
Science, Seaside, Sketch, Statdoc, Statistical, Theme, Torn, Watercolor,
blockPrint, fancyPrinter, sansPrinter, sasdocPrinter, serifPrinter.
• On peut créer son propre style (complexe).
• Les procédures PROC PRINT, PROC REPORT et PROC TABULATE peuvent utiliser les
styles de manière spécifique avec l’option STYLE=…
• BODYTITLE signifie que les titres SAS apparaitront dans le corps du texte et non en en-tête
sous Word.
P. Blanchard – Logiciel SAS – Master 2 Recherche
65. 65
III) Approfondissements sur les procédures
A) Lecture d'un fichier externe au format EXCEL : Pour importer (i.e. convertir) un fichier
Excel SAS, il y a de nombreuses possibilités.
• possibilité d'utiliser l'utilitaire d'importation/exportation utilisable avec les menus.
• Utiliser la procédure PROC IMPORT
• Utiliser des logiciels spécialisés (DBMS-copy, STAT-Transfer...).
• Utilisation d'ODS (pour l'exportation uniquement). Non traité ici.
Exemple n°2 : PROC IMPORT/PROC EXPORT
Soit le tableau Excel (tab.xls)
A B
1 nomvar1 nomvar2
2 1 a
3 2 b
4 3 c
5 4 d
6 5 e
On peut l'importer en faisant (le module PC-File Format est requis)
LIBNAME in 'c:pierre02' ;
RUN ;
/* import d'un fichier excel vers SAS*/
PROC IMPORT out=in.tabtest1
DATAFILE ="c:pierre02tab.xls"
DBMS=excel2000 replace;
GETNAMES=YES;
RUN;
Pour l'exporter,
LIBNAME in 'c:pierre02' ; RUN ;
/* export d'un tableau SAS vers un fichier excel */
PROC EXPORT DATA= in.tabtest
OUTFILE= "C:pierre02tab2.xls"
DBMS=EXCEL2000 REPLACE ;
RUN;
PROC IMPORT peut importer aussi des fichiers ACCESS, DBF, WKS…
PROC EXPORT peut exporter vers des fichiers XLS et ASCII
P. Blanchard – Logiciel SAS – Master 2 Recherche
66. 66
B) La création de tableaux par des procédures : l’instruction OUTPUT OUT . Création d’un
tableau par une procédure : l’exemple de PROC MEANS ;
Considérons le tableau temp (cf. page suivante) qui contient 13 observations pour la variable
revenu notamment.
num nom sexe csp revenu conso
1 AA h employé 10 9
2 BB f cadre 11 7
3 CC h ouvrier 5 4
4 DD h employé 8 7
5 EE h cadre 14 10
6 FF h ouvrier 6 4
7 GG h ouvrier 7 6
8 HH f cadre 11 10
9 II h ouvrier 9 8
10 JJ h employé 9 8
11 KK f employé 8 7
12 LL h ouvrier 9 5
13 MM f . . 5
On voudrait connaître
1°) le % que représente le revenu d’un individu de sexe donné par rapport au revenu moyen des
autres individus de même sexe.
2°) le % que représente le revenu d’un individu par rapport au revenu moyen des autres individus.
Comment faire ?
P. Blanchard – Logiciel SAS – Master 2 Recherche
67. 67
Exemple n°29
PROC SORT DATA = temp ; BY sexe ;
PROC MEANS NOPRINT DATA = temp ; BY exe ;
OUTPUT OUT = stat MEAN(revenu) = mrevenu ;
PROC PRINT DATA = stat ; RUN ;
DATA temp1 ; MERGE temp stat ; BY sexe ;
prev = revenu/mrevenu ;
RUN ;
PROC PRINT ; VAR nom sexe revenu mrevenu prev ; RUN ;
Obs sexe _TYPE_ _FREQ_ mrevenu
1 f 0 4 10.0000
2 h 0 9 8.5556
Obs nom sexe revenu mrevenu prev
1 BB f 11 10.0000 1.10000
2 HH f 11 10.0000 1.10000
3 KK f 8 10.0000 0.80000
4 MM f . 10.0000 .
5 AA h 10 8.5556 1.16883
6 CC h 5 8.5556 0.58442
7 DD h 8 8.5556 0.93506
8 EE h 14 8.5556 1.63636
9 FF h 6 8.5556 0.70130
10 GG h 7 8.5556 0.81818
11 II h 9 8.5556 1.05195
12 JJ h 9 8.5556 1.05195
13 LL h 9 8.5556 1.05195
P. Blanchard – Logiciel SAS – Master 2 Recherche
68. 68
Exemple n°30
PROC MEANS NOPRINT ; VAR revenu ; ;
OUTPUT OUT = stat1 MEAN(revenu) = mrevenu ;
PROC PRINT dATA = stat1 ; RUN ;
DATA temp ; SET temp ; ind = 1 ;
DATA stat1 ; SET stat1 ; ind = 1 ;
DATA temp2 ; MERGE temp stat1 ; BY ind ;
prevtot = revenu/mrevenu ;
PROC PRINT ; VAR nom sexe revenu mrevenu prevtot ; RUN ;
Obs _TYPE_ _FREQ_ mrevenu
1 0 13 8.91667
Obs nom sexe revenu mrevenu prevtot
1 BB f 11 8.91667 1.23364
2 HH f 11 8.91667 1.23364
3 KK f 8 8.91667 0.89720
4 MM f . 8.91667 .
5 AA h 10 8.91667 1.12150
6 CC h 5 8.91667 0.56075
7 DD h 8 8.91667 0.89720
8 EE h 14 8.91667 1.57009
9 FF h 6 8.91667 0.67290
10 GG h 7 8.91667 0.78505
11 II h 9 8.91667 1.00935
12 JJ h 9 8.91667 1.00935
13 LL h 9 8.91667 1.00935
A noter :
• Vous noterez l'interprétation de _FREQ_ (le nombre d'individus de chaque sous population).
• CLASS est préférable à BY car pas de tri nécessaire avant (nb max de var. de class. = 30).
• Les résultats sont présentés différemment, cf. _TYPE_ pour sélectionner le niveau d'agrégation.
• Avec NOPRINT, rien n’est affiché dans l’Output. Pour visualiser le résultat, il faut faire :
PROC PRINT DATA = result ;
• Avec plusieurs variables, cela marche aussi.
P. Blanchard – Logiciel SAS – Master 2 Recherche
69. 69
C) Les procédures PROC FORMAT, PROC FREQ et PROC TABULATE
1) L’instruction PROC FORMAT
Exemple n°50
PROC FORMAT LIBRARY = in ;
VALUE $fsexe
"m", "M", "h", "H" = "Homme"
"f", "F" = "Femme" ;
VALUE fage
0-17 = "- de 18 ans"
18-59 = "18-59 ans"
60-HIGH = "retraité" ;
VALUE fchoix
1 = "oui"
2 = "non"
0,3-9 = "ND" ;
VALUE fzero
LOW - <0 = '<0'
0 = ' 0'
0< - HIGH = '>0' ;
RUN ;
Notez que cette façon de faire permet en quelque sorte de recoder à peu de frais les variables
numériques. C'est un de ces grands avantages.
Ensuite, on l’utilise dans une procédure (PROC MEANS, PROC GCHART, PROC FREQ…).
P. Blanchard – Logiciel SAS – Master 2 Recherche
70. 70
Exemple n°51
/* on suppose que PROC FORMAT dans le pgm */
DATA essai ;
INPUT sexe $ age choix ;
CARDS ;
m 11 1
f 21 2
m 31 3
f 41 2
H 12 1 /* attention : on a H */
m 22 1
f 32 0
f 42 1
m 13 2
m 23 .
. 33 2
m 43 1
;
PROC FREQ ;
TABLE sexe*age sexe*choix / NOROW NOCUM ;
FORMAT age fage. choix fchoix. sexe $fsexe.;
RUN ;
NB : Que se passerait-il sans l’instruction FORMAT … ; ???
P. Blanchard – Logiciel SAS – Master 2 Recherche
71. 71
Table of sexe by age
Frequency‚
Percent ‚- de 18 ans ‚18-59 ans‚ Total
ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒˆ
Homme ‚ 3 ‚ 4 ‚ 7
‚ 27.27 ‚ 36.36 ‚ 63.64
ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒˆ
Femme ‚ 0 ‚ 4 ‚ 4
‚ 0.00 ‚ 36.36 ‚ 36.36
ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒˆ
Total 3 8 11
27.27 72.73 100.00
Frequency Missing = 1
Table of sexe by choix
Frequency‚
Percent ‚ND ‚oui ‚non ‚ Total
ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ
Homme ‚ 1 ‚ 4 ‚ 1 ‚ 6
‚ 10.00 ‚ 40.00 ‚ 10.00 ‚ 60.00
ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ
Femme ‚ 1 ‚ 1 ‚ 2 ‚ 4
‚ 10.00 ‚ 10.00 ‚ 20.00 ‚ 40.00
ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ
Total 2 5 3 10
20.00 50.00 30.00 100.00
Frequency Missing = 2
P. Blanchard – Logiciel SAS – Master 2 Recherche
72. 72
2) L’instruction PROC TABULATE
Voici un petit exemple donnant une idée ce que qu'elle permet (sur les donnée de csp/sexe):
Exemple n°52
PROC FORMAT LIBRARY = work ;
VALUE $fsexe
"h" = "Homme"
"f" = "Femme" ;
PROC TABULATE DATA = test ; CLASS sexe csp ;
VAR revenu ;
TABLE sexe ALL , (csp ALL)*revenu*(MEAN N) / RTS = 16 ;
FORMAT sexe $fsexe.;
RUN ;
P. Blanchard – Logiciel SAS – Master 2 Recherche