SAS base Introduction à SAS SQL SAS IML

Transcription

SAS base Introduction à SAS SQL SAS IML
SAS base
Introduction à SAS SQL
SAS IML
Introduction
Le système SAS est un ensemble de modules logiciels pour la gestion et le traitement statistique des
données. À travers différents types d’interfaces utilisateur, il permet l’écriture de programmes SAS qui
exécutent :
• les saisies, importations, interrogations, manipulations, transformations de données,
• les éditions d’états, de rapports financiers, de graphiques,
• les analyses statistiques, modélisation, prévision,
• des applications spécifiques définies sous forme de macro-commandes et pouvant être
pilotées par menu.
Il existe plusieurs modules qui permettent un traitement de l’information sans écrire une ligne de
programme : les modules Insight, Enterprise Guide et Enterprise Miner ont été élaborés en ce sens. Il
serait possible, en première approche, de se contenter de cette utilisation élémentaire mais l’usage
montre que ces solutions sont nécessairement limitées et qu’un usage professionnel, associé à des
contraintes spécifiques, rend incontournable l’usage d’une programmation basique.
SAS propose plusieurs langages de programmation, qui se complètent et s’enrichissent mutuellement.
• le langage de base, qui couvre 95% des utilisations et des besoins quotidiens autour de SAS :
extraction, transformation, croisement de plusieurs sources d’information, production et mise
en forme de résultats.
• Le langage macro, série d’instructions dédiées au paramétrage d’un programme.
• Le SQL (Structured Query Language), commun à de nombreux logiciels de gestion de bases
de données (SGBD), permettant également l’extraction, la transformation et l’appariement de
données.
• L’IML (Interactive Matrix Language), langage matriciel permettant de nombreux calculs
mathématiques et statistiques.
Ce cours abordera ces 4 langages, en insistant tout particulièrement sur 2 d’entre eux : le langage de
base et le langage macro. A l’issue de cet enseignement, vous devrez être capable de manipuler les
données à travers le langage SAS de base, paramétrer les traitements avec le langage macro,
effectuer des traitements matriciels, et faire des traitements basiques de données avec SQL. Il est
fortement recommandé, surtout dans la période de prise en main du logiciel, de consulter les manuels
de SAS ou la documentation SAS en ligne afin notamment de prendre connaissance de la syntaxe et
de l’ensemble des options disponibles pour les procédures. La documentation SAS en ligne est
disponible à l’adresse : http://support.sas.com/onlinedoc/913/docMainpage.jsp
Ce cours abordera les points suivants :
• l’import de fichiers textes en tables SAS et l’export de tables SAS en fichier texte, l’utilisation
de la proc import et de la proc export pour l’import/export de différents types de
fichiersl’appariement de fichiers SAS et la transformation des variables (étapes DATA).
• les principales procédures d’édition de tables, d’analyse univariée et bivariée et de gestion de
tables (étapes PROC).
• le langage SQL (Structured Query Language) de gestion des données informatiques des
SGBD relationnels.
• le langage matriciel (module SAS IML).
• les graphiques avec SAS GRAPH.
• le macro langage SAS.
1
Au cours du TP, nous reprendrons ces différents points du cours. En outre :
• nous verrons comment utiliser le menu Import de données et Export de données de SAS pour
importer et exporter des fichiers sans passer par la programmation dans l’éditeur.
• nous aborderons le module SAS Insight.
• nous aborderons d’autres procédures graphiques et statistiques couramment utilisées que
nous n’évoquerons pas en cours, et notamment :
 PROC PRINCOMP (analyse en composantes principales)
 PROC CORRESP (analyse des correspondances)
 PROC REG (régressions simple ou multiple)
2
Préalables
1. Les fenêtres de SAS
5 fenêtres s’ouvrent au démarrage de SAS (ci-dessus après avoir choisi Fenêtre / Mosaïque
verticale) :
•
la fenêtre de programmation (éditeur) : entrer, éditer, compiler les programmes de SAS.
Deux fenêtres de programmation sont disponibles à partir de la version 8 de SAS : le Program
Editor et l’Enhanced Editor.
Dans l’Enhanced Editor, des lignes horizontales marquent les grandes étapes du programme.
Les carrés contenant un signe moins ou plus situés en marge du programme permettent de
visualiser uniquement la première ligne de chaque étape, ou l’intégralité du code de cette
étape.
Il est possible de condenser l’ensemble d’un programme via le menu Edit > Collapse all, et de
le remettre en vue intégrale via Edit > Expand all.
3
•
la fenêtre Journal (ou fenêtre Log) : analyse de la syntaxe du programme exécuté
(messages SAS après compilation). Les principaux messages du Journal sont :
les notes (en bleu dans SAS Windows) : aucune anomalie dans le traitement demandé,
les avertissements (Warnings) : il est possible que des erreurs non fatales aient eu lieu
pendant le traitement,
et les erreurs (Error, en rouge) : des erreurs graves de traitement ont eu lieu.
De plus, SAS recopie (en noir) le code qui lui a été soumis, précédé de numéros de lignes
incrémentés à chaque nouveau programme exécuté dans la session.
Le message Error signale une erreur qui a stoppé l’exécution de cette étape du programme.
SAS traitant les étapes de manière indépendante, il a pu exécuter l’étape suivante en dépit
des erreurs rencontrées. Il en découle souvent des erreurs successives dans la fenêtre Log,
dues à une erreur dans une des premières étapes du programme. Il est donc conseillé de
reprendre la Log depuis le début de l’exécution du code en question. C’est d’autant moins
évident que SAS se positionne à la fin de la Log après exécution d’un programme.
Le message Warning indique une erreur qui n’a pas stoppé l’exécution de l’étape parce que
SAS sait gérer lui-même ce type d’erreur (qui consiste souvent à générer des valeurs
manquantes).
La fenêtre Log n’est pas purgée automatiquement pas SAS à l’exécution d’un nouveau
programme. Les messages sont donc affichés à la suite de ceux concernant l’exécution du
code précédent. Il est souvent pratique, pour retrouver le début des messages, d’effacer le
contenu de la fenêtre (par le menu Edit > Clear all).
•
la fenêtre Sortie (ou fenêtre Output) : sorties, listings, résultats après compilation des
programmes, rapports générés par les procédures SAS et les étapes DATA. Elle est
complétée par deux autres fenêtres pour l’affichage des sorties : la fenêtre Graph pour les
graphiques et la fenêtre Résultats (ou Results) qui montre sous forme arborescente les
différentes sorties engendrées par le programme.
4
Sur l’exemple précédent, on distingue :
 la fenêtre Output et sa police unique (SAS Monospace),
 la fenêtre Results qui montre sous forme arborescente les différentes sorties
engendrées par un ou plusieurs programmes. La suppressions des sorties par
morceaux est possible (faire un clic droit sur un des éléments de cette fenêtre et
choisir Delete dans le menu contextuel),
 la fenêtre Graph qui montre la sortie d’une procédure graphique de SAS.
La fenêtre Output, comme la fenêtre Log, ne se vide pas à l’exécution d’un nouveau
programme, mais ajoute de nouvelles sorties à la suite de celles existantes. Il est donc
possible de purger cette fenêtre (par le menu Edit > Clear all).
•
la fenêtre Explorer : emplacements physiques des répertoires, création de raccourcis,
voir/ouvrir/déplacer/copier/supprimer des fichiers SAS. Elle permet de naviguer parmi les
données SAS et en particulier de visualiser les tables SAS.
5
2. Les menus et les barres d’outils
Les menus disponibles sont variables en fonction de la fenêtre active. Les menus disponibles sont
FILE, EDIT, VIEW, TOOLS, SOLUTIONS, WINDOWS et HELP. S’y ajoute le menu RUN quand
l’éditeur est actif.
•
FILE contient les commandes nécessaires à l’ouverture d’un programme, sa sauvegarde,
l’importation d’un fichier de données, son exportation, et la commande permettant de fermer la
session SAS.
•
EDIT regroupe les commande d’édition usuelles (couper/copier/coller, annuler) ainsi que
celles pour le repli et le déploiement d’un programme. On y trouve aussi la commande CLEAR
ALL pour purger une fenêtre.
•
VIEW permet de basculer entre les différentes fenêtres de l’environnement de programmation,
et également d’ouvrir à nouveau une fenêtre fermée.
•
TOOLS regroupe l’appel à divers assistants SAS (retouches de graphiques, requêtes via une
interface etc…). On y trouve également, dans un sous-menu OPTIONS, les réglages de la
session SAS (aspect des fenêtres, préférences de l’utilisateur, tableau des options
système…).
•
RUN permet l’exécution du code tapé dans la fenêtre d’édition active.
•
SOLUTIONS permet d’ouvrir diverses interfaces gravitant autour de SAS.
•
WINDOW gère le fenêtrage de l’environnement et permet comme VIEW de basculer d’une
fenêtre à une autre.
•
HELP renvoie aux divers éléments de l’aide en ligne de SAS.
La barre d’outils regroupe les icônes standards (nouveau, ouvrir, enregistrer, couper, copier,
coller, annuler, imprimer, aperçu avant impression).
Quand un éditeur est actif, l’icône ci-contre s’ajoute à la barre d’outils : il permet
l’exécution du programme écrit dans la fenêtre active ; si une partie du programme est
sélectionnée, alors seul ce morceau de code est soumis à SAS.
A gauche de la barre d’outils, une fenêtre rectangulaire, pouvant
accueillir une seule ligne, est appelée fenêtre de commande. Elle
trouve son intérêt dans les versions dépourvues de menus. Dans ces
versions, elle apparaît en première ligne de chaque fenêtre, sous la
forme d’une ligne blanche précédée de COMMAND. Elle permet, en y
tapant et soumettant des commandes, d’obtenir des manipulations
semblables à celles proposées par les icônes de la barre d’outils, et
par certains items des menus.
Par exemple, une commande utile est KEYS, qui permet d’afficher la liste des raccourcis clavier
de SAS.
3. Modules
SAS est un logiciel organisé en modules qui sont des groupes de fonctionnalités. Ce système sert
de base de tarification, mais aussi d’organisation logique. Les procédures sont rattachées à un
module et ne sont donc pas toutes disponibles sur toutes les installations de SAS. Par exemple, la
proc IML, qui permet d’utiliser le langage IML, n’est disponible que si le module IML a été installé.
Le logiciel SAS est loué à l’année, sous forme de licence. Cette licence autorise l’emploi, pour une
durée limitée, de certains modules. Dans la version 9, un fichier SAS Installation Data spécifie les
modules contenus dans la licence. Il remplace le programme Setinit des versions antérieures.
Les principaux modules de SAS :
• SAS Base : pierre angulaire de SAS, ce module contient les instructions pour la manipulation
de données, les statistiques descriptives élémentaires et l’édition de rapports. Ce module
permet de programmer dans le langage SAS de base, ainsi que dans les langages SQL et
macro.
6
•
•
•
•
•
•
•
•
•
•
•
SAS Stat : il regroupe les procédures de modélisation (régressions diverses), de classification
(regroupement d’individus semblables) et de statistiques descriptives.
SAS Graph : ce module permet l’édition de graphiques de toutes sortes : nuages de points,
courbes, diagrammes circulaires et en bâtons, cartes géographiques.
SAS Access : cette série de modules permet l’importation et l’exportation de données d’autres
applications.
SAS Connect : le module CONNECT permet de faire fonctionner SAS en mode client/serveur.
SAS ETS : ce module statistique regroupe entre autres les fonctionnalités d’étude des
données temporelles (ETS : Econometrics and Time Series).
SAS FSP : ce module permet la manipulation de données en plein écran (FSP : Full Screen
Products).
SAS AF : ce module permet la construction d’interfaces clique-bouton par-dessus SAS, sur un
mode de fonctionnement analogue à Visual Basic pour les applications Microsoft (AF =
Application Facility).
SAS EIS : il permet la constitution et la visualisation de tableaux de bords synthétiques
regroupant des statistiques et des graphiques (EIS : Execuive Information System).
SAS Assist : ce module est une interface clique-bouton pour la création de programmes SAS.
Toutes les manipulations sont paramétrées par menus et fenêtres de dialogue.
SAS IML : ce module permet d’utiliser un langage matriciel (IML : Interactive Matrix
Language).
SAS Insight : analyse statistique interactive.
4. SAS Enterprise Guide
SAS Enterprise Guide (ou SEG) est un logiciel Windows permettant, par un système de menus et
de fenêtres de dialogue, de réaliser des extractions, de croiser des sources de données
hétérogènes, de produire des tableaux, des graphiques et des statistiques. Il génère des
programmes SAS et intègre également un éditeur de programmes, afin d’ajouter ou d’amender du
code.
SEG produit des sorties dans les formats les plus courants : page Web, document PDF, document
Word, feuille Excel.
Enterprise Guide est un croisement entre SAS et Excel. Il a hérité du premier la puissance de
calcul et le langage souple. SEG hérite d’Excel son ergonomie dans la présentation des données,
la simplicité de fonctionnement, le rôle prééminent des fenêtres de dialogue.
Il est possible de remplacer toute programmation par l’utilisation intensive de SAS Enterprise
Guide, mais toute application constituée de menus et de fenêtres de dialogue trouve sa limite
dans une opération non prévue initialement, qu’il faudra à nouveau programmer.
5. Session SAS
Quand on démarre le logiciel SAS, on ouvre une « session SAS ». Cette session se termine par la
fermeture du logiciel. Au sein d’une session SAS, de nombreux réglages sont temporaires. Ils
durent le plus souvent jusqu’à la fermeture de la session.
7
6. Sorties
On parle de sorties en général pour désigner l’ensemble des résultats produits par SAS. Ces
sorties peuvent prendre différents aspects selon les instructions du programme exécuté. Le
programme peut produire :
• une ou plusieurs table(s) SAS ;
• du texte, appelé généralement listing, d’une mise en forme minimale (police de caractères
unique, pas de gras ni d’italique). Le listing est le mode par défaut d’affichage de résultats par
SAS ;
• un ou plusieurs graphique(s) qui font l’objet d’un affichage séparé.
7. Les contraintes du langage SAS
•
•
•
•
On ne doit pas couper une instruction par un retour de ligne,
Les majuscules et minuscules, hormis quelques cas très précis, ne sont pas différenciés par
SAS,
Les commentaires, encadrés par les signes /* et */, peuvent être intégrés à n’importe quel
endroit du programme, à la seule condition de ne pas couper une instruction,
La contrainte la plus incontournable dans SAS est l’obligation de terminer chaque instruction
par un point-virgule.
8. Concepts et vocabulaire
Nous allons commencer par survoler les concepts qu’il est essentiel d’avoir intégrés avant de
commencer la programmation dans SAS. Tout au long de ce cours, nous parlerons :
• de bibliothèque (ou librairie),
• de table,
• de vue,
• d’observation,
• de variable,
• de label,
• de format,
• d’une étape Data,
• d’une étape Proc.
Les premiers concepts font référence à la manière dont SAS stocke et accède aux données.
Quelques instructions et manipulations sont nécessaires, comme : allouer une bibliothèque,
visualiser son contenu, voir une table, voir les variables d’une table. Les concepts suivants traite
du décalage qui existe – à travers les labels et les formats – entre les données vues à l’écran et la
réalité qu’il faut programmer. Les derniers concepts concernent la programmation, et fait la
distinction entre l’étape Data et les procédures, qui sont les deux grandes étapes de
programmation de SAS.
8
1. Deux étapes : DATA et PROC
Un ensemble d’instructions constitue une étape. Dans SAS, on distingue deux grands types
d’étapes de programmation : les étapes Data et les étapes procédures, également appelées
« étapes proc ».
Un programme SAS est un enchaînement d’étapes de gestion des données (étape DATA) et
d’appels de procédures (étape PROC).
On repère, dans un programme SAS, le début et la fin d’une étape par les mots-clés DATA ou
PROC au début, et les instructions RUN, et/ou QUIT à la fin.
1. 1. Etape DATA : création d’une table SAS et structuration des données
Afin de pouvoir traiter des données avec SAS, il convient d’abord de les mettre sous un
certain format, interne à SAS. SAS possède en effet son propre système de gestion de
bases de données (étape DATA), bâti sur la notion de table (SAS DATA SET nommé par la
suite TABLE SAS selon la terminologie en vigueur en France).
Toute étape DATA débute par l’instruction DATA nom_de_table où nom_de_table est le
nom de la table SAS créée. Si aucune table SAS n’est créée (cas par exemple de la recopie
d’une table dans un fichier texte), alors l’étape DATA débutera par l’instruction
DATA _NULL_. L’étape DATA se termine par l’instruction RUN.
Syntaxe :
DATA tableSAS ;
instructions diverses ;
RUN ;
L’étape Data permet de manipuler, observation par observation, un jeu de données. Les
données entrantes ou sortantes peuvent être une table SAS ou un fichier externe.
Lors d’une étape DATA, on pourra en outre structurer les données et notamment :
•
importer un fichier texte pour créer une table SAS,
•
créer de nouvelles variables,
•
exporter d’une table SAS vers un fichier texte,
•
sélectionner une partie d’une table SAS et la stocker dans une autre table,
•
fusionner plusieurs tables SAS
•
faire une requête sur une table SAS,
•
…
On peut créer des tables SAS permanentes ou temporaires. Les tables temporaires sont
effacées lorsqu’on quitte la session.
On appelle table SAS la représentation la plus courante des données utilisées par ce
logiciel. Ces données sont organisées en lignes et en colonnes, également appelées
observations et variables.
1. 2. Etape PROC : analyse d’une table SAS
Une fois que les données ont été structurées sous la forme d’une table, elles peuvent être
analysées au moyen de procédures (étape PROC). Les procédures sont des programmes
déjà écrits de SAS, à la syntaxe beaucoup moins libre que celle de l’étape Data, où il faut
surtout renseigner un certain nombre de paramètres et faire jouer certaines options. Les
procédures, qui sont assez nombreuses (aux alentours de 200 sur l’ensemble des modules
de SAS), accomplissent chacune une tâche spécialisée : tri des données, listing d’une table,
création de formats, calcul de statistiques descriptives, analyse factorielle, etc.
9
Chaque procédure commence par une instruction PROC suivie de son nom, et s’achève sur
une instruction RUN ; qui demande l’exécution de cette procédure. Certaines procédures,
notamment les procédures graphiques, demandent de surcroît une instruction QUIT ; pour
clore réellement leur syntaxe.
Syntaxe :
PROC nomProcédure <option(s)> ;
instructions diverses ;
RUN ;<QUIT> ;
Pour la plupart des procédures, SAS propose de nombreuses options.
L’exemple suivant distingue une étape, une instruction et une option. Cet exemple permet
l’édition de statistiques sur les ventes.
PROC MEANS DATA=base.ventes 
MEAN

MEDIAN

MIN


MAX ;

VAR mt_der ; 

RUN;

 est une étape (la procédure MEANS)
 sont des options
 est une instruction.
2. Différences entre une vue et une table
Les fichiers de données lus et créés par SAS sont d’un type qui est spécifique à ce logiciel : ce
sont des tables et des vues.
Dans les deux cas, les données sont organisées sous forme tabulaire, avec des lignes
(observations) et des colonnes (variables).
Si on ouvre une vue à partir de la fenêtre Explorer, on constate la similitude d’aspect avec une
table. C’est en fait le mode de stockage qui diverge entre vue et table.
• Une table est une photo des données : elle stocke des données qui ne changeront plus
jusqu’à la création d’une nouvelle version de la table.
• Une vue est un lien vers un ensemble de données : elle ne contient qu’une requête, qui sera
réexécutée à chaque accès à la vue.
L’avantage d’une vue sur une table est double : place réduite pour le stockage et données
perpétuellement à jour sans nécessiter d’intervention de l’utilisateur. La table, en revanche,
permet un accès plus rapide aux données, et également de figer dans le temps un état : cela
s’avère pratique pour conserver un historique à partir de données mouvantes.
Le nom d’une table ou d’une vue SAS doit respecter les contraintes suivantes :
• la longueur maximale du nom est de 32 caractères ;
• le premier caractère est une lettre ou un blanc souligné _ .Les caractères suivants peuvent
être des lettres, des blancs soulignés ou des chiffres ;
• dans la plupart des cas, SAS ne distingue pas les minuscules et les majuscules. Ainsi, si par
exemple on a défini la variable Gini, on peut la rappeler en écrivant GINI, gini, etc. ;
• certains noms correspondent à des variables automatiques de SAS (exemple : _N_, qui
1
correspond au numéro d’observation dans la table SAS ) ou à un certain type de tables SAS
1
_N_=1 pour la première observation de la table, 2 pour la deuxième observation, etc…
10
(exemple : data _NULL_) et ne peuvent pas être utilisés pour nommer des variables ou des
tables créées par l’utilisateur.
3. Eléments d’une table
3. 1. Les observations
On désigne par ce nom les lignes d’une table ou d’une vue SAS. Chaque observation
correspond à une unité de comptage ; en statistique, on parle d’ « individu statistique ».
Chaque observation porte un numéro. Il est séquentiel et recalculé à chaque création de la
table.
3. 2. Les variables
Les variables sont les colonnes d’une table ou d’une vue SAS. Chaque variable correspond
à une information connue sur les observations.
Toutes les variables requièrent obligatoirement trois attributs :
• nom
• type (numérique ou caractères)
• longueur.
Une variable peut également posséder un label, un format et un informat.
Le nom d’une variable doit respecter les contraintes suivantes :
• la longueur maximale du nom est de 32 caractères ;
• le premier caractère est une lettre ou un blanc souligné _ .Les caractères suivants
peuvent être des lettres, des blancs soulignés ou des chiffres ;
• dans la plupart des cas, SAS ne distingue pas les minuscules et les majuscules. Ainsi,
si par exemple on a défini la variable Gini, on peut la rappeler en écrivant GINI, gini,
etc. ;
• certains noms correspondent à des variables automatiques de SAS (exemple : _N_, qui
2
correspond au numéro d’observation dans la table SAS ) et ne peuvent pas être utilisés
pour nommer des variables ou créées par l’utilisateur.
Variables caractères :
On peut définir des variables caractères d’une longueur de 1 à 32 767 caractères. On leur
affecte une valeur de la manière suivante :
var1 = ‘Paris’ ; /*entre ‘*/
var2 = "1990-1991" ; /*entre "*/
var3 = ‘Ile de France’ ;
var4 = ‘Côte d"Armor’ ;
2
_N_=1 pour la première observation de la table, 2 pour la deuxième observation, etc…
11
Variables numériques :
SAS reconnaît les nombres sous les formes suivantes :
entiers : 5683 ;
entiers relatifs : -5 ;
réels : 2.85 ;
notation scientifique : 5.4E-1 ;
dates : '24aug90'd. Une date est ainsi définie le plus souvent comme numérique. SAS
er
stocke les dates comme un nombre de jours depuis le 1 janvier 1960.
Le label
Le label d’une variable est un texte libre de 256 caractères maximum, qui permet de décrire
le contenu de la variable, de donner sa définition, de décrire éventuellement ses valeurs, de
manière plus complète et plus lisible que ne peut le faire le nom.
Le format
Le format est un masque d’affichage des données. Il permet d’assurer une transition entre
les valeurs telles qu’elles sont stockées (de manière parfois peu lisible : les dates sont
er
stockées comme un nombre de jours depuis le 1 janvier 1960) et les valeurs telles qu’elles
sont affichées. On trouvera en annexe 1 les formats les plus courants fournis par SAS. En
complément de ces formats, SAS propose, avec un programme (la procédure FORMAT que
l’on étudiera ultérieurement), de définir des formats personnalisés correspondant aux
différents besoins (tranches de revenus, libellés des départements français, etc…).
La longueur
La longueur (length) d’une variable est la place prévue pour le stockage de chacune de ses
valeurs. SAS prévoit par défaut d’utiliser 8 octets pour chaque valeur. Les longueurs
autorisées sont :
• de 1 à 32767 octets pour une variable caractères,
• de 2 à 8 octets pour une variable de type numérique. Sous Windows, les longueurs
possibles sont comprises en 3 et 8 octets seulement.
L’informat
Un informat est un masque de saisie d’une variable. C’est le symétrique du format ; il
s’applique aux données telles qu’elles sont lues lors de la création de la table SAS à partir
d’un fichier externe.
Ainsi, pour reprendre l’exemple d’une date, on peut avoir une donnée stockée sous la forme
20010125 qui désignerait le 25/01/2001. SAS doit comprendre que c’est une date et stocker
ème
er
le nombre 15000 (car le 25 janvier 2001 est le 15000
jour depuis le 1 janvier 1960).
L’informat permet d’indiquer comment faire cette transformation, et particulier le fait que,
dans la valeur lue, les quatre premiers chiffres sont ceux de l’année, les 2 suivants ceux du
mois, et enfin ceux du jour.
12
4. Manipulations de tables SAS
Le but premier de SAS est la manipulation de données, avant même de commencer les
traitements statistiques proprement dits. Ce chapitre est consacré à la création d’une table SAS à
partir d’une ou de plusieurs sources de données, principalement à travers l’étape Data.
L’étape Data permet entre autres :
• la création de tables SAS,
• la création de nouvelles variables,
• la modification de variables existantes,
• la fusion et la jointure de plusieurs tables,
• l’importation et l’exportation de données.
L’étape Data regroupe une série d’instructions permettant la manipulation ligne à ligne d’un jeu de
données. L’étape Data n’affiche rien dans la fenêtre Output, sauf cas exceptionnels.
4. 1. Structure et stockage des tables
Une table se présente sous forme d’une matrice croisant en ligne les observations en en
colonne les variables.
Exemple :
Les données de cet exemple (fichier PAYS), avec lequel nous travaillerons également en
TP, proviennent d’un article de Russet (1964). Russet cherche à montrer que l’inégalité
économique entraîne l’instabilité politique. Pour mesure l’inégalité économique, Russet
utilise des variables décrivant la répartition des terres agricoles, le produit national brut par
tête et le pourcentage de personnes actives travaillant dans l’agriculture :
• la variable GINI représente l’indice de concentration de Gini qui mesure l’écart entre la
courbe de Lorenz et la droite d’égalité,
• la variable FARM correspond au pourcentage de fermiers possédant la moitié des terres,
en commençant par les plus petites surfaces. Si FARM vaut 90%, alors la moitié des
terres est possédée par 10% des fermiers,
• la variable RENT mesure le pourcentage de fermiers locataires de leurs terres,
• la variable GNPR (gross national product per capita) est la produit national brut par tête
en dollars U.S. en 1955,
• la variable LABO est égale au pourcentage de personnes actives travaillant dans
l’agriculture.
Il y a quatre mesures de l’instabilité politique :
• la variable INST est une fonction du nombre de responsables du pouvoir exécutif et du
nombre d’années pendant lesquelles le pays a été indépendant entre 1945 et 1961. Cet
indice varie entre 0 (très stable) et 17 (très instable),
• la variable ECKS est l’indice d’Eckstein calculé sur la période 1946-1961. Il mesure le
nombre de conflits violents entre communautés sur cette période,
• la variable DEAT est le nombre de personnes tuées lors de manifestations violentes sur la
période 1950-1962,
• la variable DEMO classe les pays en trois groupes : démocratie stable (1), démocratie
instable (2) et dictature (3).
Les données d’origine sont reproduites dans le tableau suivant :
13
Obs Pays
gini farm rent gnpr labo inst ecks deat demo
1 Argentine
86.3 98.2 32.9 374 25 13.6 57 217 2
2 Australie
92.9 99.6
. 1215 14 11.3 0
0 1
3 Autriche
74 97.4 10.7 532 32 12.8 4
0 2
4 Belgique
58.7 85.8 62.3 1015 10 15.5 8
1 1
5 Bolivie
93.8 97.7 20 66 72 15.3 53 663 3
6 Brésil
83.7 98.5 9.1 262 61 15.5 49
1 3
7 Canada
49.7 82.9 7.2 1667 12 11.3 22
0 1
8 Chili
93.8 99.7 13.4 180 30 14.2 21
2 2
9 Colombie
84.9 98.1 12.1 330 55 14.6 47 316 2
10 Costa Rica
88.1 99.1 5.4 307 55 14.6 19
24 2
11 Cuba
79.2 97.8 53.8 361 42 13.6 100 2900 3
12 Danemark
45.8 79.3 3.5 913 23 14.6 0
0 1
13 Rép. Dominic. 79.5 98.5 20.8 205 56 11.3 6
31 3
14 Equateur
86.4 99.3 14.6 204 53 15.1 41
18 3
15 Egypte
74 98.1 11.6 133 64 15.8 45
2 3
16 Espagne
78 99.5 43.7 254 50
0 22
1 3
17 Etats-Unis
70.5 95.4 20.4 2343 10 12.8 22
0 1
18 Finlande
59.9 86.3 2.4 941 46 15.6 4
0 2
19 France
58.3 86.1 26 1046 26 16.3 46
1 2
20 Guatemala
86 99.7 17 179 68 14.9 45
57 3
21 Grèce
74.7 99.4 17.7 239 48 15.8 9
2 2
22 Honduras
75.5 97.4 16.7 137 66 13.6 45 111 3
23 Inde
52.2 86.9 53 72 71
3 83
14 1
24 Irak
88.1 99.3 75 195 81 16.2 24 344 3
25 Irlande
59.8 85.9 2.5 509 40 14.2 9
0 1
26 Italie
80.3 98 23.8 442 29 15.5 51
1 2
27 Japon
47 81.5 2.9 240 40 15.7 22
1 2
28 Libye
70 93 8.5 90 75 14.8 8
0 3
29 Luxembourg
63.8 87.7 18.8 1194 23 12.8 0
0 1
30 Nicaragua
75.7 96.4
. 254 68 12.8 16 116 3
31 Norvège
66.9 87.5 7.5 969 26 12.8 .
0 1
32 Nlle Zélande 77.3 95.5 22.3 1259 16 12.8 0
0 1
33 Panama
73.7 95 12.3 350 54 15.6 29
25 3
34 Pays-Bas
60.5 86.2 53.3 708 11 13.6 2
0 1
35 Pérou
87.5 96.9
. 140 60 14.6 23
26 3
36 Philippines 56.4 88.2 37.3 201 59
14 15 292 3
37 Pologne
45 77.7
0 468 57 8.5 19
5 3
38 RFA
67.4 93 5.7 762 14
3 4
0 2
39 Royaume-Uni
71 93.4 44.5 998 5 13.6 12
0 1
40 Salvador
82.8 98.8 15.1 244 63 15.1 9
2 3
41 Sud Vietnam 67.1 94.6 20 133 65
10 50 1000 3
42 Suède
57.7 87.2 18.9 1165 13 8.5 0
0 1
43 Suisse
49.8 81.5 18.9 1229 10 8.5 0
0 1
44 Taiwan
65.2 94.1 40 132 50
0 3
0 3
45 Uruguay
81.7 96.6 34.7 569 37 14.6 1
1 1
46 Venezuela
90 99.3 20.6 762 42 14.9 36 111 3
47 Yougoslavie 43.7 79.8
0 297 67
0 9
0 3
On peut stocker les tables de façon permanente ou temporaire. La table temporaire est
détruite à la fin de la session SAS en cours.
4. 1. 1. Les librairies, les tables permanentes et temporaires
Une table temporaire sera représentée par un simple nom_de_table.
Une table permanente se présentera de la manière suivante :
nom_de_librairie.nom_de_table où nom_de_librairie représentera la librairie (c’est à
dire le répertoire) où la table est stockée. La librairie est définie lors d’une
instruction LIBNAME assurant la correspondance entre le nom_de_librairie et le
nom physique (« réel ») de la librairie.
14
Ainsi, là où d’autres logiciels comme Excel se contentent de demander à l’utilisateur
où aller chercher les données, SAS demande de lui définir au préalable le ou les
emplacements où aller lire et écrire des données avec le système des bibliothèques
(ou librairies).
Une fois définie, la librairie n’est allouée que pour la durée de la session.
Il est préférable d’utiliser cette instruction en tête de programme, de manière à la
retrouver facilement.
Exemple :
On tape l’instruction suivante dans la fenêtre Editeur :
libname pays 'c:\Cours SAS';
Le message suivant s’inscrit dans la fenêtre Journal :
NOTE: Libref PAYS attribué comme suit :
Moteur :
V8
Nom physique : c:\Cours SAS
48 libname pays 'c:\Cours SAS';
Le nom d’une librairie doit satisfaire à plusieurs contraintes :
• ne pas reprendre le nom d’une bibliothèque allouée automatiquement par SAS
(WORK, SASUSER, SASHELP et MAPS),
• ne pas dépasser 8 caractères ;
ère
• ne doit comporter que des lettres non accentuées, des chiffres (mais pas en 1
position dans le nom) et le signe _ (underscore ou blanc souligné).
On peut visualiser le contenu d’une bibliothèque à l’aide de la fenêtre Explorer.
Nous y reviendrons en séance de TP.
Quelques informations complémentaires sur les librairies prédéfinies de SAS :

WORK est une bibliothèque temporaire. Son contenu est effacé à la fin de la
session SAS. Pour définir une table SAS temporaire, on peut ainsi écrire
nom_de_table ou work.nom_de_table.

SASHELP héberge des données fournies par SAS à des fins d’exercices
(comme CLASS, AIR, SHOES, etc…).

SASUSER est une bibliothèque personnelle (chaque utilisateur a sa propre
SASUSER) permanente (au contraire de WORK). Son contenu n’est donc pas
effacé à la fermeture de SAS. Cette bibliothèque contient entre autres les
informations de personnalisation de la session SAS (barres d’outils par
exemple). Il est possible d’y écrire ses données, même si, en général, il est
préférable d’allouer une bibliothèque séparée pour le stockage des données.

MAPS contient les fonds de cartes fournis par SAS, dont une carte
départementale de la France.
15
4. 2. L’import et l’export des données
4. 2. 1. Création d’une table SAS à partir d’un fichier texte externe
Un fichier externe est copié en une table SAS au cours d’une étape DATA, à partir
des instructions INFILE et INPUT :
Syntaxe :
DATA nom_de_table ;
INFILE fichier_en_entrée ;
INPUT format_de_lecture ;
RUN ;
L’instruction DATA permet de nommer la table SAS à créer.
L’instruction INFILE indique le nom ou la référence du fichier à lire en entrée.
L’instruction INPUT précise comment lire les données : en quelle position figure
chaque variable, son type (caractère ou numérique), sa longueur, le nom à lui
donner et le format de lecture (informat) des informations à importer.
Instruction INFILE
Principales options de l’instruction INFILE :
FIRSTOBS=numéro_d’observation
Numéro de la première observation du fichier en entrée à prendre en compte
pour le déroulement de l’étape DATA. Cette instruction est utile lorsque la
première ligne comporte les noms des variables (surtout si les variables
excèdent 8 caractères).
Exemple : INFILE ‘c:\fichier.txt’ FIRSTOBS=2 ;
OBS=numéro_d’observation
Numéro de la dernière observation du fichier en entrée à prendre en compte
pour le déroulement de l’étape DATA.
MISSOVER
En cas d’enregistrements de longueur variable, si toutes les variables de
l’ordre INPUT n’ont pas été lues, les variables non renseignées sont mises à
valeur manquante.
En l’absence de cette option, SAS lit les valeurs restantes au début de
l’enregistrement suivant.
DLM=
Caractère séparateur (espace par défaut).
La tabulation est notée ‘09’x
On peut avoir à lire un fichier de données brutes délimitées (sans passer par
le menu Import Data de SAS). Un des intérêts de ce type de fichier réside
dans le fait que les données ne doivent pas obligatoirement être organisées
en colonnes fixes. Les délimiteurs les plus fréquents sont les blancs, les
virgules, et les tabulations.
Après l’instruction INFILE, on précise l’option DLM=’caractères’. Ainsi, si par
exemple des virgules servent de délimiteurs, l’instruction infile sera la
suivante :
infile 'c:\Cours SAS\myfile.txt' dlm=’,’;
En fin de compte, si aucun délimiteur n’est spécifié avec l’option DLM=, le
délimiteur par défaut est un blanc.
On peut spécifier plus d’un délimiteur dans l’option DLM=. Dans ce cas,
n’importe quel de ces caractères et non une combinaison de ceux-ci, agit
16
comme délimiteur. Par exemple, dlm=’, -’ indique que la virgule et le tiret
peuvent tous deux servir de délimiteur.
DSD
Indique que si deux séparateurs sont consécutifs, ils correspondent à une
valeur manquante.
LRECL=
Nombre maximum de caractères par ligne de données (par défaut, 256)
Exemple : INFILE ‘c:\fichier.txt’ LRECL=500 ;
Exemple :
data pays.russet;
infile 'c:\Cours SAS\Pays.txt' firstobs=2 obs=4;
…
run;
Seules les lignes 2, 3 et 4 sont recopiées dans la tables SAS pays.russet :
Obs Pays
1
Australie
2
Autriche
3
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
Instruction INPUT
Dans l’instruction INPUT, la liste des variables lues doit respecter l’ordre dans
lequel les champs sont présents dans le fichier importé. Pour jouer sur cet ordre
dans la table SAS créée, on utilisera les déclarations d’attributs (instruction
ATTRIB) dans l’ordre voulu.
Il faudra distinguer les variables numériques et caractères, en faisant précéder les
variables caractères par un signe $.
Si on précise &, la variable à lire peut contenir un espace : la variable sera lue
jusqu’à ce que soient rencontrés deux espaces consécutifs.
Au fur et à mesure de l’exécution de l’instruction INPUT, un élément virtuel, appelé
pointeur de colonne est positionné afin de lire la variable suivante. Ce pointeur de
colonne peut être déplacé, avancé, positionné à la ligne suivante :
•
•
•
INPUT @n déplace le pointeur à la colonne n de l’enregistrement en cours.
INPUT +n déplace le pointeur de n colonnes vers la droite,
INPUT / déplace le pointeur de colonne à la ligne suivante.
On peut aussi préciser la colonne de début et la colonne de fin d’une variable.
L’instruction est alors la suivante :
INPUT nom_de_variable <$> <colonne_de_début> <colonne_de_fin> ;
Si la variable n’occupe qu’une colonne, la colonne de fin peut être omise.
Avantages :
• les valeurs caractères peuvent contenir des espaces,
• les valeurs manquantes ne posent pas de problèmes. Un champ à blanc est
considéré comme valeur manquante,
• les champs peuvent être lus dans n’importe quel ordre.
Les différentes variables sont séparées par des espaces.
17
Exemple :
Dans la fenêtre Editeur de SAS, on tape les instructions suivantes :
data pays.russet;
infile 'c:\Cours SAS\Pays.txt';
input Pays $ 1-13 Gini 15-18 Farm 20-23 Rent 25-28 Gnpr 30-33
Labo 35-36 Inst 38-41 Ecks 43-45 Deat 47-50 Demo 52;
run;
Informat
On peut également devoir importer des données non standards. Le terme données
standard se rapporte aux données de type numérique et caractère qui n’ont pas de
qualités de données inhabituelles. Le terme données non standard se rapporte
plutôt aux données de type caractère ou numérique inhabituelles.
Exemple de données non standard :
dates (12/12/2012, 29FEB2000)
chiffres avec des milliers repérés par des virgules (4,242, $89,000).
Par défaut, on ne peut lire que les données standard de type caractère ou
numérique si on utilise l’entrée sous forme de liste. A la suite de chaque variable,
les instructions permettent à SAS de lire correctement les valeurs :
• pour une variable numérique stockée avec une virgule comme séparateur
décimal, faire suivre le nom de la variable de l’informat : NUMX. ;
• pour une variable date, faire suivre le nom de l’informat adéquat ( :DDMMYY.
Ou YYMMDD.) ;
• pour une variable caractère, faire suivre le nom de : $x., où x est le nombre de
caractères (blancs compris) de la plus longue valeur lue.
Informats les plus courants
$x.
Type de
données
lues
Entiers
Nombres
décimaux
(séparateur
point)
Nombres
décimaux
(séparateur
virgule)
Texte
$UPCASEx.
Texte
Informat
x.
x.d
NUMXx.d
DDMMYYx.
YYMMDDx.
ANYDTDTEx.
Date
(jj/mm/aaaa)
Date
(aaaa/mm/jj)
Date
(tous
formats)
Type de
données
créées
Numériques
Données
lues
123
3.
Données
créées
123
Numériques
123.45
6.2
123.45
Numériques
123,45
NUMX6.2
123.45
Caractère
Caractère
(texte en
majuscules)
Numérique
(date)
Numérique
(date)
ABC DEF
$7.
ABC DEF
Abc dEf
$UPCASE5.
ABC D
25/01/2001
DDMMYY10.
15000
20010125
YYMMDD8.
15000
2001-01-25
01/25/2001
25.01.2001
ANYDTDTE10.
15000
Numérique
(date)
Exemple
Informat
utilisé
18
Exemple : on importe un fichier texte avec des dates :
On utilise le programme suivant :
data date;
infile 'd:\SAS\Cours SAS\date.txt' firstobs=2;
input date:anydtdte10.;
run;
On obtient le fichier suivant :
Obs date
1 15000
2 15548
3 16372
Les deux points (:) qui précèdent l’informat assouplissent son comportement. Par
exemple, si on donne un informat $10. à une variable, 10 caractères seront lus,
même si un séparateur en fait partie. Dans la lecture d’un fichier à séparateur, ce
comportement est préjudiciable. L’informat :$10. permet de lire au maximum 10
caractères et s’arrête au séparateur.
Exercice 1 : on a un fichier de données brutes, séparées par des virgules, avec les
variables vol (identificateur du vol), cargo (capacité totale de l’avion), date (dernière
date d’utilisation de l’avion), nb_passagers (nombre total de passagers).
Voici les deux premières lignes d’enregistrement des données :
I001,213,09/12/2001,110
I002,89,09/12/2001,45
3 champs correspondent à des données standards (vol, cargo et nb_passagers), un
champ contient des données non standards (date). Ecrire une étape data
permettant de lire ces données et de créer la table temporaire avions.
Attributs des variables
Toutes les variables présentent un certain nombre de caractéristiques – nom, label,
type, format, informat et longueur -. L’instruction ATTRIB a pour but de centraliser
ces caractéristiques.
ATTRIB nomVariable
LABEL='mon label'
FORMAT=fmt.
LENGTH=longueur
;
•
•
•
Le label est un texte libre de 256 caractères maximum,
Le format est choisi parmi ceux présentés en annexe 1 ou parmi des formats
créés par l’utilisateur,
La longueur est le nombre d’octets affectés au stockage de chaque valeur. Pour
une variable de type numérique, cette information peut généralement être
laissée à la gestion de SAS. Pour une variable de type caractère, on donnera
après un $ la longueur maximale que peuvent atteindre les valeurs.
19
Exemples d’ATTRIB à insérer dans une étape Data :
ATTRIB codePostal
LABEL='code postal de résidence du client'
FORMAT=$5.
LENGTH=$ 5
;
ATTRIB dFinEff
LABEL='date de fin d"effet du contrat'
FORMAT=DDMMYY10.
;
Longueur
Lorsque vous utilisez des entrées sous forme de listes, la longueur par défaut d’une
variable est de 8, aussi bien pour les données de type caractère que numérique.
Pour modifier la longueur d’une donnée de type caractère. Pour modifier la longueur
d’une donnée de type caractère, on peut définir la longueur avec une instruction
LENGTH ou ATTRIB.
Exemple :
On a le fichier texte suivant (voitures.txt, dans le répertoire c:\Cours SAS) :
nom cylindree puissance longueur largeur poids vitesse origine finition prix
ALFASUD-TI-1350 1350 79 393 161 870 165 I B 30570
AUDI-100-L 1588 85 468 177 1110 160 D TB 39990
SIMCA-1307-GLS 1294 68 424 168 1050 152 F M 29600
CITROEN-GS-CLUB 1222 59 412 161 930 151 F M 28250
FIAT-132-1600GLS 1585 98 439 164 1105 165 I B 34900
LANCIA-BETA-1300 1297 82 429 169 1080 160 I TB 35480
PEUGEOT-504 1796 79 449 169 1160 154 F B 32300
RENAULT-16-TL 1565 55 424 163 1010 140 F B 32000
RENAULT-30-TS 2664 128 452 173 1320 180 F TB 47700
TOYOTA-COROLLA 1166 55 399 157 815 140 J M 26540
ALFETTA-1.66 1570 109 428 162 1060 175 I TB 42395
PRINCESS-1800-HL 1798 82 445 172 1160 158 GB B 33990
DATSUN-200L 1998 115 469 169 1370 160 J TB 43980
TAUNUS-2000-GL 1993 98 438 170 1080 167 D B 35010
RANCHO 1442 80 431 166 1129 144 F TB 39450
MAZDA-9295 1769 83 440 165 1095 165 J M 27900
OPEL-REKORD-L 1979 100 459 173 1120 173 D B 32700
LADA-1300 1294 68 404 161 955 140 U M 22100
On importe sous SAS ces données et on crée la table SAS temporaire voitures :
data voitures;
infile 'd:\CoursSAS\voitures.txt' firstobs=2;
length nom $ 16;
input nom $ cylindree puissance longueur largeur
poids vitesse origine $ finition $ prix;
run;
Remarque : on a précisé la longueur de la variable nom, sinon la longueur était
tronquée à 8 caractères (alors que certains noms de voiture comportent 16
caractères). L’instruction length doit précéder l’instruction input.
20
Exercice 2 :
On veut lire le fichiers de données brutes employes.csv, stocké dans le répertoire
c:\Cours SAS, et contenant les variables suivantes :
1/ la division de l’employé : DIV
2/ la date d’entrée en service de l’employé : DESE
3/ le salaire de l’employé : SE
4/ le nom de famille de l’employé : NFE
5/ le prénom de l’employé : PE
6/ le pays de l’employé : PAYS
7/ la localisation de l’employé : LE
8/ le numéro d’identification de l’employé : NIE
9/ le code d’emploi : CODE
Les premiers enregistrements de données se lisent comme suit :
FLIGHT OPTS,03/11/1992,25000,MILLS,DOROTHY E,USA,CARY,E0001,FLTAT3
FINANCE,12/19/1983,27000,BOWER,EILEEN A,USA,CARY,E0002,FINCLK
Questions :
quel délimiteur sera utilisé ?
______________________________________
quels champs sont lus sous forme de caractères ?
______________________________________
quelle est la longueur de chacun des champs de type caractère ?
______________________________________
Y a-t-il des champs qui contiennent des données non standard ? Dans l’affirmative,
de quels champs s’agit-il ?
______________________________________
Pour chaque champ identifié comme non standard, quel type d’informat le champ
requiert-il ?
______________________________________
Ecrire une étape DATA pour créer une table EMPLOYES qui contient toutes les
variables du fichier d’entrée.
NB : il faut spécifier par une instruction length la longueur de toutes les données qui
dépassent 8 caractères.
Exercice 3 :
Importez sous SAS le fichier ‘c:\temp\clients_sep.csv’
PRENOM ;NOM ;DAT_NAI ;VILLE ;DEPT ;NB_ACHATS ;ANNEES_ANCIENNETE
Anne Sophie ;Martineau ;14/08/1955 ;PARIS ;75 ;8 ;0,3
Marie-Anne ;Dupont ;01/12/1977 ;ORLEANS ;
Roger ;Martin du Gard ;18/01/1988 ; ;29 ;17 ;1,8 ;
Exercice 4 :
Importez sous SAS le fichier ‘c:\temp\clients_col.txt’
1
14
29
40
48
NOM
Martineau
Dupont
Martin du Gard
PRENOM
Anne Sophie
Marie-Anne
Roger
DAT_NAI
14/08/1955
01/12/1977
18/01/1988
VILLE
DEPT
PARIS
75
ORLEANS
29
53
65
NB_ACHATS
8
AN_ANCIEN
0,3
17
1,8
On utilisera un arrobas (@) suivi d’un nombre pour indiquer la colonne à laquelle
commencent les valeurs du champ.
Par ailleurs, on souhaite que le prénom figure en 1
ère
colonne dans la table SAS créée.
21
Format
On peut également préciser le format des données avec l’instruction format. Les
formats SAS ont la forme suivante :
<$> <w>.<d>
• $ réservé aux variables caractères. Si on omet $, la variable est numérique.
• w longueur de la variable. Si w=7, la variable prend 7 colonnes.
• .
nombre de décimales. Si d=1, on a 1 chiffre après la virgule.
Il n’est pas nécessaire que l’instruction format précède l’instruction input.
Exemple :
Dans le précédent exemple, on rajoute l’instruction suivante pour que le prix soit
codé avec deux décimales :
data voitures;
infile 'd:\CoursSAS\voitures.txt';
input nom $ cylindree puissance longueur largeur
poids vitesse origine $ finition $ prix;
length nom $ 16;
format prix 8.2;
run;
L’instruction format aurait pu précéder l’instruction input. Dans le fichier d’origine, le
prix était codé sur 5 colonnes. On ajoute deux chiffres après la virgule, et une
colonne pour la virgule, soit un total de 8 colonnes.
Lecture conditionnelle de données
On se place maintenant dans le cas où :
• on souhaite lire seulement une partie de l’enregistrement,
• tester une valeur de données,
• continuer la lecture de l’enregistrement si les données testées respectent
certains critères.
Exemple :
On reprend le fichier avion (cf. Exercice 1). Lorsque la capacité maximale de l’avion
est inférieure à 100, on ne veut lire que les deux premières variables (vol et cargo).
On lira également les variables date et nb_passagers uniquement lorsque la
capacité maximale de l’avion est supérieure à 100.
data avion;
infile 'c:\:\Cours SAS\myfile.txt' dlm=',';
length vol $ 4;
input vol : $4. cargo : 3. @;
if cargo gt 100 then input data : mmddyy10. nb_passagers : 3.;
run;
Si on n’utilise pas @, SAS passe directement à la deuxième ligne d’enregistrement
ème
lorsqu’il rencontre le 2
input. On utilise donc l’indicateur de retenue @ pour
garder :
•
•
la ligne de données courante dans le tampon d’entrée pour le traitement d’une
autre instruction INPUT,
le pointeur de colonne à son emplacement actuel dans la ligne de données.
22
Exercice 5 :
On dispose d’un fichier aircraft.csv délimité par des virgules, décrivant les avions
dont dispose une compagnie aérienne, et avec les variables suivantes :
identificateur de l’avion : ID (variable caractère de longueur 6),
modèle de l’avion : MODEL (variable caractère de longueur 20),
date de mise en service : IN_SERVICE_DATE (date de format MM/JJ/AAAA, par
exemple 12/31/1999),
date de dernière utilisation : LAST_SERVICE_DATE (date de format MM/JJ/AAAA),
capacité en première classe : CAPACITY_FIRSTCLASS
capacité en classe affaire : CAPACITY_BUSINESS
capacité en classe économique : CAPACITY_ECONOMY
er
Pour les avions entrés en service après le 1 janvier 1990, on ne veut que les
variables ID, MODEL et IN_SERVICE_DATE. On veut toutes les variables pour les
er
avions entrés en service avant le 1 janvier 1990. Ecrivez une étape DATA pour
récupérer ces données.
4. 2. 2. La procédure Import
La procédure IMPORT correspond au programme le plus souvent rédigé par
l’assistant d’importation. Elle permet de traiter toute une gamme d’imports courants,
dans les fichiers de formats réglementés : feuille Excel, tables Access, fichiers à
séparateurs virgules, point-virgule ou tabulation.
Pour l’import de certains types de fichiers, des classeurs Excel par exemple, la
procédure IMPORT nécessite d’avoir une licence pour le module SAS/ACCESS TO
PC FILES.
Syntaxe :
PROC IMPORT DATAFILE=’chemin et nom du fichier importé’
OUT=tableSAScréée
DBCS=typeFichierLu
REPLACE ;
<instructions optionnelles>
RUN ;
La table SAS créée est désignée par sa librairie et son nom. Le fichier importé est
donné sous forme de chemin complet, avec le nom du fichier et son extension.
L’option REPLACE permet à SAS d’écraser une table SAS existante par la version
importée. En son absence, SAS renvoie un message d’erreur si l’on essaye de
créer une table qui existe déjà.
Les valeurs les plus courantes de l’option DBCS sont répertoriées dans le tableau
suivant.
23
Principales valeurs possibles pour le type de fichier lu
Mot-clé
DLM
CSV
TAB
EXCEL2002
EXCEL2000
EXCEL97
EXCEL5
EXCEL4
ACCESS2002
ACCESS2000
ACCESS97
WK1
DBF
Type de fichier
Fichier à caractère délimiteur (blanc
par défaut)
Fichier à séparateur virgule
Fichier à séparateur tabulation
Classeur excel 2002
Classeur excel 2000
Classeur excel 97
Classeur excel 5
Classeur excel 4
Table Access 2002
Table Access 2000
Table Access 97
Classeur Lotus 1-2-3 version 2
Fichier Dbase
Nécessité
ACCESS TO PC
FILES
Non
Non
Non
Oui
Oui
Oui
Oui
Oui
Oui
Oui
Oui
Oui
Oui
Les instructions optionnelles dépendent beaucoup du type de fichier lu. On
retiendra en particulier GETNAMES=YES ou NO ; qui permet de lire en première
ligne du fichier les noms des variables à importer. Sans cette option, les variables
créées seront nommées F1, F2, F3 etc.
SHEET=’nomFeuilleExcel$’ est utile pour l’import d’un classeur excel. Par défaut, la
première feuille est importée. La procédure IMPORT ne propose pas de moyen
automatique simple pour importer dans autant de tables toutes les feuilles d’un
classeur Excel.
Enfin, DELIMITER=’caractère’ permet de spécifier le caractère séparateur pour
DBCS=DLM.
Exemple :
Pour importer la feuille ‘Ventes2003’ du classeur TableaudeBord.xls, situé dans le
répertoire ‘c:\perso\tdb’, on utilisera la programme suivant :
PROC IMPORT DATAFILE=’c:\perso\tdb\TableaudeBord.xls’
OUT=base.ventes03
REPLACE
DCBS=EXCEL2002 ;
GETNAMES=YES ;
SHEET=’Ventes2003’ ;
RUN ;
Ces deux dernières méthodes sont plus simples que l’utilisation de l’étape Data
pour importer des fichiers. Mais l’intérêt de l’importation par l’étape Data est de
permettre d’importer exactement les données de la manière voulue (par exemple,
sans erreur sur le type de variable : un numéro de département défini sous Excel
sera importé comme variable numérique par la PROC IMPORT). L’étape Data
permet également de ne pas commencer la lecture des données avant la nième
ligne, et de donner aux variables créées toutes les caractéristiques voulues (nom,
label, format) avec une instruction ATTRIB.
4. 2. 3. Utilisation de l’assistant d’importation
En TP, on utilisera également l’assistant d’importation (menu Fichier > Importer des
données) pour créer une table SAS à partir d’un fichier externe. Le choix des types
de fichiers importés est plus ou moins riche selon que le module SAS/ACCESS TO
PC FILES est sous licence ou non. Dans le cas où ce module n’est pas sous
licence, la liste se réduit à :
24
•
•
•
fichier à séparateur dans le cas général (*.*) ;
fichier à séparateur virgule (*.csv) ;
fichier à séparateur tabulation (*.txt).
Sinon, la liste s’enrichit de formats de fichiers tels qu’Excel, dBase, Access ou
Lotus.
4. 3. Saisie des données sous SAS
Si les données sont saisies sous SAS, elles doivent :
suivre directement l’étape DATA,
être précédées du mot clé CARDS,
être suivies d’un caractère ; placé en début de ligne.
Exemple :
Dans la fenêtre Editeur de SAS, on saisit des données relatives aux caractéristiques
physiques d’un parc national. Il s’agira, au cours du TP, d’étudier la relation entre la
présence d’herbivores et l’environnement dans le parc. Dans la table SAS suivante, on
trouve les caractéristiques des 10 zones étudiées.
• la variable ZONE identifie la zone étudiée,
• la variable HERB correspond au niveau de l’herbe,
• la variable BOSQUET indique la présence de bosquets,
• la variable EAU renseigne sur la proximité de l’eau,
• la variable HIPPO renseigne sur l’existence d’un programme de contrôle du nombre des
hippopotames du site.
Dans la fenêtre Editeur de SAS, on tape les instructions suivantes :
data parc;
input ZONE HERB $ BOSQUET $ EAU $ HIPPO $;
cards;
1 courte oui proche moyen
2 haute oui éloignée aucun
3 courte oui proche aucun
4 courte oui proche important
5 courte oui moyenne aucun
6 courte oui proche aucun
7 courte non éloignée aucun
8 courte oui moyenne important
9 courte non éloignée aucun
10 courte non éloignée aucun
;
run;
4. 4. L’export de tables SAS
L’export peut se faire à travers trois types de manipulations :
• avec l’assistant d’export (disponible dans le menu FILE>EXPORT), identique dans son
principe et son ergonomie à l’assistant d’import. Nous aborderons cette possibilité en
TP.
• avec la procédure EXPORT qui est le pendant de la procédure IMPORT.
• Avec une étape Data et deux instructions FILE et PUT qui sont le pendant des
instructions INFILE et INPUT vues précédemment.
25
4. 4. 1. Création d’un fichier texte à partir d’une table SAS
Lorsque l’on copie une table SAS dans un fichier texte, aucune table n’est créée au
cours de l’étape DATA. Puisque la sortie attendue est un fichier externe et non table
SAS, il est inutile d’indiquer un nom de série de données dans l’instruction DATA.
On emploie alors une instruction DATA _NULL_;
Pour créer un fichier texte à partir d’une table SAS, il faut :
• assigner un fichier de sortie par une instruction FILENAME,
• créer une étape DATA _NULL_ (puisque l’objectif n’est pas de construire une
table SAS, mais de se servir d’éléments existants, afin de les présenter dans un
fichier externe),
• utiliser les possibilités de la fonction PUT, notamment en matière de formatage
des variables.
Chaque observation soumise à une instruction PUT sera ainsi copiée dans le fichier
texte identifié par l’instruction FILE.
La syntaxe de l’instruction FILE est la suivante :
FILE ‘nom_de_fichier’ ;
ou
FILE nom_logique ;
où le nom logique représente un fichier précédemment défini par une instruction
FILENAME.
Options de l’instruction FILE
Pour créer un fichier dont les champs sont séparés par un délimiteur, on utilise
l’option DLM= dans l’instruction FILE.
Syntaxe :
DATA _NULL_ ;
SET nom_de_table ;
FILE ‘nom_de_fichier’ DLM=’délimiteur’ ;
Option DSD
Supposons qu’on exporte le fichier comportant des données sur les salaires, où les
milliers sont séparés par une virgule.
Par exemple, une ligne de données serait la suivante :
IA00100,04JUL2001,124, 000
Certains logiciels liront ces données comme quatre champs et non trois. Pour
indiquer que les valeurs de données contenant des virgules doivent être présentées
entre guillemets, on utilise l’option DSD dans l’instruction FILE.
data _null_;
set table_SAS;
file 'c:\Cours SAS\myfile' dlm=',' dsd;
put flight data : date9.
revenue : comma7.;
run ;
On obtiendra le résultat suivant :
IA00100,04JUL2001, “124, 000”
26
Quand le pointeur d’écriture dépasse la largeur de page :
Par défaut, la largeur de page est définie par l’option générale LINESIZE=. Si une
spécification est envoyée au pointeur d’écriture pour écrire au delà de cette limite, le
système cherchera à écrire la valeur correspondante au début de la ligne suivante.
Ce peut être le cas d’une variable dont la longueur dépasse le nombre de
caractères séparant la position courante de la fin de la ligne.
Cependant, ce mécanisme peut être géré par une option de l’instruction FILE :
• DROPOVER : la variable correspondante n’est pas écrite
• STOPOVER : l’étape DATA est arrêtée, et un message d’erreur envoyé dans le
fichier LOG
• FLOWOVER : la variable est écrite au début de la ligne suivante (défaut).
Pour contrôler la taille d’une page (en nombre de lignes) :
Syntaxe : FILE nom_logique PAGESIZE=nombre_de_lignes ;
Utilisation de l’instruction PUT
L’instruction PUT s’utilise avec la même logique que l’instruction INPUT.
Cependant, au lieu de lire les données, elle permettra d’écrire les données en
utilisant un FORMAT d’écriture. Ce format pourra aussi bien être un format SAS
prédéfini qu’un format utilisateur préalablement défini par une PROC FORMAT, ou
lu dans une librairie de formats utilisateur. La valeur exportée sera lors la valeur
formatée, au lieu du comportement par défaut de SAS qui exporte la valeur stockée.
Par rapport à INPUT, il n’est pas nécessaire de signaler le type des variables
caractère par un $. En effet, lors de l’export, le type des variables SAS est déjà
connu.
La syntaxe de l’instruction PUT est la suivante :
PUT
<contrôle du pointeur d’écriture> <nom_de_variable1> <format_d’écriture>
…
<contrôle du pointeur d’écriture> <nom_de_variableN> <format_d’écriture>
Il est possible de :
• se déplacer de n colonnes par rapport à la position actuelle :
Opérateur +
Exemple : PUT +n var1 2. ;
• se déplacer au début de la ligne suivante :
Opérateur /
Exemple : PUT / var 1 2. ;
• se déplacer à une colonne en position absolue sur la ligne courante :
Opérateur @
Exemple : PUT @n var1 2. ;
• écrire une variable à un emplacement déterminé en indiquant la colonne de
début et la colonne de fin. On ne peut pas dans ce cas indiquer de format
d’écriture :
Exemple : PUT var1 5-7 ;
Exemple :
filename russet 'c:\Cours SAS\Russet.txt';
data _NULL_;
set pays.russet;
file russet;
put pays @15 Gini @20 Farm @25 Rent @30 Gnpr @35 Labo
@38 Inst @43 Ecks @47 Deat @52 Demo;
run;
ou de façon équivalente :
27
data _NULL_;
set pays.russet;
file 'c:\Cours SAS\Russet.txt';
put pays $ @15 Gini @20 Farm @25 Rent @30 Gnpr @35 Labo
@38 Inst @43 Ecks @47 Deat @52 Demo;
run;
Le nom de la variable peut être suivi d’un format ; la valeur exportée sera alors la
valeur formatée, au lieu du comportement par défaut de SAS qui exporte la valeur
stockée.
Exemple :
PUT date DDMMYY10. ;
Exercice 6 :
On dispose d’une table SAS qui décrit 27 chiens selon des variables de taille, poids,
vélocité, intelligence, affection, agressivité et fonction (1 : compagnie, 2 : chasse, 3 :
garde).
Exportez ces données dans un fichier texte chien.txt, dans le répertoire c:/cours
SAS. La variable nom sera codée sur les colonnes 1 à 23, la variable taille sera
codée à partir de la colonne 24 (de sorte que dans le fichier texte, toutes les
variables seront alignées).
4. 4. 2. La procédure EXPORT
Cette procédure reprend le principe et la syntaxe de la procédure IMPORT déjà
citée. Comme pour celle-ci, l’export de certains types de fichiers comme les
classeurs Excel nécessite d’avoir une licence pour le module SAS/ACCESS
correspondant. Si aucun module SAS/ACCESS n’est disponible, alors la procédure
EXPORT ne saura produire que des fichiers textes.
Syntaxe :
PROC EXPORT DATA=tableSASlue
OUTFILE=’chemin et nom du fichier exporté’
DCBS=typeFichierCréé
DELIMITER=délimiteur ;
<SHEET<nomFeuilleExcel ;>
RUN ;
28
La table SAS lue est désignée par sa bibliothèque et par son nom. Le fichier
exporté est donné sous forme de chemin complet, avec le nom du fichier et son
extension. Par exemple ‘c:\mes documents\données\import\ca_1999.txt’.
L’instruction SHEET optionnelle permet de préciser, dans le cas d’un export vers un
classeur Excel (avec l’option DBCS=EXCEL) quelle est la feuille Excel du classeur
dans laquelle la table SAS est exportée.
4. 5. Manipulation des données au sein de l’étape DATA
4. 5. 1. Epuration de données existantes
On peut utilement modifier les données à l’aide des fonctions :
• UPCASE : convertit toutes les lettres d’une valeur donnée en majuscules.
• COMPBL : comprime plusieurs blancs consécutifs apparaissant dans une
valeur de données en un seul blanc.
• TRANWRD : remplace dans une valeur de données toutes les occurrences
d’une modèle de caractères par un autre modèle de caractères.
Attention : si on crée une nouvelle variable à l’aide de la fonction TRANWRD, la
longueur de cette nouvelle variable est 200 (sauf si on utilise l’instruction
LENGTH).
Exemple : un chasseur de tête d’une compagnie aérienne dispose d’une table SAS
applicants sur les candidats. Les premières lignes sont les suivantes :
Applicant Last Name
CHASE
JR
RIGHENZI
DE PABLOS
Applicant First name
MARJORIE J.
NICOLAS
MARIA
Applicant country
USA
France
Spain
Job Code
FLTAT1
MECH01
FINCLK.
Afin de retrouver plus facilement les candidats dans la base de données on va
procéder aux transformations suivantes :
• on place un point après JR,
• on écrit en majuscules le pays,
• on élimine les blancs inutiles dans le nom de famille.
data applicants ;
set applicants ;
lastname=tranwrd(lastname,’JR’,’JR.’);
country=upcase(country) ;
lastname=compbl(lastname);
run;
4. 5. 2. Création de nouvelles variables
La gestion des attributs est la première chose à faire lors de la création de
nouvelles variables. On peut utiliser les instructions ATTRIB et LENGTH vue
précédemment. Vient ensuite la nécessité de définir la formule qui va permettre le
calcul des valeurs de cette nouvelle variable.
Lors de la création de variables, un certain nombre de formules et de fonctions
peuvent être utilisées. Ces fonctions peuvent être arithmétiques, statistiques,
mathématiques ou effectuer des transformations sur des variables caractères.
Les formules simples et les fonctions
La seconde étape consiste à faire le lien entre le nom d’une variable et le mode de
calcul de ses valeurs (formule). Cette formule est constituée :
• de constantes (nombres, texte, dates) citées entre guillemets pour le texte,
entre guillemets et avec un d pour les dates;
29
•
•
de noms de variables existantes ;
de fonctions SAS et d’opérations.
Création de nouvelles variables de type caractère avec les fonctions SUBSTR,
TRIM, SCAN et l’opérateur de concaténation ||
La fonction SUBSTR extrait une partie d’une valeur de données de type caractères
d’après le nombre de caractères indiqués.
Syntaxe
var1=SUBSTR(var,début,nombre-de-car)
Exemple : si la variable name=’Dorothy’, substr(name,1,3) extrait les 3 premiers
caractères de la variable name et est égal à ‘Dor’.
La fonction SCAN extrait une partie d’une valeur de données de type caractère
d’après le numéro d’ordre du mot à récupérer.
Syntaxe
var1=SCAN(var,numéro-de-mot<,délimiteur(s)>)
Exemple : soit la variable name qui prend pour une observation la valeur ‘Dorothy
E’. scan(name,2,’ ‘) extrait le deuxième nom, soit ‘E’.
Si la variable créée n’a pas été définie auparavant avec une instruction LENGTH, la
longueur de la nouvelle variable est 200.
S’il n’y a pas de troisième argument, les délimiteurs par défaut sont :
ASCII (par exemple, UNIX) :
blanc . < ( + & $ * ) ^ - / , % | ~
EBCDIC (par exemple OS/390, CMS) : blanc . < ( + | & $ * ) - / , %
L’opérateur de concaténation || unit des valeurs de données de type caractère.
Syntaxe
var2=var||var1
Si la variable créée n’a pas été définie auparavant avec l’instruction LENGTH, la
longueur de la nouvelle variable est la somme des longueurs de toutes les variables
et du texte constant concaténés.
On peut aussi utiliser !! comme opérateur de concaténation.
La fonction TRIM élimine les blancs à droite dans les valeurs de données de type
caractère au cours de l’exécution.
Var2=TRIM(var)||var1
La fonction TRIM par elle-même n’a pas d’effet visible sur un résultat. Par exemple,
on n’utilisera pas name1=trim(name).
Exemple
Une société a décidé de mettre en œuvre une nouvelle structure d’adresse
électronique sous la forme
InitialeprénomInitialemé[email protected]
La première initiale est suivie de l’initiale médiane (s’il y a lieu), du nom de famille et
de @IA.COM.
Données partielles
emp_lastname
MILLS
BOWER
READING
JUDD
emp_firstname
DOROTHY E
EILEEN A
TONY R
CAROL A
30
La première étape consiste à extraire la première lettre du prénom de l’employé
first_initial=substr(emp_firstname,1,1) ;
On utilise ensuite la function substr pour extraire l’initiale médiane
middle_initial=substr(scan(emp_firstname,2,’ ‘),1,1) ;
Enfin, on utilise l’opérateur de concatenation et la fonction TRIM pour créer la
variable email
email=first_initial||middle_initial||trim(lastname)||’@IA.COM’
Principales fonctions sur les variables de type caractère
Fonction
Description
Concaténation de deux
chaînes de caractères
VarCar1 ! !varCar2
SUBSTR(varCar,début,
longueur)
UPCASE(varCar)
LOWCASE(varCar)
LEFT(varCar)
TRIM(varCar)
STRIP(varCar)
COMPRESS(varCar)
COMPBL(varCar)
Exemples
NUMSECU=NUM_INSEE ! !CLE
Si NUMSECU=2750986345776
et CLE=33, alors NUMSECU=
275098634577633
Extraction d’un morceau
d’une chaîne de
caractères
Mise en majuscule d’une
chaîne de caractères
Mise en minuscules d’une
chaîne de caractères
Suppression des blancs à
gauche d’une chaîne de
caractères
Suppression des blancs à
droite d’une chaîne de
caractères
Suppression des blancs à
droite et à gauche d’une
chaîne de caractères
Suppression des blancs
dans une chaîne de
caractères
Suppression des blancs
consécutifs dans une
chaîne de caractères
SEXE=SUBSTR(NUMSECU,1,1)
_’2’
UPCASE(VILLE)_
’ PARIS CEDEX 03 ’
LOWCASE(VILLE)_
‘ paris cedex 03 ’
LEFT(VILLE)_
‘Paris CEDEX 03 ’
TRIM(VILLE)_
‘Paris CEDEX 03’
STRIP(VILLE)_
‘Paris CEDEX 03’
COMPRESS(VILLE)_
‘ParisCEDEX03’
COMPBL(VILLE) _
‘Paris CEDEX 03’
Création de nouvelles variables de type numérique à partir des fonctions INT,
SUM, MEAN et ROUND
Certaines fonctions telles que sum et mean permettent de calculer des statistiques
sur plusieurs variables. Ces statistiques sont calculées sur chaque observation et
sur les valeurs non manquantes des variables concernées. Elles permettent de
synthétiser plusieurs variables numériques.
La fonction SUM additionne des valeurs de variables, et ignore les valeurs
manquantes. Elle renvoie toujours un résultat (zéro si toutes les valeurs concernées
sont non renseignées), alors que l’addition avec l’opération + générera une valeur
manquante si une des variables n’est pas renseignée.
Syntaxe
var=SUM(var1,var2,…,varN)
Exemple
var1 var2 var3
12
.
6
var=sum(var1,var2,var3);
var
18
On peut aussi utiliser la liste implicite de variables, en utilisant le mot clé OF devant
le premier nom de variable pour éviter la soustraction.
Var=SUM(OF var1-varN) ;
31
Exemple : précédemment, on aurait pu utiliser l’instruction suivante :
var=sum(of var1-var3);
La fonction M E A N retourne la moyenne arithmétique et ignore les valeurs
manquantes. Elle ne prend en compte, comme dénominateur, que le nombre de
variables renseignées pour cette observation.
Syntaxe :
var=MEAN(var1,var2,…,varN) ;
Exemple
var1 var2 var3
12
.
6
var=mean(var1,var2,var3);
var
9
La fonction ROUND retourne une valeur arrondie à l’unité la plus proche. Si l’unité
la plus proche n’est pas désignée, la variable est arrondie au nombre entier le plus
près.
var=ROUND(var1<,unité d’arrondissement>)
Tout nombre ou valeur fractionnaire peut être désigné comme unité
d’arrondissement.
Exemples
var1
12.12
var2
42.54
var3
6.472
var4
-6.47
var1a=round(var1) ;
var2a=round(var2) ;
var3a=round(var3,.1);
var4a=round(var4,.1);
var1 var2
12 43
var3
6.5
var4
-6.5
La function INT retourne la partie entière d’un argument.
var=INT(var1) ;
Exemple
var1 var2
12.1242.54
var3
6.472
var4
-6.47
var1a=int(var1) ;
var2a=int(var2) ;
var3a=int(var3);
var4a=int(var4);
var1 var2
12 42
var3
6
var4
-6
Exemple : on dispose pour chaque employé du montant des primes reçues au
cours des 9 dernières années. Voici un aperçu des données partielles :
EMP_ID
E00002
E00003
E00004
E00005
E00007
Prime1
.
.
.
1900.95
Prime2
.
.
.
1901.91
Prime3
2704.07
.
.
1902.86
2904.37
Prim4
2705.43
.
.
1903.82
2905.83
Prim5
2706.78
12030.15
.
1904.77
2907.29
Prim6
2708.14
12036.18
.
1905.73
2908.74
Prim7
2709.50
12042.21
.
1906.68
2910.20
Prim8
2710.85
12048.24
.
1907.64
2911.66
Prim9
2712.21
12054.27
4218.99
1908.59
2913.12
On souhaite avoir un rapport affichant les ID des employés, le total des primes qu’ils
ont reçues au cours des neuf dernières années, ainsi que le montant moyen cumulé
pendant la même période arrondi à l’euro.
32
data sum_avg_prime;
set prime;
sum_prime=sum(of prime1-prime9);
avg_bonus=round(mean(of bonus1-bonus9));
run;
Sortie partielle
EMP_ID
E00002
E00003
E00004
E00005
E00007
Sum_prim
e
Avg_bonu
s
18956.98
60211.06
4218.99
17142.96
20361.21
2708
12042
4219
1905
2909
Opérations sur les variables numériques (dates comprises)
Opération
+
*
/
Description
Addition
Soustraction
Multiplication
Division
Ces opérations ne s’effectuent pas quand une des variables concernées est
manquante. Le résultat généré est alors une valeur manquante. Un message
s’affiche dans la fenêtre Log pour rendre compte de ce problème.
Principales fonctions numériques
Fonction
ROUND(varNum,
précision)
ou ROUND(varNum
RANUNI(0)
LOG(varNum)
EXP(varNum)
SQRT(varNum)
ABS(varNum)
Description
Arrondi à une précision
donnée
Génération d’un nombre
au hasard entre 0 et 1
(inclus)
Logarithme naturel
Exponentielle
Racine carrée
Valeur absolue
Exemples
ROUND(CA)_125
ROUND(CA,0.1)_124.6
ROUND(CA,10)_120
RANUNI(0)_0.63562536741
LOG(CA)_4.8247875
EXP(CA/100)_3.475019
SQRT(CA)_11.160645
ABS(-1*CA)_124.56
Principales fonctions statistiques de l’étape Data
Fonction
SUM(varNum1, varNum2, varNum3…) ou
SUM(of varNum1-varNum3)
MEAN(varNum1, varNum2, varNum3…) ou
MEAN(of varNum1-varNum3)
MIN(varNum1, varNum2, varNum3…) ou
MIN(of varNum1-varNum3)
MAX(varNum1, varNum2, varNum3…) ou
MAX(of varNum1-varNum3)
MEDIAN(varNum1, varNum2, varNum3…) ou
MEDIAN(of varNum1-varNum3)
Description
Somme de plusieurs
variables
Moyenne de plusieurs
variables
Minimum de plusieurs
variables
Maximum de
plusieurs variables
Médiane de plusieurs
variables
Création de nouvelles variables de type numérique en fonction des dates
La fonction INTNX avance une date, une heure ou une combinaison de date-heure
par une valeur entière donnée, puis retourne une date, une heure ou une
combinaison de date-heure.
33
Syntaxe
Var=INTNX(‘intervalle’,début,incrément)
‘intervalle’ indique une variable ou une constante de type caractère. L’argument
intervalle peut apparaître en lettres minuscules ou majuscules.
La fonction INTNX avance au début de l’intervalle : par exemple 01JAN pour
l’intervalle YEAR.
Le premier argument de la fonction INTNX doit être un de ceux qui sont énumérés
dans ce tableau
Intervalle de date
DAY
WEEKDAY
WEEK
TENDAY
SEMIMONTH
MONTH
QTR
SEMIYEAR
YEAR
Intervalle de date-heure
DTDAY
DTWEEKDAY
DTWEEK
DTTENDAY
DTSEMIMONTH
DTMONTH
DTQTR
DTSEMIYEAR
DTYEAR
Intervalle d’heure
HOUR
MINUTE
SECOND
début
spécifie une expression SAS qui représente une valeur de date, d’heure
et de date-heure SAS et qui identifie un point de départ.
incrément
spécifie un entier positif ou négatif qui représente le nombre spécifique
d’intervalles de temps.
Exemple
Supposons que la variable date_today soit égale au 05/11/2004.
format date2 mmddyy10.;
date2=intnx('year',date_today,1);
date2 est alors égale à 01/01/2005.
La fonction TODAY retourne la date courante sous la forme d’une date SAS.
Var=TODAY()
La fonction DATE est synonyme de la fonction TODAY.
Il y a d’autres fonctions qui retournent des valeurs à partir de dates SAS :
Var=YEAR(date_SAS) ;
Var=MONTH(date_SAS) ;
Var=DAY(date_SAS);
Exemple :
Présumons que nous soyons le 10 Novembre 2004.
THISYEAR=YEAR(TODAY()) ;
THISMONTH=MONTH(TODAY()) ;
THISDAY=DAY(TODAY());
THISYEAR prend la valeur 2004.
THISMONTH prend la valeur 11.
THISDAY prend la valeur 10.
34
Principales fonctions sur les dates
Fonction
TODAY()
Description
Date du jour
DAY(varDate)
MONTH(varDate)
YEAR(varDate)
Jour extrait d’une date
Mois extrait d’une date
Année extraite d’une
date
Jour de la semaine
extrait d’une date
1=dimanche, 2=lundi,
3=mardi…
Construction d’une date
SAS à partir des
éléments jour, mois et
année
Nombre de débuts de
période écoulés entre
deux dates. La période
est un mot-clé à choisir
entre ‘week’, ‘month’ et
‘year’. Les débuts de
période sont le
er
dimanche, le 1 du
er
mois, le 1 janvier
respectivement.
Décalage d’une date de
n périodes dans le
temps. La date en sortie
de cette fonction est
calquée sur le début de
la période
correspondante.
WEEKDAY(varDate)
MDY(mois,jour,année)
INTCK(‘période’,début,fin)
INTNX(‘période’,début,
nbPériodes)
Exemples
TODAY()_16436
(31 décembre 2004)
DAY(16436)_31
MONTH(16436)_12
YEAR(16436)_2004
WEEKDAY(16436)_6
MDY(12,31,2004)_16436
INTCK('‘eek'’16436,
16512)_11
(11 dimanche entre les
deux dates)
INTNX(‘week’,16436,11)_
16508
(le résultat est forcément
un dimanche. 16512 est
un jeudi, 16508 est un
dimanche)
Fonction de retard
Fonction
LAG(var)
Description
Valeur lue à l’observation
précédente
Exemple
var1=lag(_N_)_
Obs
1
2
3
4
var1
.
1
2
3
Les formules conditionnelles : IF…THEN…ELSE
Les nouvelles variables peuvent prendre certaines valeurs conditionnellement à
d’autres variables. Le choix de la formule à utiliser se fera à travers une série
d’instructions IF…THEN…ELSE.
IF condition THEN DO ;
nouvelleVariable=formule ;
END ;
ELSE DO ;
nouvelleVariable=formule ;
END ;
Exemple :
IF x=1 THEN y=x+(2*z) ;ELSE y=3+x ;
Opérateurs supportés par les IF et les WHERE
35
Opérateur
=
NE
(ou ^= ou !=)
>
<
>=
<=
IN
=:
(sur les variables caractères
uniquement)
NOT
AND
OR
Signification
Egalité
Différent de
Supérieur strictement à
Inférieur strictement à
Supérieur ou égal à
Inférieur ou égal à
Prend une valeur dans un liste
Commence par une certaine
chaîne de caractères
Contraire d’une condition
Les deux conditions doivent être
vérifiées par l’observation
Au moins une des deux
conditions doit être vérifiée par
l’observation
L'instruction ARRAY
L'instruction ARRAY vectnom (n) listevar ; permet de définir des synonymes
(vectnom) pour gérer des noms de variables (listevar) de manière rapide,
notamment lorsqu'on doit manipuler des variables différentes en quantité. Cela
sera très utile avec l'instruction DO pour traiter chaque élément de la même façon.
Les variables peuvent être alphabétiques ; dans ce cas, on écrira ARRAY vectnom
(n) $ listevar ;
Par exemple, l’instruction :
ARRAY temp(12) x1-x12 ;
indique que la variable TEMP est le vecteur synonyme des 12 valeurs x1 à x12. On
peut donc les écrire indifféremment x1 ou temp(1) pour identifier la première
variable, x2 ou temp(2) pour identifier la seconde,… dans l’étape DATA où cette
instruction a été précisée.
Exemple : on dispose d’une table de corrélations entre 5 variables. On définit un
indice de distance entre ces variables : distance(v1,v2)=1-corrélation(v1,v2).
data distvar;
set corvar;
array dis(5) X1-X5;
array cor(5) COR1 COR2 COR3 COR4 COR5;
do i=1 to 5;
dis(i)=1-cor(i);
end;
run;
4. 5. 3. Sélection de certaines observations : instructions IF et WHERE
IF condition THEN OUTPUT;
ou
IF condition;
L’instruction IF filtre les observations en ne prenant en compte l’observation que si
et seulement si la condition à vérifier est vraie. Cette condition peut contenir des
expressions et opérateurs de comparaison :
36
< ou LT
inférieur
> ou GT
supérieur
=< ou LE
inférieur ou égal
=> ou GE
supérieur ou égal
NE différent de.
La condition peut être par exemple :
• une comparaison entre une variable et une valeur : IF age>30
• une comparaison entre deux variables : IF date2>date1.
L’instruction IF peut aussi comprendre des opérateurs logiques :
IF condition1 AND condition2 ;
IF condition 1 OR (condition2 and condition3);
Par exemple, on ne veut sélectionner que les démocraties (variable DEMO), dans
lesquelles des manifestations violentes ont entraîné des morts sur la période 19501962 (variable DEAT) :
data demo;
set pays.russet;
if (demo=1 or demo=2) and deat>0;
run;
Si on veut éliminer certaines observations, on utilise l’instruction DELETE :
IF condition THEN DELETE ;
Exemple : on veut créer deux fichiers , un fichier des démocraties et un fichier des
dictatures :
data demo
dict;
set d.russet;
if demo in (1,2) then output demo;
else output dict;
drop demo;
run;
L’instruction WHERE sélectionne les observations d’une table SAS remplissant
certaines conditions. Chaque condition met généralement en jeu une variable et
une valeur. Enfin, des opérateurs sont nécessaires pour compléter la condition.
La valeur est énoncée de manière différente selon le type de la variable testée –
caractère, numérique ou date - :
•
pour une variable numérique, la valeur sera indiquée telle quelle,
•
pour une variable de type caractère, la valeur apparaîtra entre guillemets. Une
attention particulière sera accordée à la casse,
•
une date sera explicitée de la manière suivante : deux chiffres pour le jour du
mois, trois lettres pour le nom du mois en anglais et deux ou quatre chiffres
pour l’année. Cette description de la date est proposée entre guillemets (bien
que la variable soit de type numérique), et un « d » est accolé au guillemet
fermant. Par exemple, "16APR2003"d.
Plusieurs clauses peuvent être testées simultanément en utilisant les opérateurs
logiques OR et AND.
37
Exemple :
data demo;
set pays.russet;
where (demo=1 or demo=2) and (deat>0);
run;
Opérateurs pour l’option WHERE
Opérateur
=
NE
(ou ^= ou !=)
>
<
>=
<=
IN
LIKE
(sur les variables caractère
uniquement)
=:
(sur les variables caractères
uniquement)
BETWEEN
IS MISSING
NOT
AND
OR
Signification
Egalité
Différent de
Supérieur strictement à
Inférieur strictement à
Supérieur ou égal à
Inférieur ou égal à
Prend une valeur dans un liste
Ex. : dept IN ("22","29","35","56")
ou
dept IN ("22" "29" "35" "56")
Egalité sur une partie de la valeur : dans la
valeur testée, % remplace une chaîne inconnue,
_ remplace un et un seul caractère inconnu
Ex. : prenom LIKE ‘AN_E’
_ ANNE, ANGE
prenom LIKE ‘%N%’
_ANNE, ANGE, NOEMIE, JULIEN
Commence par une certaine chaîne de
caractères
Ex. : num_securite_sociale= :"2"
Compris entre deux bornes (incluses)
N’est pas renseigné
Contraire d’une condition
Les deux conditions doivent être vérifiées par
l’observation
Au moins une des deux conditions doit être
vérifiée par l’observation
4. 5. 4. Sélection de certaines variables : instructions DROP, KEEP et RENAME
Ces mots-clés peuvent être utilisés soit :
comme option de l’instruction DATA ou de l’instruction SET,
comme instruction à part entière.
On peut ainsi dans la table SAS à créer :
•
ne stocker qu’une partie des variables utilisées dans l’étape DATA :
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.
38
•
ne pas stocker des variables créées au cours de l’étape DATA :
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.
Il est possible d’utiliser certaines « abréviations » pour raccourcir l’énumération d’un
grand nombre de variables :
•
KEEP = dt :
correspond à l’ensemble des variables dont le nom commence par « DT »,
•
DROP = ca1997-ca2002
correspond à la séquence de variables dont le nom commence par « CA » et se
termine par un nom compris entre 1997 et 2002 inclus,
•
DROP = _NUMERIC_
correspond à l’ensemble des variables numériques de la table, quel que soit
leur nom. Il existe, à l’identique, des mots-clés _ALL_ et _CHARACTER_
(toutes les variables de la table, ou seulement les variables de type caractère).
•
renommer une ou plusieurs variables utilisées au cours de l’étape DATA :
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_nom1…..ancien_nomn=nouveau_nomn ;
Exemple :
On souhaite créer un fichier voitures2 qui ne comporte que le nom de la voiture, et
les variables cylindree puissance longueur largeur poids vitesse. La variable nom
est renommée voiture.
data voitures2(drop=origine finition prix
rename=(nom=voiture));
set voitures;
run;
4. 5. 5. Création de plusieurs séries de données SAS
Pour créer plusieurs séries de données, on nomme chaque série de données dans
l’instruction DATA. Les noms sont séparés par un espace.
DATA nom_de_table1 nom_de_table2….nom_de_tablen ;
On utilise également l’instruction OUTPUT. Si l’instruction OUTPUT ne contient
aucun nom de série de données, l’observation est écrite dans toutes les tables
39
énumérées à l’instruction DATA. Mais on peut également décider des tables dans
lesquelles sont écrites les observations en indiquant le nom des séries de données
dans l’instruction OUTPUT.
OUTPUT nom_de_tablei ;
On peut aussi indiquer plus d’une table SAS dans une instruction OUTPUT en
séparant les noms des séries de données par un espace, par exemple :
OUTPUT nom_de_tablei nom_de_tablej ;
Enfin, on va devoir utilise un traitement conditionnel. On a déjà vu le traitement
conditionnel IF/THEN/ELSE. Un autre choix est possible, en utilisant l’instruction
SELECT, dont la syntaxe exacte est :
SELECT <(expression-select)> ;
WHEN (expression-when) instruction ;
…
WHEN (expression-when) instruction;
<OTHERWISE instruction;>
END;
Si plusieurs instructions doivent être exécutées lorsqu’une expression est vraie, on
encadre le groupe d’instructions d’un bloc DO/END.
SELECT <(expression-select)> ;
WHEN (expression-when) DO ;
instructions;
END;
…
WHEN (expression-when) DO ;
instructions;
END;
<OTHERWISE DO;
instructions;
END;>
END;
Exemple :
On dispose du PIB de la France pour les années 1970 à 2003. On veut effectuer
une prévision du PIB pour les années 2004 2005 et 2006. D’une année sur l’autre,
on prévoit une croissance de 2%.
Le programme suivant permet de récupérer les prévisions pour les années 2004 à
2006 :
40
data PIB_prevision;
set PIB_France;
if annee=2003;
drop annee;
year=2004;
PIB=PIB*1.02;
output;
year=2005;
PIB=PIB*1.02;
output;
year=2006;
PIB=PIB*1.02;
output;
run;
Exemple : à partir du fichier russet, on veut créer plusieurs tables distinctes pour
chaque continent. La syntaxe sera la suivante :
data amerique_nord amerique_latine europe_est
europe_ouest asie moyen_orient oceanie afrique;
set russet;
select(pays);
when ('Argentine','Bolivie','Brésil','Chili','Colombie',
'Costa Rica','Cuba','Rép. Dominic.','Equateur',
'Guatemala','Honduras','Nicaragua','Panama',
'Salvador','Uruguay','Venezuela')
output amerique_latine;
when ('Canada','Etats-Unis')
output amerique_nord;
…
otherwise
output europe_ouest;
end;
run;
Pour générer les mêmes résultats que ceux de l’étape DATA ci-dessus avec la
logique IF/THEN, on utilise le code suivant :
41
data amerique_nord amerique_latine europe_est
europe_ouest asie moyen_orient oceanie afrique;
set russet;
if pays in ('Argentine','Bolivie','Brésil','Chili',
'Colombie','Costa Rica','Cuba','Rép.Dominic.',
'Equateur','Guatemala','Honduras','Nicaragua',
'Panama','Salvador','Uruguay','Venezuela')
then output amerique_latine;
else if pays in ('Canada','Etats-Unis')
then output amerique_nord;
…
else
output europe_ouest;
run;
Exercice 7 : le service de planification d’une compagnie aérienne doit transmettre
une série de données SAS au service de fabrication pour chacun des types
d’avions.
Ecrivez une étape DATA de manière à créer une série de données SAS pour
chaque type d’avion : SMALL, MEDIUM et LARGE (variable MODEL). L’information
courante se trouve dans la table AIRCRAFT.
Les modèles de type LARGE sont : LF5000, LF5100, LF5200, LF8000, LF8100.
Les modèles de type MEDIUM sont : MF2000, MF2100, MF4000, MF4100,
MF6000.
Les autres modèles sont de type SMALL.
Exercice 8
Un fichier de données brutes renferme des renseignements sur les employés
retraités d’une compagnie. Vous devez transformer et écrire les données dans une
table SAS conformément aux directives énoncées ci-dessous.
Le fichier à importer est le suivants : ‘c:\Cours SAS\retraites.csv’.
Le fichier de données brutes est délimité par la virgule et se présente comme suit :
Champ 1
Champ 2
Champ 3
Champ 4
Champ 5
Champ 6
Champ 7
Champ 8
ID de l’employé
Date de naissance de l’employé stocké sous la forme mm/jj/aaaa
Nom complet de l’employé (prénom et nom) (47 caractères de long)
Année de retraite
ère
Avantages monétaires pour la 1 année de retraite
ème
Avantages monétaires pour la 2
année de retraite
ème
Avantages monétaires pour la 3
année de retraite
ème
Avantages monétaires pour la 4
année de retraite
Fichier partiel :
E02837,09/17/1937,Alexander
E01062,07/28/1922,Alice
E01417,02/11/1944,Allen
E00356,11/03/1937,Amy
E02129,11/07/1945,Angela
SERTUCHE,1997,5925,6221.25,6470.1,6793.61
ROBERSON,1982,9850,10342.5,10756.2,11294.01
OSWALD,2004,6999,7348.95,7642.91,8025.06
FULKERSON,1992,6297,6611.85,6876.32,7220.14
GILLMOR,2005,9608,10088.4,10491.94,11016.54
1. Lisez tous les champs. Ne conservez que les observations des employés nés
er
avant le 1 janvier 1940.
2. Convertissez le nom des employés en lettres majuscules, puis retirez tous les
blancs sauf un entre le prénom et le nom.
3. Créez une nouvelle variable ne contenant que le nom de famille de l’employé.
4. Changez l’ID de l’employé, en remplaçant le E en début de code par un R (pour
retraité).
42
5. Calculez la prestation de retraite moyenne pour les quatre années, en
arrondissant au centième d’euro.
6. Créez une nouvelle variable correspondant à la date de naissance de l’employé
er
plus 60 ans au 1 janvier. Par exemple, si un employé est né le 09/17/1937, la
nouvelle valeur de date est 01/01/1997.
7. Comparez la partie année de la nouvelle variable à l’année de retraite. Si
l’année de retraite correspond à la portion année de la nouvelle variable,
écrivez l’observation dans une table SAS appelée RETIRE_AT_60. Sinon,
écrivez l’observation dans une table appelée EARLY_RETIRE.
Sortie partielle de retire_at_60 :
Obs
Fullname
Emp_birth_rate
Emp_ID
Year1
Year2
Year3
Year4
1
ALEXANDER
SERTUCHE
ALICE
ROBERSON
09/17/1937
R02837
5925
6221.25
6470.10
6793.61
07/28/1922
R01062
9850
10342.50
10756.20
11294.01
Lastname
Avg_retire
Retire_year
Birth_60
SERTUCHE
ROBERSON
6352.49
10560.68
1997
1982
01/01/1997
01/01/1982
2
Exercice 9 :
Les données de la série TARIFS incluent le tarif du billet demandé pour chaque
trajet et chaque classe de service (première, affaires et économique) pendant
quatre années consécutives.
Données de TARIFS :
Obs trajet firstclass_ bus_year1 econ_year1
year1
1 0000001 $1,600 $1,090 $531
2 0000002 $1,600 $1,090 $531
3 0000003 $1,761 $1,201 $585
4 0000004 $1,761 $1,201 $585
5 0000005 $176
$120 $58
firstclass_ bus_year2 econ_year2
year2
$1,942 $1,323 $645
$1,942 $1,323 $645
$2,139 $1,458 $711
$2,139 $1,458 $711
$213
$145 $71
firstclass_ bus_year3 econ_year3
year3
$2,285 $1,557 $759
$2,285 $1,557 $759
$2,516 $1,715 $836
$2,516 $1,715 $836
$251
$171 $83
firstclass_ bus_year4 econ_year4
year4
$1,808 $1,232 $600
$1,808 $1,232 $600
$1,990 $1,357 $661
$1,990 $1,357 $661
$199
$136 $66
Écrire une étape DATA pour créer une série de données SAS appelée
TARIFS_1ERE renfermant une observation par année pour les tarifs de première
classe. La série résultante contient les variables TRAJET, YEAR et TARIF.
La sortie prévue est la suivante :
43
Obs TRAJET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
0000001
0000001
0000001
0000001
0000002
0000002
0000002
0000002
0000003
0000003
0000003
0000003
0000004
0000004
0000004
0000004
0000005
0000005
0000005
0000005
YEAR TARIF
1
2
3
4
1
2
3
4
1
2
3
4
1
2
3
4
1
2
3
4
1600
1942
2285
1808
1600
1942
2285
1808
1761
2139
2516
1990
1761
2139
2516
1990
176
213
251
199
4. 6. Lecture de tables SAS
Parmi les instructions disponibles dans l’étape Data, certaines sont quasiment
indispensables : il s’agit d’instructions de lecture. Sans l’une d’elles, l’étape Data travaille
sans repartir d’une quelconque source de données, et créera donc un table contenant 0 ou
1 observation.
Les principales instructions de lecture sont SET pour la lecture d’une seule table SAS à la
fois et MERGE…BY pour la lecture simultanée de plusieurs tables.
4. 6. 1. Concaténation et chargement d’une table : instruction SET
Syntaxe :
SET <nom_de_table1>…<nom_de_tablen> ;
La table résultante contiendra toutes les variables provenant des tables en entrée et
des variables créées au cours de l’étape.
Exemple :
A
ID
1
3
4
data NEW ;
set A B ;
run ;
B
ID
2
5
6
NEW
ID
1
3
4
2
5
6
Dans la table résultante, les séries de données ne sont pas triées. Une
concaténation par l’instruction SET empile les observations de tables SAS en
fonction de la position relative des tables dans l’instruction SET.
Imbrication
44
Une imbrication intercale verticalement les observations à partir de deux ou
plusieurs tables SAS en fonction d’une ou plusieurs variables communes. Ce qui
signifie que les données sont empilées verticalement et qu’elles conservent leur
ordre de tri d’origine.
Exemple :
A
ID
1
3
4
data NEW ;
set A B ;
by ID ;
run ;
B
ID
2
5
6
NEW
ID
1
2
3
4
5
6
NB : il faudra trier préalablement les données par une PROC SORT (thème abordé
ultérieurement).
Exemple : on veut imbriquer deux tables SAS pour lesquelles les variables ne sont
pas identiques (excepté la variable identifiant LNAME).
LNAME
ALLEN
BADGE
CARR
A
DIVS
DATE
A1
01DEC1998
A2
16JUN1997
A3
01SEP1998
LNAME
ANDER
BASH
COX
DIV
B1
B2
B3
B
MONTH
1
12
12
DAY
16
16
16
YEAR
2000
1999
1999
On va utiliser l’option RENAME pour renommer DIV dans le fichier B.
On va par ailleurs créer une date à partir des valeurs MONTH, DAY et YEAR en
utilisant la fonction MDY. Le format général de cette fonction est le suivant :
MDY(mois,jour,année)
mois : indique une expression numérique représentant un nombre entier de 1 à
12.
jour : indique une expression numérique représentant un nombre entier de 1 à 31.
année : indique une expression numérique représentant un nombre entier qui
identifie une année en particulier.
Enfin, on va utiliser l’option IN= pour détecter quelle table SAS a contribué à la
création de l’observation courante. Le format général de l’option IN= est le suivant :
Table_SAS (IN=variable)
variable est une variable numérique temporaire avec une valeur de :
0 : pour indiquer faux ; la série de données n’a pas contribué à l’observation
courante.
1 : pour indiquer vrai ; la série de données a contribué à l’observation courante.
data combine;
set a(in=ina)
b(in=inb rename=(DIV=DIVS));
by lname,
if inb=1 then date=MDY(MONTH,DAY,YEAR);
run;
Résultats :
LNAME
ALLEN
ANDER
DIVS
A1
B1
DATE
01DEC1998
16JAN2000
45
BADGE
BASH
CARR
COX
A2
B2
A3
B3
16JUN1998
16DEC2000
01SEP1998
16DEC1999
Regroupement : utilisation des variables FIRST. et LAST.
Si par exemple un fichier contient des observations au niveau individu, et que
chaque individu contient un identifiant ménage, il peut être utile de créer une autre
table, au niveau ménage, synthétisant une partie de l’information disponible au
niveau individu.
On change alors le niveau d’observation entre la table d’entrée (niveau=individu) et
le niveau de sortie (niveau=ménage).
Après tri d’une table par une procédure SORT (voir plus loin), l’appel de cette table
par une instruction
SET nom_de_table ;BY liste_de_variables ;
génère automatiquement, pour chaque observation une variable FIRST.variable_clé
mise à 1 s’il y a eu changement de clé depuis l’observation précédente, et une
variable LAST.variable_clé mise à 1 s’il y a changement de valeur, pour la variable
considérée, entre l’observation courante et l’observation suivante. Ces deux
variables ne sont pas stockées dans la table de sortie.
Par exemple, on a un fichier contenant les caractéristiques des logements
successifs occupés par des ménages. Ces ménages sont repérés par le variable
IDENTet le logement par la variable CN. On veut conserver uniquement les
er
caractéristiques du 1 logement renseigné dans la base (la variable CN est classé
par ordre croissant, dans l’ordre de l’occupation des logements) :
proc sort data=logement;
by ident cn;
run;
data loge1;
set logement;
by ident;
if first.ident;
run;
On verra en TP l’utilisation des variables FIRST et LAST sur plusieurs clés.
On peut également par une procédure assez proche, et en utilisant le mot-clé
RETAIN, compter le nombre de logements successifs occupés par les ménages :
46
data loge;
set logement;
by ident;
retain nb_log 0;
if first.ident then nb_log=0;
nb_log=nb_log+1;
if last.ident;
run;
4. 6. 2. JOINTURES : instruction MERGE
L’instruction MERGE permet d’apparier des tables selon une clé, qui est un
identifiant commun aux différentes tables. Cette clé doit porter le même nom dans
chacune des tables à apparier. Les tables indiquées après MERGE sont lues
simultanément.
Syntaxe :
MERGE nom_de_table1 <(IN=nom_de_variable)>
….
nom_de_tablen <(IN=nom_de_variable)> ;
BY <liste_de_variables> ;
En l’absence d’instruction BY, l’appariement se fait ligne à ligne, ce qui dans la
plupart des cas n’a que peu d’intérêt. En fait, l’appariement est surtout utile quand il
est fait relativement à une clé commune aux différentes tables en entrée. Cette clé
est inscrite dans l’instruction BY.
Les fichiers en entrée doivent être triés, dans le même ordre, selon la liste de
variables énoncées dans l’instruction BY.
Exemple
Pour l’étude de la relation herbivores-environnement, on dispose également d’une
autre table indiquant la densité au km_ de neuf gros herbivores dans dix zones. Les
herbivores sont étiquetés comme suit : A=Elephant, B=Warthog, C=Hippopotame,
D=Reebuck, E=Watrbuck, F=Kob, G=Topi, H=Bushbuck et I=Buffle.
Obs
1
2
3
4
5
6
7
8
9
10
Zone
1 1
2 2
3 3
4 3
5 1
6 4
7 2
8 2
9 0
10 0
A
1
0
3
8
1
3
1
1
4
2
B
15
0
28
1
13
21
1
4
2
6
C D E
0 7 9
0 0 1
0 3 2
0 10 0
0 1 6
0 4 0
0 2 44
0 1 10
1 0 78
0 0 71
F G H
0 0 12
0 0 5
0 1 7
0 3 25
0 0 21
0 1 18
0 0 13
0 0 18
30 0 22
83 0 17
I
On apparie les tables présentant les caractéristiques physiques des zones étudiées
et la densité au km_ des herbivores des 10 zones.
proc sort data=parc1;
by Zone;
run;
proc sort data=parc2;
by Zone;
run;
data parc;
merge parc1 parc2;
by Zone;
run;
47
On obtient la table SAS suivante:
Obs
1
2
3
4
5
6
7
8
9
10
ZONE
1
2
3
4
5
6
7
8
9
10
HERB
courte
haute
courte
courte
courte
courte
courte
courte
courte
courte
BOSQUET
oui
oui
oui
oui
oui
oui
non
oui
non
non
EAU
proche
éloignée
proche
proche
moyenne
proche
éloignée
moyenne
éloignée
éloignée
HIPPO
moyen
aucun
aucun
importan
aucun
aucun
aucun
importan
aucun
aucun
A
1
2
3
3
1
4
2
2
0
0
0
3
8
1
3
1
1
4
2
B
1
C
15
0 0
28
1
13
21
1
4
2
6
D
0
0
0
0
0
0
0
0
1
0
E
7
1
3
10
1
4
2
1
0
0
0
2
0
6
F
9
0
0
0
0
0
44
10
78
71
G
0
5
1
3
0
0
0
0
30
83
H
0
I
12
7
25
21
1
0
0
0
0
18
13
18
22
17
L’option IN= n’est pas indispensable. Elle permet de sélectionner des observations
selon le fichier d’origine. Si par exemple on ne veut sélectionner que les
observations de la table1, les instructions seront les suivantes :
MERGE
nom_de_table1(IN=A)
….
nom_de_tablen;
BY <liste_de_variables> ;
IF A ;
Les observations absentes de la table 1 seront exclues de la table résultante.
On a ainsi 4 types de jointures possibles :
Jointure complète
(Jointure sans
condition)
Jointure à gauche
(IF A)
Jointure à droite
(IF B)
Jointure interne (ou
jointure stricte)
(IF A ; IF B)
Lorsqu’on utilise l’instruction BY avec l’instruction MERGE, la table doit être
préalablement triée ou indexée en fonction d’une ou plusieurs variables BY. On doit
alors trier les données à l’aide de la procédure SORT, dont la syntaxe est :
PROC SORT DATA=table_SAS1 OUT=table_SAS2 ;
BY <DESCENDING> variable(s);
RUN;
La procedure SORT :
• réorganise les observations dans une table SAS
• crée une nouvelle table SAS comprenant les observations réorganisées
• remplace la table SAS d’origine par la table par défaut
• peut trier en ordre croissant ou décroissant
• ne génère pas de sorties imprimées
• traite les valeurs manquantes comme la plus petite valeur possible.
48
Exemple : On veut fusionner les tables les tables EMPLOYES et SALAIRES et ne
garder que les observations communes aux deux tables.
EMPLOYES
EMP_ID
FIRSTNAME
1
RONALD
2
ALICE
4
JORN
EMP_ID
2
4
6
SALAIRES
EMP_SALARY
28 605
51 690
84 542
data STAFF;
merge EMPLOYES(IN=EMPS) SALAIRES(IN=SAL);
by EMP_ID;
if EMPS=1 and SAL=1 then output;
run;
4. 6. 3. Résolution de conflits de données
SAS convertit automatiquement une valeur de type caractère en une valeur de type
numérique lorsque la valeur de type caractère est utilisée dans un contexte
numérique tel que :
• affectation à une variable numérique,
• opération arithmétique,
• comparaisons logiques avec une valeur de type numérique,
• fonction qui accepte un argument de type numérique.
Exemple : On a 7 fichiers correspondant à la classification des fonctions de santé :
•
•
•
•
•
•
•
fichier H1 : capital formation of health care provider institutions
fichier H2 : education and training of health personnel
fichier H3 : research and development in health
fichier H4 : food, hygiene and drinking water control
fichier H5 : environmental health
fichier H6 : administration and provision of social services in kind to assist living
with diseases and impairments
fichier H7 : administration and provision of health-related cash-benefits.
Dans chacun des fichiers, on a deux variables caractères : le code au 2ème niveau
(CODE) et l’intitulé de la fonction (LIBELLE). Par exemple, pour le fichier H1 :
1. In-patient curative care
2. Day cases of curative care
3. Out-patient curative care.
En fait, le code de ces fonctions est respectivement 11, 12, et 13.
Donc si on envisage de fusionner ces 7 fichiers, il faut alors préalablement
transformer les codes dans chaque fichier. Pour le fichier 1 par exemple, il suffit de
faire :
CODE = CODE+10 ;
La variable code sera alors automatiquement convertie en variable numérique.
Utilisation de la fonction INPUT pour convertir des données de type caractère
en données de type numérique
On peut effectuer une conversion explicite de type caractère à numérique grâce à
l’option INPUT :
INPUT(variable,nom-informat)
Le nom-informat doit contenir un point dans le nom (exemple : mmddyy10.).
En fait, on procèdera en deux étapes :
1. On renomme la variable.
49
2. On crée une nouvelle variable avec le même nom que celui de la variable
originale à l’aide de la fonction INPUT.
Fonctions de conversion
Fonction
PUT(varNum,format.)
INPUT(varCar,informat.)
Description
Conversion d’une
variable numérique en
variable caractère
Conversion d’une
variable caractère en
variable numérique
Exemples
‘Année ’!!PUT(YEAR(16436),4.)
_’Année 2004’
INPUT(‘2004/12/31’,yymmdd10.)
_16436
4. 7. Procédures connexes à la manipulation de données avec l’étape Data
Nous allons maintenant aborder des procédures connexes à la manipulation de données
avec l’étape Data :
• la PROC FORMAT (qui permet de définir des formats personnalisés),
• la PROC SQL (où l’on programme en langage SQL des fonctionnalités assez analogues
à l’étape Data ou à d’autres procédures),
• la PROC CONTENTS (qui produit la liste des caractéristiques d’une table et le
dictionnaire de ses variables),
• la PROC SORT (qui trie une table),
• la PROC PRINT (qui permet d’éditer des listings),
• la PROC DATASETS (qui permet d’effectuer des opérations globales sur les tables :
copie, destruction, attribution d’un nouveau nom…).
4. 7. 1. Notion de format
Le logiciel SAS propose une large palette de formats prédéfinis. Mais il arrive
souvent que l’on ait besoin de définir des formats personnalisés. Ces types de
formats sont créés et gérés par la procédure format.
Un format permet de regrouper plusieurs modalités sous un même libellé. On
distingue des formats caractères, appliqués à des variables caractères, et des
formats numériques, appliqués à des variables numériques.
On aura donc deux étapes distinctes :
• création et gestion de formats : PROC FORMAT
• utilisation de formats : instructions de FORMAT existants dans de nombreuses
PROC.
Syntaxe :
PROC FORMAT <LIB=bibliothequeDeSTockage> <liste d’options> ;
VALUE nom_de_format
liste_de_valeurs=’valeur1 formatée’
…
liste_de_valeurs=’valeurn formatée’
;
RUN ;
Plusieurs instructions VALUE peuvent être utilisées dans la même procédure
FORMAT.
Tous les formats sont stockés dans un catalogue FORMATS de la bibliothèque
précisée via l’option LIB. Par défaut, ce catalogue est dans la bibliothèque WORK.
Les formats créés ne sont alors disponibles que le temps de la session SAS, et la
procédure doit être réexécutée lors d’une autre session pour recréer les formats.
Le nom du format doit s’écrire avec au maximum 8 caractères ($ inclus), sauf à
partir de la version 9, où cette longueur maximale passe à 32 caractères ($ inclus).
50
Les caractères autorisés dans le nom d’un format sont les mêmes que pour les
noms de variables. Les chiffres ne sont pas autorisés ni comme premier, ni comme
dernier caractère. Le point terminant le nom du format n’est pas cité dans
l’instruction VALUE.
Dans les valeurs à formater, majuscules et minuscules doivent être respectée.
Chaque liste de valeurs peut être composée :
d’une valeur simple : exemple :75=’Paris’
d’une liste continue de valeurs :exemple :92-94=’Petite couronne’
d’une liste exhaustive de valeurs :exemple :92.93.94=’Petite couronne’
d’une liste discontinue de valeurs :exemple :75.77.78.91-95=’région Parisienne’
Format de type numérique
Par exemple, pour créer un format permettant le regroupement d’âges en classes
quinquennales, un masque serait créé de la manière suivante :
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 ;
L’application de ce masque à toute variable permet de regrouper les modalités 15,
16, 17, 18 et 19 au sein d’une même modalité étiquetée « 15 à 19 ans ».
La valeur de gauche doit être inférieure à celle de droite. Pour exclure une borne de
l’intervalle, un signe < sera placé immédiatement à gauche ou à droite du tiret. On
peut utiliser en guise de borne pour les intervalles les mots-clés HIGH et LOW. Ces
mots-clés sont sans guillemets.
• valeur1 – valeur 2
les deux bornes de l’intervalle sont incluses
• valeur1 <- valeur 2 la borne inférieure est exclue, tandis que la borne
supérieure est incluse
• valeur1 -< valeur 2
la borne inférieure est incluse, la borne supérieure exclue
• valeur1 <-< valeur 2 les deux bornes de l’intervalle sont exclues
PROC FORMAT LIBRARY=base.formats;
VALUE Fnbenf
LOW-2=’Moins de 2 enfants’
3<-<5=’De 3 à 4 enfants’
5-HIGH=’Plus de 5 enfants’
;
RUN ;
Cet exemple crée un format pouvant être appliqué au nombre d’enfants. La valeur 3
sera affichée telle qu’elle car elle n’appartient à aucune tranche du format Fnbenf
défini ici.
Format de type caractère
Pour créer un format caractère, il faut faire précéder le nom du format par le signe $
et mettre les valeurs définies entre quotes. Le regroupement de modalités
qualitatives s’effectuera de la manière suivante :
51
PROC FORMAT ;
VALUE $ REGION
‘Paris’,‘Hauts-de-Seine’,’Seine-Saint-Denis’,’Val-de-Marne’,’Yvelines’,‘Val
d’Oise’,’Seine et Marne’=’Ile-de-France’
‘Morbihan’,’Ile et Villaine’,’Côtes d’Armor’,’Finistère’=’Bretagne’
…
;
Mots clés réservés :
• la valeur LOW désigne la plus petite valeur rencontrée dans la table
• la valeur HIGH désigne la plus grande
• la modalité OTHER désigne toutes les valeurs non prévues par les autres
classes.
Description de formats existants
Lorsqu’on dispose d’un catalogue de formats assez volumineux, il est fréquent que
l’on souhaite visualiser le codage d’un format donné (passage des valeurs initiales
aux valeurs formatées). Pour cela, il suffit d’utiliser la procédure FORMAT avec
l’instruction SELECT ou EXCLUDE en conjonction de l’option FMTLIB. La fenêtre
Output contient alors des tableaux récapitulatifs des formats créés. Ils sont affichés
par ordre alphabétique de leurs noms.
Exemples :
proc format lib=a fmtlib;
select quin;
run;
proc format lib=a fmtlib;
exclude quin;
run;
Utilisation des formats personnalisés
Les formats personnalisés sont utilisables au même titre que les formats prédéfinis.
Ils peuvent être utilisés pour formater l’affichage des données dans les tables ou
dans certaines procédures.
Si les formats que l’on souhaite utiliser sont stockés dans une bibliothèque autre
que WORK, alors l’instruction OPTION FMTSEARCH = (mabib1 mabib2 WORK) ;
est nécessaire pour y accéder. SAS ne recherche des formats que dans les
bibliothèques énumérées : il est indispensable donc de préciser également la
librairie WORK.
52
Exemple
option fmtsearch=(a WORK);
proc print data=recensement;
var age;
format age fqui.;
run;
Le format appliqué à la variable age a pour effet de la transformer en 6 classes (si
tous les âges sont compris sont supérieurs ou égaux à 15).
Si un même format s’applique à plusieurs variables, on indiquera la liste des
variables sur lesquelles il s’applique (séparées par des blancs), suivi du nom du
format (suivi de .). S’il s’agit d’un format pour une variable caractère, il sera
précédé de $, comme par exemple : format dpt $region. ; pour appliquer le format
region aux départements.
4. 7. 2. Une alternative à l’étape Data : la procédure SQL
Le SQL (Structured Query Language) est le langage universel de gestion des
données informatiques des SGBD relationnels. La procédure SQL permet d’obtenir
un bon nombre de résultats similaires à ceux d’une étape Data.
Elle permet entre autres de :
• créer une vue logique ou une table
• lister le contenu d’une table en se restreignant à certaines variables et certaines
observations
• réaliser des fusions et des jointures entre des tables
• trier une table
• synthétiser une table à l’aide de statistiques.
Syntaxe :
PROC SQL <option(s)> ;
Instructions en langage SQL ;
QUIT ;
Entre les deux instructions PROC SQL et QUIT, le seul langage autorisé est le
SQL.
Extraction de données
Une table SAS peut être créée par la commande CREATE TABLE. La table SAS
reçoit ainsi un nom et des variables. La table existe physiquement mais elle est vide
de données.
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 ;
Le type peut être :
• CHAR : alphanumérique
• NUM : numérique
• INTEGER : entier (pas besoin de préciser la longueur).
L’instruction INFORMAT indique quel est le format de lecture, l’instruction FORMAT
quel est le format de sortie (écriture).
53
Exemple : créer la table PARC avec les variables :
Zone (ZONE), entier
Hauteur de l’herbe (HERB), caractère (longueur 6)
Présence de bosquets (BOSQUET), caractère (longueur 3)
Accès à l’eau (EAU), caractère (longueur 8)
Présence d’hippopotames (HIPPO), caractère (longueur 8)
proc sql;
create table parc(
ZONE integer label='zone',
HERB char(6) label='hauteur de l"herbe',
BOSQUET char(3) label='présence de bosquets',
EAU char(8) label='accès à l"eau',
HIPPO char(8) label='présence d"hippopotames');
quit;
Chaque définition de variable est séparée par une virgule.
La commande SELECT
Syntaxe :
SELECT variable <,variable>…
FROM nom_de_table ou nom_de_vue <,nom_de_table ou nom_de_vue>…
<WHERE expression>
<GROUP BY variable <,variable…>…>
<HAVING expression>
<ORDER BY variable <,variable>…>;
La commande SELECT permet de rechercher des informations par une sélection
selon différents critères : on liste les variables (séparées par des virgules) dans
l’ordre d’apparence voulu.
Pour sélectionner toutes les variables d’une table, l’astérisque (*) peut être utilisée à
la place de la liste de toutes les variables. Il faut préciser dans quelle table les
données sont stockées avec FROM suivi du nom de la table.
Exemple
proc sql;
select ZONE, HERB
from parc3
where ZONE>6;
quit;
Le résultat d’une requête SELECT est par défaut affiché dans l’OUTPUT :
ZONE HERB
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
7
courte
8
courte
9
courte
10
courte
11
courte
12
haute
13
courte
Mais elle peut aussi être une table SAS en utilisant la syntaxe suivante :
CREATE TABLE nom_de_table
AS SELECT…
54
Exemple : on sélectionne toutes les variables pour les zones 7 et plus.
proc sql;
create table extract
as select *
from parc3
where ZONE>6;
quit;
La commande WHERE
La clause WHERE permet de spécifier un critère de sélection, appelé prédicat.
Le prédicat est une expression logique composée d’une suite de conditions
combinées entre elles par les opérateurs logiques AND, OR ou NOT et des
parenthèses.
Un élément d’une expression logique peut prendre les formes suivantes :
• comparaison à une valeur
• comparaison à une fourchette de valeurs (BETWEEN)
• comparaison à une liste de valeurs (IN)
• comparaison à un filtre (LIKE) : _ remplace 1 caractère, % remplace 1 ou
plusieurs caractères.
Exemple : créer une table EXTRACT des zones 7 et plus et dont l’accès à l’eau
contient la chaîne de caractère « loig ».
proc sql;
create table extract
as select *
from parc3
where ZONE>6 and
EAU like '%loig%';
run;
On obtient la table EXTRACT suivante :
Obs ZONE HERB
1
2
3
4
BOSQUET EAU
7 courte
9 courte
10 courte
12 haute
HIPPO
non
non
non
oui
éloignée
éloignée
éloignée
éloignée
aucun
aucun
aucun
aucun
La clause ORDER BY
La clause ORDER BY permet de trier le résultat de la requête d’après la valeur
d’une ou plusieurs variables. En ajoutant DESC, on précise l’ordre décroissant. Par
défaut, le tri se fait par ordre croissant.
Syntaxe :
ORDER BY variable1 <DESC>, variable2 <DESC>…
Les options suivantes de la proc SQL permettent de restreindre le nombre
d’observations traitées :
INOBS=n
restreint à n le nombre d’observations de chaque table à incorporer
(les n premières). Ceci est utile pour tester des requêtes sur des
fichiers très longs. Il suffit alors de choisir un n petit… puis d’ôter cette
option si la requête donne satisfaction.
OUTOBS=n
restreint à n le nombre d’observations en sortie (les n dernières).
55
Exemple : trier la table parc3 par la variable ZONE (ordre descendant) et ne
conserver que les variables ZONE, HIPPO, EAU et la dernière 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 s’affiche dans la fenêtre OUTPUT :
ZONE HIPPO EAU
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
13 aucun proche
Supprimer les doublons : option DISTINCT
Par défaut, la procédure SQL affiche le résultat d’une requête sans éliminer les
doublons. Il est possible de ne garder qu’un exemplaire de chaque ligne en ajoutant
DISTINCT dans la clause SELECT.
Exemple :
proc sql;
select distinct HERB, BOSQUET, EAU
from parc3
order by HERB desc;
run;
Elimine les doublons sur les variables HERB, BOSQUET et EAU.
Dans la fenêtre OUTPUT s’affiche le résultat suivant :
HERB BOSQUET EAU
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
haute oui
éloignée
courte non
éloignée
courte oui
moyenne
courte oui
proche
Regrouper les modalités d’une variable : la clause GROUP BY
La clause GROUP BY permet de regrouper les modalités d’une variable. Cette
clause est utilisée uniquement lorsque la requête utilise une fonction de groupe.
Sans la clause GROUP BY, la somme est effectuée sur la totalité de la table.
SELECT fonction (variable)
FROM table
GROUP BY variable1, variable2…
L’expression HAVING permet d’opérer sur un sous-ensemble d’observations de la
table. C’est l’équivalent du WHERE appliqué au groupe. La clause GROUP BY doit
toujours précéder une expression HAVING et définit le groupe sur lequel
l’expression HAVING va opérer. On utilise l’expression HAVING lorsque la requête
utilise une fonction de groupe (AVG, COUNT…).
Exemple : HAVING expression sur le résultat d’une fonction somme
SELECT fonction(variable) AS nomvar
FROM table
GROUP BY variable1, variable2…
HAVING nomvar expression
56
Exemple
proc sql;
select mean(Gini) as Mgini
from pays.russet
group by Demo
having Mgini>70;
quit;
Regroupement par type de régime (Demo) et calcul de la moyenne des coefficients
de gini. Sélection des observations pour lesquelles la moyenne (Mgini) est
supérieure à 70.
Les fonctions
Les fonctions de groupe effectuent un calcul sur l’ensemble des observations d’une
table spécifiée après la clause FROM ou sur chaque groupe défini par une clause
GROUP BY.
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 d’une variable
MIN : donne la plus petite valeur d’une variable
SUM : somme
VAR : variance
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 résultat lorsque l’on crée une table en
sortie (CREATE TABLE).
LABEL permet d’associer un label à la colonne.
Exemple : calculer la moyenne du coefficient de gini, les coefficients minimal et
maximal de gini par type de régime 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;
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
3
75.3
43.7
93.8
57
L’expression when
Cette expression permet de changer la représentation des données en donnant un
code chiffré à une chaîne de caractères ou inversement, en donnant à un code un
intitulé plus significatif.
SELECT variables,
CASE WHEN expression THEN valeur1
WHEN expression THEN valeur2
…
ELSE valeurn
END
<AS sortie LABEL=’Libellé’>
AS permet de donner un nom à la nouvelle colonne.
Exemple : on recode en binaire la variable HIPPO : 1 si présence d’hippopotames,
0 sinon.
proc sql;
select *,
case when HIPPO='aucun' THEN 0
else 1
end
as BIN_HIP
from parc3;
run;
On obtient la sortie suivante :
ZONE HERB BOSQUET EAU
HIPPO BIN_HIP
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
1 courte oui
proche moyen 1
2 haute oui
éloignée aucun 0
3 courte oui
proche aucun 0
4 courte oui
proche importan 1
5 courte oui
moyenne aucun 0
6 courte oui
proche aucun 0
7 courte non
éloignée aucun 0
8 courte oui
moyenne importan 1
9 courte non
éloignée aucun 0
10 courte non
éloignée aucun 0
11 courte oui
proche importan 1
12 haute oui
éloignée aucun 0
13 courte oui
proche aucun 0
Les jointures
Pour écrire une jointure, il suffit de citer les variables recherchées dans la clause
SELECT, et de préciser dans la clause WHERE (ou ON) la condition d’égalité entre
les variables qui réalisent la jointure entre les tables. La clause FROM doit contenir
le nom de toutes les tables à lier.
Dans la clause FROM, il est possible de donner un alias à une table :
FROM nom de la table AS alias
Ceci est utile lorsque les tables à joindre ont des variables qui ont le même nom. On
désigne alors la variable par alias.variable.
1/ La condition de fusion des tables est exprimée dans une clause WHERE. Elle
peut porter sur plusieurs variables.
FROM table1, table2
WHERE condition
Cette jointure correspond au cas IF A AND IF B du merge en SAS de base. On
sélectionne uniquement les observations communes.
58
PROC SQL ;
SELECT a.*, b.*
FROM table1 AS a,
table2 AS b
WHERE a.var1=b.var1;
QUIT;
2/ Jointure à gauche : la condition de fusion des tables est exprimée dans une
clause ON.
FROM table1 LEFT JOIN table2
ON condition
Elle correspond au cas IF A du merge.
On sélectionne toutes les observations de la table A et les observations de la
table B qui correspondent (ON).
PROC SQL ;
SELECT a.*, b.*
FROM table1 AS a
LEFT JOIN
table2 AS b
ON a.var1=b.var1;
QUIT;
3/ Jointure à droite :
FROM table1 RIGHTJOIN table2
ON condition
Elle correspond au cas IF B du merge.
On sélectionne toutes les observations de la table B et les observations de la
table A qui correspondent (ON).
PROC SQL ;
SELECT a.*, b.*
FROM table1 AS a
RIGHT JOIN
table2 AS b
ON a.var1=b.var1;
QUIT;
4/ Jointure « full »
FROM table1 FULL JOIN table2
ON condition
Elle correspond au merge by sans condition.
On sélectionne toutes les observations de la table A et toutes les observations
de la table B en mettant les observations communes en correspondance.
PROC SQL ;
SELECT a.*, b.*
FROM table1 AS a
FULL JOIN
table2 AS b
ON a.var1=b.var1;
QUIT;
Cette méthode de jointure pose en fait un problème. Pour les observations de
table2 qui n’étaient pas dans table1, var1 n’est pas renseignée dans la table ou
la sélection résultante. Aussi, la jointure full n’est intéressante que si les deux
tables contiennent les mêmes observations. Sinon, il est préférable d’effectuer
la fusion à partir d’une étape data, avec l’instruction merge.
59
5/ Produit cartésien
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 résultat contient
naXnb lignes.
PROC SQL ;
SELECT a.*, b.*
FROM table1 AS a
table2 AS b;
QUIT;
6/ Jointure d’une table avec elle-même
Il est possible de faire une jointure d’une table avec elle-même pour obtenir
davantage d’informations.
Exemple : Nous avons la table EMPLOI avec les variables
Empnum (numéro de l’employé)
Empnom (nom de l’employé)
Emptitre (titre de l’employé)
Numsup (numéro du supérieur)
EMPNUM
EMPNOM
101
201
213
214
401
412
John
Betty
Joe
Jeff
Sam
Nick
EMPTITRE
head man.
manager 101
respvent 201
respvent 201
manager 101
respvent 401
NUMSUP
.
Construire une table avec pour chaque employé le nom de son supérieur
hiérarchique (nomsup) et son titre (titresup).
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
EMPNOM
EMPTITRE
NUMSUP
SUPNOM
SUPTITRE
101
201
213
214
401
412
John
Betty
Joe
Jeff
Sam
Nick
head man.
manager
respvent
respvent
manager
respvent
.
101
201
201
101
401
John
Betty
Betty
John
Sam
head man.
manager
manager
head man.
manager
60
L’union
L’opérateur UNION est un opérateur ensembliste. Il effectue l’union des résultats de
deux requêtes SELECT, c’est à dire qu’à partir de deux tables résultats, il en crée
une troisième comportant l’ensemble des observations des deux tables de départ,
en éliminant les doublons parfaits et en triant selon l’ordre des variables dans la
commande select.
PROC SQL ;
SELECT variables
FROM table1
UNION
SELECT variables
FROM table2 ;
QUIT ;
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;
La commande INSERT INTO
Cette commande est utilisée pour insérer des observations dans une table. Elle
nécessite le nom de la table, le nom des variables à initialiser et la valeur à leur
assigner.
INSERT INTO table
SET variable1=valeur1, variable2=valeur2…
Exemple : insérer une observation dans la table parc
proc sql;
insert into parc3
set ZONE=14, HERB='haute', BOSQUET='non', EAU='éloignée',
HIPPO='moyen' ;
quit;
Associée à une clause SELECT, cette commande permet de copier un sousensemble d’une table dans une autre. La table cible doit exister préalablement, et
les types de données doivent correspondre de façon très précise.
61
Exemple : insérer 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;
On peut également insérer les valeurs de chaque observation avec l’instruction
VALUES.
INSERT INTO table
VALUES (valeur1, valeur2, valeur3…)
Exemple : insérer 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','éloignée','moyen')
values(19,'courte','non','éloignée','importan');
quit;
La commande UPDATE
La commande UPDATE spécifie le nom de la table qui va être modifiée, suivi d’une
clause SET définissant les modifications à apporter, et d’une clause WHERE avec
le critère précisant les observations à modifier.
UPDATE TABLE
SET variable1=valeur1, variable2=valeur2…
WHERE condition
Pour modifier toutes les observations d’une table, il n’est pas nécessaire d’inclure
une clause WHERE.
Exemple : remplacer la modalité ‘éloignée’ de la variable EAU par ‘loin’ :
proc sql;
update parc3
set EAU='loin'
where EAU='éloignée';
quit;
La commande DELETE
Cette commande consiste en une clause DELETE FROM spécifiant le nom de la
table concernée, et d’une clause WHERE avec le critère précisant les observations
à supprimer.
DELETE FROM table
WHERE condition
Exemple : détruire les observations des zones 14 et plus.
proc sql;
delete
from parc3
where ZONE>13;
quit;
62
4. 7. 3. La procédure CONTENTS : afficher le contenu d’une table
PROC CONTENTS affiche la description d’une table : nombre d’observations,
nombre de variables, liste et position des variables.
Syntaxe :
PROC CONTENTS <DATA=nom_de_table> ;
<OUT=> ;
RUN ;
OUT= : stocke le résultat de la demande dans une table SAS.
Le listing qui en résulte se présente en quatre grandes parties. L’exemple suivant
est la description de la table chien1.
La première partie recense les grandes caractéristiques de la table. On y retrouve
son nom, la version de SAS qui l’a créée, sa date de création et sa date de dernière
modification, son nombre d’observations et de variables, si la table présente un tri,
etc.
Data Set Name
WORK.CHIEN1
Observations
27
Member Type
DATA
Variables
8
Engine
V9
Indexes
0
Created
jeudi 30 décembre 2004 18 h 43 Observation Length 80
Last Modified
jeudi 30 décembre 2004 18 h 43 Deleted Observations 0
Protection
Compressed
NO
Data Set Type
Sorted
YES
La deuxième partie traite des caractéristiques physiques de cette table. Cette partie
présente peu d’intérêt.
Data Set Page Size
8192
Number of Data Set Pages 1
First Data Page
1
Max Obs per Page
101
Obs in First Data Page 27
Number of Data Set Repairs 0
File Name
C:\DOCUME~1\WOLBER_O\LOCALS~1\Temp\SAS Temporary Files\_TD1256\chien1.sas7bdat
Release Created
9.0101M3
Host Created
XP_PRO
La partie suivante présente les caractéristiques des différentes variables.
Alphabetic List of Variables and Attributes
# Variable
6
7
8
5
1
3
2
4
Type Len Format Informat Label
AFFECTION
Num
8
AGRESSIVITE Num
8
FONCTION
Num
8
INTELLIGENCE Num
8
NOM
Char 22 $22.
POIDS
Num
8
TAILLE
Num
8
VELOCITE
Num
8
AFFECTION
AGRESSIVITE
FONCTION
INTELLIGENCE
$22.
NOM
POIDS
TAILLE
VELOCITE
Enfin, une dernière partie, facultative, décrit le tri dont la table fait éventuellement
l’objet :
Sort Information
Sortedby
NOM TAILLE POIDS VELOCITE INTELLIGENCE AFFECTION AGRESSIVITE FONCTION
Validated YES
Character Set ANSI
Sort Option NODUPKEY
PROC CONTENTS peut également afficher la liste de toutes les variables
présentes dans une librairie.
Il suffit alors de coder PROC CONTENTS DATA=nom_de_librairie._ALL _;
63
4. 7. 4. La procédure SORT : trier une table selon une clé
PROC SORT est utilisée afin de trier les observations d’une table SAS selon une ou
plusieurs variables. Les observations, une fois triées, peuvent être stockées dans
une nouvelle table ou remplacer la table originale.
Syntaxe :
PROC SORT DATA=nom_de_table OUT=nom_de_table ;
BY <DESCENDING> variable1…<DESCENDING> variablen;
DATA=nom_de_table
OUT=nom_de_table
Table SAS en entrée à trier.
Table SAS en sortie. Si cette option est absente, la table
d’origine est remplacée par la table triée.
La spécification des clés de tris (variables selon les valeurs desquelles la table sera
ordonnée) se fait dans l’instruction BY : les noms des variables y sont énumérés à
la suite, séparés par au moins un espace. La première variable citée servira à
ordonner les observations ; en cas d’ex aequo, la deuxième variable (si l’instruction
en compte plusieurs) servira à les ordonner et ainsi de suite…
Par défaut, le tri selon chacune de ces variables est ascendant. Pour préciser que
l’ordre de tri est décroissant selon une des variables, son nom doit être précédé du
mot-clé DESCENDING.
Exemple : on veut trier les pays par régime politique, puis par ordre alphabétique :
proc sort data=pays.russet;
by demo pays;
run;
L’option NODUPKEY
L’option NODUPKEY ajoute à l’opération de tri une suppression des doublons
observés sur les variables de tris. Ces observations en doublon étant éliminées de
la table créée par la procédure SORT, il est recommandé de combiner
systématiquement l’emploi des options NODUPKEY et OUT.
Cette option ne recherche que les doublons sur les variables citées dans
l’instruction BY. Si on veut éliminer les observations exactement identiques, on
utilisera l’instruction BY _ALL_.
Exemple :
proc sort data=chien out=chien1 nodupkey;
by _all_;
run;
La procédure SORT avec l’option NODUPKEY génère un message supplémentaire
dans la fenêtre Log, indiquant le nombre de doublons expurgés :
NOTE: There were 30 observations read from the data set WORK.CHIEN.
NOTE: 3 observations with duplicate key values were deleted.
NOTE: The data set WORK.CHIEN1 has 27 observations and 8 variables.
64
4. 7. 5. La procédure PRINT : éditer des listings
Cette procédure est utilisée pour imprimer tout ou une partie des valeurs d’une table
SAS. Elle permet aussi d’imprimer des totaux et sous totaux pour des variables
numériques.
Syntaxe :
PROC PRINT DATA=nom_de_la_table <liste d’options> ;
VAR liste_de_variables ;
ID liste_de_variables ;
BY liste_de_variables ;
PAGEBY variable ;
SUMBY variable ;
SUM liste_de_variables ;
Le mot clé DATA= permet de spécifier la table à traiter (la dernière si aucun nom de
table n’est précisé). Ce mot clé se retrouve dans la totalité des procédures. Si la
table est temporaire, on précisera uniquement son nom, si elle a été stockée de
manière permanente, on la fera précéder du nom logique de la librairie de stockage
(défini dans l’instruction LIBNAME).
Instructions :
VAR
BY
liste de variables à imprimer. Toutes par défaut.
des impressions séparées sont effectuées pour chaque modalité des
groupes BY. Le fichier doit avoir été auparavant trié ou indexé selon ces
variables.
ID
permet l’identification des observations sur le listing par une variable
définie à la place du numéro d’observation.
PAGEBY permet de contrôler les variables indiquées en BY pour lesquelles
s’effectue la rupture de page.
SUM
affiche le total de la (des) variable(s) citées dans l’instruction SUM. S’il y a
également une instruction BY, un sous-total sera édité à la fin de chaque
bloc.
SUMBY s’utilise uniquement avec les instructions SUM et BY. Affiche un soustotal de la (ou des) variable(s) totalisée(s) pour chaque groupe.
La procédure PRINT peut s’utiliser sans aucune instruction. Dans ce cas, SAS
imprime toutes les variables et toutes les observations de la table en entrée (la
dernière table modifiée dans la session courante si aucune table n’est spécifiée) et
les formats d’affichage des variables sont ceux préalablement attribués aux
variables de la table SAS.
Ainsi, pour lister entièrement une table SAS, le programme de base est très simple.
Par exemple, pour lister entièrement la table pays.russet :
proc print data=pays.russet;
run;
65
Les en-têtes des colonnes sont affichées avec les noms SAS des variables ;
Une colonne Obs donné le numéro de ligne des observations sur la gauche du
listing.
Quelques options de l’instruction PROC PRINT :
LABEL
affiche le label des variables plutôt que leur nom en tête du
listing.
NOOBS
supprime du listing la colonne « OBS ».
N="libellé1"…"libellén" avec l’instruction BY, on pourra préciser un libellé différent
par bloc. Il existe aussi un option N sans texte derrière : elle
ajoute en bas de listing le nombre d’observations affichées.
DOUBLE
affiche la table avec une ligne vierge entre 2 observations.
HEADING=H ou V
spécifie l’orientation des en-têtes de colonne.
ROWS=PAGE
permet de n’imprimer qu’une liste de variables par page. Si
les variables ne peuvent toutes figurer sur la largeur de
page, le nombre maximum d’observations sera imprimé
pour une même série de variables sur une page, puis ces
mêmes observations seront inscrites pour une autre série
de variables sur une autre page.
L’option OUT= n’est pas valide ici.
Listing d’extraits de tables
On sélectionne des informations sur la table pays.russet (lignes et colonnes). Par
exemple, on ne veut que les démocraties stables :
proc print data=pays.russet
(where=(demo=1)) noobs;
id pays;
run;
66
Listing avec totalisation
On veut imprimer le nombre de tués lors de manifestations violentes et les sommer
en fonction de l’instabilité politique (démocratie stable, démocratie instable,
dictature). On utilise l’instruction SUM (affichage du total d’une variable) et comme
l’on souhaite simultanément obtenir des sous-totaux selon les modalités d’une
variable en catégories, on utilise simultanément l’instruction BY. L’instruction BY
demande un tri préalable de la table.
proc sort data=pays.russet;
by demo;
run;
proc print;
var pays deat;
by demo;
sum deat;
run;
On obtient dans la fenêtre Sortie l’impression suivante (on a tronqué quelques
observations) :
The SAS System
11:15 Friday, December 31, 2004 3
--------------------------- Demo=1 -----------------------------------------Obs Pays
Deat
1 Australie
0
2 Belgique
1
...
14 Suisse
0
15 Uruguay
1
------Demo
16
--------------------------- Demo=2 -----------------------------------------Obs Pays
Deat
16 Argentine 217
17 Autriche
0
...
25 Japon
1
26 RFA
0
------Demo
564
--------------------------- Demo=3 -----------------------------------------Obs Pays
Deat
27 Bolivie
663
28 Brésil
1
...
46 Venezuela
111
47 Yougoslavie
0
------Demo
5705
====
6285
Exemple : on veut imprimer les recettes et les dépenses d’une multinationale par
région et par Etat. On veut les sommes par région, mais pas par Etat.
proc sort data=ventes;
by Region Etat;
run;
67
proc print data=ventes noobs;
by Region Etat;
sum Depenses Recettes;
sumby Region;
label Region='Ventes Région';
format Recettes Depenses comma10.;
title 'Revenue et Dépenses par Région';
run;
----------------- Ventes Région=Nord Etat=Allemagne -------------------------------Mois
Depenses
Recettes
MAR95
9,800
13,500
------------------ Ventes Région=Nord Etat=Italie --------------------------------Mois
Depenses
Recettes
FEB95
3,000
4,000
MAR95
6,000
5,000
-----------------------Region
18,800
22,500
------------------ Ventes Région=Sud Etat=Allemagne -------------------------------Mois
Depenses
Recettes
FEB95
8,500
11,000
------------------- Ventes Région=Sud Etat=France --------------------------------Mois
Depenses
Recettes
JAN95
2,000
8,000
FEB95
1,200
6,000
-----------------------Region
11,700
25,000
==========
==========
30,500
47,500
4. 7. 5. La procédure DATASETS : effectuer des opérations globales sur les tables
PROC DATASETS permet d’effectuer des opérations globales sur les tables :
copie, destruction, attribution d’un nouveau nom…
Syntaxe :
PROC DATASETS LIBRARY=nom_de_librairie ;
<DELETE> ;
Les principales opérations couvertes par cette procédure sont :
CONTENTS :
lister la description d’une table (analogue à PROC
CONTENTS)
CHANGE ou AGE : renommer une table
COPY :
copier ou déplacer un ensemble de tables d’une librairie à
une autre
DELETE :
détruire un ensemble de tables
APPEND :
concaténer deux tables
Copie de tables
COPY OUT=librairie <IN=librairie> <MOVE> ; SELECT liste_de_tables ;
ou
COPY OUT=librairie <IN=librairie> <MOVE> ;EXCLUDE liste_de_tables ;
SELECT
permet de ne recopier que certaines tables de la librairie.
EXCLUDE indique les tables à ne pas recopier.
IN
indique la librairie source, où se trouvent les tables à recopier.
OUT
indique la librairie destination.
Si le mot clé MOVE est présent, les tables seront détruites du répertoire origine
(indiqué dans le IN), après copie.
68
Destruction de tables
DELETE liste_de_tables ;
Les tables mentionnées sont détruites de la librairie.
Attribuer un nouveau nom aux tables
Instruction CHANGE :
CHANGE
ancien_nom_table1=nouveau_nom_table1…
<ancien_nom_table2=nouveau_nom_table2…> ;
Instruction AGE
AGE nom1 nom2 nom3…nomn ;
La table nom1 est renommée nom2, la table nom2 est renommée nom3, …la table
nomn est détruite.
Concaténation de tables
Deux tables ayant la même structure peuvent être mises bout à bout, la table
résultante ayant un nombre d’observations égal à la somme des observations des
deux tables existantes.
APPEND BASE=table_SAS DATA=table_SAS <FORCE>;
Par défaut, seules les variables présentes dans chacune des deux tables (même
nom, même type, même longueur) sont prises en compte dans l’opération de
concaténation.
Le mot clé FORCE permet de prendre aussi en compte :
• les variables présentes dans la table de base. Celles uniquement présentes
dans la table mentionnée dans DATA= ne seront pas prises en compte.
• Les variables n’ayant pas le même type dans chacune des deux tables, le type
résultant est le type de la variable présente dans la table de BASE.
• Les variables de longueur différentes, la longueur résultante est la longueur de
la variable dans la table de BASE.
69
5. Autres procédures
On détaillera maintenant quelques procédures usuelles :
•
•
•
•
•
•
PROC TABULATE (pour les tableaux croisés statistiques),
PROC MEANS (pour le calcul de statistiques descriptives),
PROC FREQ (pour l’édition de tableaux de fréquence et les tests du Chi-2 et assimilés),
PROC CORR (calculs de corrélations),
PROC UNIVARIATE (description de la distribution d’une variable)
et PROC IML (calculs matriciels).
On abordera en TP les principales procédures nécessaires à une analyse statistique poussée
(régressions, ACP…).
5. 1. Les points communs des procédures d’analyse statistique
5. 1. 1. La sélection de l’échantillon d’étude
Pour effectuer une sélection des observations de la table SAS spécifiée en entrée
d’une procédure SAS, on peut utiliser l’option WHERE= :
PROC NOMPROC DATA=nomlib.nomtableentree (WHERE=(expression));
Instructions;
RUN;
5. 1. 2. La sélection des variables d’analyse
Pour sélectionner les variables analysées dans les procédures de statistique, on
utilise généralement l’instruction VAR. Elle est valable dans un grand nombre de
procédures statistiques, en particulier MEANS, UNIVARIATE et CORR. Les
variables numériques sont les seules autorisées dans une instruction VAR ou les
procédures statistiques.
VAR variable(s)Numérique(s) ;
En l’absence d’une instruction VAR dans les procédures où cette dernière est
valide, la procédure utilisera toutes les variables numériques de la table SAS en
entrée.
5. 1. 3. L’analyse statistique par sous-groupes
Pour mener une analyse sur plusieurs sous-groupes d’observations, on dispose des
instructions CLASS et BY.
BY <DESCENDING> variable(s) ;
CLASS variable(s) ;
On obtient des résultats par sous-groupe étudié mais l’affichage des sorties de
résultats diffère généralement selon l’emploi des instructions BY ou CLASS.
70
Différences entre les instructions BY et CLASS
dans les procédures de statistique
Instruction BY
Valable dans toutes les procédures
d’analyse statistique
Les valeurs manquantes de chaque
variable du BY constituent un sousgroupe qui est pris en compte dans
l’analyse.
Nécessite un tri préalable de la table
en entrée : tri par la même liste de
variables que celle de l’instruction BY
et dans le même ordre.
Pendant la phase de calcul, SAS ne
garde en mémoire que les
observations d’un sous-groupe à la
fois.
Instruction CLASS
Valable uniquement dans les
procédures MEANS, UNIVARIATE et
TTEST.
Par défaut, les valeurs manquantes
des variables de classe ne sont pas
prises en compte dans l’analyse.
Ne nécessite pas de tri préalable de la
table en entrée.
Toutes les observations de la table
sont conservées pendant la phase de
calculs. On évitera CLASS pour les
tables volumineuses.
5. 1. 4. Le regroupement des valeurs d’une variable
Pour créer des sous-groupes d’observations en n’utilisant pas toutes les valeurs
distinctes d’une variable, mais en faisant des regroupements, il est possible
d’utiliser une instruction FORMAT combinée avec la présence d’une instruction BY,
CLASS ou TABLE.
Cette démarche sera utile pour mettre une variable quantitative en classes sans
avoir à créer une nouvelle variable.
5. 1. 5. La pondération des observations
Dans certains cas de figure, il peut s’avérer nécessaire de pondérer les
observations de la table en entrée par les valeurs d’une variable numérique. Pour
cela, on dispose des instructions WEIGHT ou FREQ. Les deux instructions ne
peuvent pas être utilisées simultanément.
WEIGHT|FREQ variableNumérique ;
Avec ces deux instructions, les observations ayant un poids négatif ou nul sont
ignorées dans les calculs. En outre, avec FREQ, les valeurs non entières sont
tronquées au nombre entier inférieur.
La principale différence est la suivante :
• chaque valeur de l’instruction WEIGHT est considérée comme le poids de
l’observation correspondante : le nombre d’observations renseignées considéré
ne change pas.
• Chaque valeur de l’instruction FREQ est considérée comme le nombre
d’occurrences de l’observation correspondante : le nombre d’observations
renseignées considéré est égal à la somme des pondérations données dans
l’instruction FREQ.
71
5. 2. La procédure TABULATE : créer des tableaux de synthèse
La procédure TABULATE permet de créer des tableaux de synthèse à une dimension ou
des tableaux croisés à plusieurs dimensions.
La procédure TABULATE s’appuie sur trois instructions particulières : CLASS, VAR et
TABLE.
Syntaxe :
PROC TABULATE DATA=tableSAS <options> ;
CLASS variable(s) ;
VAR variable(s)_de_calcul ;
TABLE (structure des lignes du tableau),
(structure des colonnes du tableau)*
(calculs apparaissant dans les cases du tableau)
;
RUN ;
•
CLASS permet de lister les variables qui spécifient des catégories. Ces catégories
constituent des lignes et/ou des colonnes du tableau. Par défaut, les valeurs
manquantes de ces variables n’apparaissent pas dans le tableau ;
•
VAR identifie une ou plusieurs variables numériques comme étant celles sur lesquelles
des statistiques seront calculées. Les valeurs manquantes de ces variables ne
participent pas aux calculs des statistiques.
En l’absence de statistiques et de variables numériques citées dans VAR, la procédure
TABULATE produit des comptages d’observations (N).
•
TABLE est une instruction obligatoire. Elle permet de spécifier l’organisation du tableau
ainsi que son aspect. On y décrit les variables à mettre dans le tableau, les statistiques
à afficher et éventuellement d’autres caractéristiques comme les formats, les libellés ou
le style à appliquer à un élément du tableau.
En l’absence d’éléments en ligne dans l’instruction TABLE, tout le tableau est organisé
en colonnes.
En présence d’au moins une variable de calcul (citée dans VAR) et en l’absence de
statistique, des sommes sont calculées par défaut.
Exemple :
Dans le tableau suivant, les variables ANNEE et SEXE sont des variables de l’instruction
CLASS : chacune de leurs valeurs constitue une ligne ou une colonne du tableau. La
variable REVENU_BRUT est citée, elle, dans l’instruction VAR, car on calcule des
statistiques (minimum, moyenne) sur ses valeurs.
ANNEE
2003
2004
Revenu brut Revenu brut Revenu brut Revenu brut
MINIMUM
MOYENNE
MINIMUM
MOYENNE
SEXE
F
H
Ensemble
72
Structures de tableaux possibles (lignes ou colonnes)
Juxtaposition (A B)
Imbrication (A * B)
B
En lignes
A
A
B
B
A
En colonnes
B
B
B
B
B
La dernière partie de l’instruction TABLE concerne les calculs à effectuer. L’écriture
générale est de la forme nomVariabledeCalcul*statistique, où la variable de calcul a son
nom cité dans l’instruction VAR et la statistique est l’une des suivantes :
• N
Nombre total d’observations ;
• PCTN, ROWPCTN, COLPCTN
Pourcentages d’un nombre d’observations (pourcentage de l’ensemble, pourcentageligne et pourcentage-colonne respectivement) ;
• SUM, MEAN STD, MAX, MIN, RANGE, MEDIAN, Q1, Q3, P1, P5, P10, P90, P95, P99
Somme, moyenne, écart-type, maximum, minimum, étendue, médiane, quartiles,
centiles ;
• NMISS
Nombre d’observations manquantes de la variable de calcul ;
• PCTSUM, ROWPCTSUM, COLPCTSUM
Pourcentage de la somme d’une variable de calcul (respectivement pourcentage du
total, pourcentage du total-ligne et pourcentage du total-colonne).
Il est possible d’effectuer, avec cette instruction TABLE, des factorisations ou mises en
commun : par exemple, au lieu d’écrire VAR1*SUM VAR2*SUM, on pourra écrire (VAR1
VAR2)*SUM pour un résultat semblable.
Pour changer l’intitulé d’une case du tableau, qu’il corresponde au nom ou au label d’une
variable ou à un mot-clé (ALL ou une statistique), il suffit d’ajouter à côté de l’élément
concerné="texte de remplacement".
Exemple : répartition d’une variable qualitative entre ses différentes modalités.
proc tabulate data=pays.russet;
class Demo;
table (Demo ALL="Tous")*(N="Effectif" PCTN="%");
run;
Les statistiques affichées dans les cellules sont les effectifs (N) et les pourcentages (PCTN).
Le mot-clé ALL crée une colonne récapitulative : il s’agit ici du total des effectifs.
73
Pour obtenir le tableau transposé du précédent, on remplace l’instruction TABLE
précédente par l’instruction :
table (Demo ALL="Tous"),(N="Effectif" PCTN="%");
Exemple : tableau de synthèse d’une variable quantitative.
On utilise l’instruction VAR pour lister les variables d’analyse.
On peut en outre utiliser une instruction CLASS pour faire des statistiques par groupe.
proc tabulate data=pays.russet;
class Demo;
var Gini;
table (Demo ALL="Tous"),Gini*MEAN="Moyenne";
run;
Exemple : tableaux croisés de deux variables qualitatives. Ces deux variables doivent être
spécifiées dans une instruction CLASS.
Cet exemple génère, à partir de la table chien, un tableau croisé de la variable affection en
lignes avec la variable agressivité en colonnes. Les statistiques sont les effectifs (N) et les
pourcentages (PCTN). L’utilisation du mot ALL à la suite des deux variables du tableau
donne un total en ligne et un autre en colonne.
proc tabulate data=chien;
class affection agressivite;
table (affection ALL="Total"),
(agressivite ALL="Total")*
(N PCTN);
run;
74
Exemple avec l’instruction FORMAT et pourcentage lignes.
On peut réaliser plusieurs variantes du tableau précédent en jouant sur les options de la
procédure TABULATE et sur les éléments de l’instruction TABLE.
proc tabulate data=chien format=4.1;
class affection agressivite;
table affection,
agressivite*
ROWPCTN="%";
run;
Avec l’option FORMAT, le format d’affichage par défaut du contenu de toutes les cellules du
tableau est modifié : on passe de deux décimales à une seule. Avec le mot-clé ROWPCTN,
on obtient dans les cellules les pourcentages-lignes.
De manière similaire, on pourrait obtenir un tableau avec des pourcentages colonnes. Il
suffirait d’utiliser l’instruction TABLE suivante :
table affection,
agressivite*
COLPCTN="%";
Il est possible de mettre en forme les tableaux obtenus par cette procédure à l’aide des
options STYLE, que nous ne détaillerons pas ici.
5. 3. La procédure FREQ : analyser la distribution de variables qualitatives
Cette procédure est à la fois :
• une procédure descriptive dans le sens où elle produit des tableaux de fréquences
unidimensionnelles ou des tris croisés multidimensionnels. Elle permet de calculer les
effectifs et les fréquences de chaque valeur prise par une variable ;
• une procédure statistique permettant de faire certains tests comme le test du chi2.
Syntaxe :
PROC FREQ DATA=tableSAS ORDER=ordreValeurs <liste d’options> ;
BY liste_de_variables ;
TABLES requête </liste d’options> ;
WEIGHT variable ;
RUN ;
Instruction TABLES
TABLES permet de définir la liste des distributions souhaitées. Plusieurs distributions
peuvent être demandées simultanément, chacune pouvant être unidimensionnelle ou
multidimensionnelle.
Dans le cas de demande de plusieurs distributions simultanées, il suffit de séparer chaque
distribution par un espace. Par exemple, TABLES a b correspond à la demande de la
distribution simple de la variable a, puis celle de la variable b.
Si on veut croiser plusieurs variables entre elles, il suffit de les séparer par des astérisques.
Par exemple, TABLE a*b correspond à la demande de tri croisé, affichant une modalité de a
à chaque ligne et une modalité de b à chaque colonne.
75
On peut utiliser les facilités d’écriture résumées sur les exemples suivants :
a*(b c) correspond à a*b a*c
(a b)*(c d) correspond à a*c b*c a*d b*d
(a b c)*d correspond à a*d b*d c*d
a - - c correspond a b c
(a - - c)*d correspond à a*d b*d c*d.
Exemple : dans l’étude de la relation herbivores-environnement, on veut croiser la densité
au km_ des éléphants et la proximité de l’eau :
proc freq data=parc;
tables A*EAU;
run;
Pour une table unidimensionnelle, PROC FREQ calcule :
l’effectif
l’effectif cumulé
le pourcentage
le pourcentage cumulé.
Pour une table multidimensionnelle, PROC FREQ calcule :
le pourcentage ligne
le pourcentage colonne
le pourcentage total
l’effectif.
Option ORDER
L’instruction ORDER= permet de spécifier l’ordre dans lequel SAS devra éditer les valeurs
des variables en lignes dans les tableaux produits par la procédure FREQ :
• ORDER=DATA pour éditer les valeurs dans l’ordre d’apparition dans la table ;
• ORDER=FORMATTED pour éditer les valeurs dans l’ordre croissant du format
d’affichage ;
• ORDER=FREQ pour éditer les valeurs dans l’ordre de leurs fréquences décroissantes ;
• ORDER=INTERNAL pour éditer les valeurs dans l’ordre croissant des valeurs non
formatées. C’est l’ordre utilisé par défaut.
Exemple :
proc freq data=voiture order=internal;
table origine*finition;
run;
76
Extrait de la table obtenue :
The FREQ Procedure
Table of Origine by Finition
Origine(Origine)
Finition(Finition)
Frequency‚
Percent ‚
Row Pct ‚
Col Pct ‚B
‚M
‚TB ‚ Total
ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ
D
‚ 2‚ 0‚ 1‚ 3
‚ 11.11 ‚ 0.00 ‚ 5.56 ‚ 16.67
‚ 66.67 ‚ 0.00 ‚ 33.33 ‚
‚ 28.57 ‚ 0.00 ‚ 16.67 ‚
ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ
F
‚ 2‚ 2‚ 2‚ 6
‚ 11.11 ‚ 11.11 ‚ 11.11 ‚ 33.33
‚ 33.33 ‚ 33.33 ‚ 33.33 ‚
‚ 28.57 ‚ 40.00 ‚ 33.33 ‚
ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ
GB
‚ 1‚ 0‚ 0‚ 1
‚ 5.56 ‚ 0.00 ‚ 0.00 ‚ 5.56
‚ 100.00 ‚ 0.00 ‚ 0.00 ‚
‚ 14.29 ‚ 0.00 ‚ 0.00 ‚
ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ
Total
7
5
6
18
38.89 27.78 33.33 100.00
(Continued)
On aurait obtenu le même résultat avec ORDER=FORMATTED puisqu’on n’a pas utilisé
l’option format.
Exercice 10 : utilisation d’un format d’affichage
Editez la répartition des voitures en fonction de l’origine et de la finition, en ayant
préalablement regroupé les voitures européennes dans une seule catégorie ‘Europe ‘, et
les autres voitures dans la catégorie ‘Autres’ (utiliser une procédure Format, puis une
instruction format dans la procédure Freq). Le listing obtenu sera le suivant :
The FREQ Procedure
Table of Origine by Finition
Origine(Origine)
Finition(Finition)
Frequency‚
Percent ‚
Row Pct ‚
Col Pct ‚B
‚M
‚TB ‚ Total
ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ
Europe ‚ 7 ‚ 2 ‚ 5 ‚ 14
‚ 38.89 ‚ 11.11 ‚ 27.78 ‚ 77.78
‚ 50.00 ‚ 14.29 ‚ 35.71 ‚
‚ 100.00 ‚ 40.00 ‚ 83.33 ‚
ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ
Autres ‚ 0 ‚ 3 ‚ 1 ‚ 4
‚ 0.00 ‚ 16.67 ‚ 5.56 ‚ 22.22
‚ 0.00 ‚ 75.00 ‚ 25.00 ‚
‚ 0.00 ‚ 60.00 ‚ 16.67 ‚
ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ
Total
7
5
6
18
38.89 27.78 33.33 100.00
77
Exercice 11 : utiliser une option ORDER pour obtenir la sortie ci-dessous :
The FREQ Procedure
Table of Origine by Finition
Origine(Origine)
Finition(Finition)
Frequency‚
Percent ‚
Row Pct ‚
Col Pct ‚B
‚M
‚TB ‚ Total
ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ
Autres ‚ 0 ‚ 3 ‚ 1 ‚ 4
‚ 0.00 ‚ 16.67 ‚ 5.56 ‚ 22.22
‚ 0.00 ‚ 75.00 ‚ 25.00 ‚
‚ 0.00 ‚ 60.00 ‚ 16.67 ‚
ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ
Europe ‚ 7 ‚ 2 ‚ 5 ‚ 14
‚ 38.89 ‚ 11.11 ‚ 27.78 ‚ 77.78
‚ 50.00 ‚ 14.29 ‚ 35.71 ‚
‚ 100.00 ‚ 40.00 ‚ 83.33 ‚
ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ
Total
7
5
6
18
38.89 27.78 33.33 100.00
Options principales de l’instruction TABLES
Concernant les distributions croisées :
NOCOL :
supprime l’impression des pourcentages colonne
NOROW :
supprime l’impression des pourcentages lige
NOFREQ :
supprime l’impression des fréquences croisées
NOPERCENT : supprime l’impression des pourcentages croisés
NOCUM :
supprime l’impression des fréquences et des pourcentages
cumulés
CUMCOL :
imprime les pourcentages colonne cumulés.
Concernant les distributions à dimension >2 :
TOTPCT :
affiche les pourcentages totaux par rapport à l’ensemble de la
distribution, et non plus par rapport aux critères page.
Concernant l’aspect général du tableau de sortie :
NOPRINT :
supprime l’impression des tables mais permet l’impression de
statistiques
OUT= :
stocke les résultats de la demande dans la table SAS
MISSING :
traite les valeurs manquantes comme des modalités renseignées
dans les calculs et tous les tableaux.
MISSPRINT : permet d’éditer les valeurs manquantes dans les tableaux
demandés dans l’instruction TABLE, mais elles ne sont pas prise
en compte dans les calculs statistiques effectués par la procédure.
Concernant le calcul des valeurs attendues par rapport aux valeurs observées :
EXPECTED : imprime les fréquences attendues sous l’hypothèse
d’indépendance
DEVIATION : édite les écarts entre les effectifs observés et théoriques
LIST :
imprime des tables de dimension 2 sous forme de liste plutôt que
de tableaux
CELLCHI2 :
imprime la contribution de chaque case à la statistique du chi2
totale
CHISQ :
calcule le test du chi2 d’homogénéité ou d’indépendance de
chaque strate et calcule les mesures associées au chi2.
D’autres options non détaillées ici permettent de calculer d’autres statistiques.
Résultat en « liste »
78
L’option LIST édite les tableaux croisés demandés dans l’instruction TABLE sous forme de
liste. Cette option n’est pas valide si des indicateurs de liaison (options EXPECTED,
DEVIATION) sont demandés.
L’option SPARSE permet d’obtenir toutes les combinaisons possibles des modalités des
variables, même celles d’effectifs nul dans le cas où l’on demande un affichage du tableau
sous forme de liste (option LIST).
Exemple
proc freq data=voiture order=internal;
table origine*finition/list sparse;
run;
The FREQ Procedure
Cumulative Cumulativ
Origine Finition Frequency Percent Frequency Percent
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
D
B
2
11.11
2
11.11
D
M
0
0.00
2
11.11
D
TB
1
5.56
3
16.67
F
B
2
11.11
5
27.78
F
M
2
11.11
7
38.89
F
TB
2
11.11
9
50.00
GB
B
1
5.56
10
55.56
GB
M
0
0.00
10
55.56
GB
TB
0
0.00
10
55.56
I
B
2
11.11
12
66.67
I
M
0
0.00
12
66.67
I
TB
2
11.11
14
77.78
J
B
0
0.00
14
77.78
J
M
2
11.11
16
88.89
J
TB
1
5.56
17
94.44
U
B
0
0.00
17
94.44
U
M
1
5.56
18
100.00
U
TB
0
0.00
18
100.00
En l’absence de l’option SPARSE, les lignes correspondant aux sous-groupes d’effectif nul
(ex. : voitures allemandes notées M) n’auraient pas été listées.
Stockage du résultat dans une table SAS
Syntaxe
TABLES requête / OUT=nom_de_table OUTPCT ;
Les résultats de la procédure peuvent être stockés dans une table SAS. La table en sortie
contiendra une observation par croisement des modalités des différentes variables. Les
variables présentes dans cette table, outre les variables origine de la demande TABLES
sont :
COUNT, l’effectif
et PERCENT, le pourcentage par rapport à l’ensemble des observations.
De plus, si l’option OUTPCT est activée, les variables suivantes sont conservées :
PCT_COL : pourcentage colonne
PCT_ROW : pourcentage ligne
PCT_TABL : pourcentage par rapport à l’ensemble de la table de dimension 2 (cas
des tables de dimension>2).
De la même manière l’option OUTEXPECT permet d’inclure les effectifs théoriques.
En outre, si une instruction BY est activée, les variables correspondantes seront ajoutées à
la table de sortie.
Tous les autres éléments obtenus par une PROC FREQ, notamment tous les indicateurs
statistiques peuvent être sauvegardés dans une autre table SAS, par l’adjonction d’une
autre instruction :
OUTPUT OUT=nom_de_table <liste_de_statistiques_à_sauvegarder> ;
79
Les test d’indépendance
L’utilisation de l’option CHISQ permet de réaliser des tests d’indépendance. L’hypothèse
nulle testée est l’indépendance de deux variables.
Exemple : on va tester l’indépendance de l’origine des voitures et la qualité de la finition.
proc format;
value $ note
'B','TB'='B-TB'
;
run;
proc freq data=voiture order=internal;
table origine*finition/CHISQ;
format finition $note.;
run;
The FREQ Procedure
Statistics for Table of Origine by Finition
Statistic
DF
Value Prob
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
Chi-Square
5 8.0308 0.1545
Likelihood Ratio Chi-Square 5 9.8131 0.0807
Mantel-Haenszel Chi-Square 1 2.4445 0.1179
Phi Coefficient
0.6679
Contingency Coefficient
0.5554
Cramer's V
0.6679
WARNING: 100% of the cells have expected counts less
than 5. Chi-Square may not be a valid test.
Sample Size = 18
On a effectué l’analyse sur un échantillon très petit, aussi le test du Chi-2 n’est pas très
fiable. Cette réserve mise à part, le test du Chi-2 montre une probabilité d’accepter
l’hypothèse d’indépendance des deux variables de 15% (0,1545), ce qui est assez faible :
on peut rejeter cette hypothèse. Cette conclusion est corroborée par les valeurs des trois
derniers coefficients, phi, contingence et V de Cramer : pour ce dernier, par exemple, la
liaison observée correspond à 67% à une liaison parfaite entre les deux variables.
5. 4. La procédure MEANS : analyser la distribution de variables quantitatives (calcul de
statistiques simples)
PROC MEANS permet d’analyser la distribution d’une variable numérique sur une
population donnée. Cette procédure pourra notamment servir à :
• calculer la somme de la variable ;
• calculer la moyenne et la médiane ;
• calculer l’écart-type, l’étendue et l’intervalle inter quantiles (caractéristiques de
dispersion) ;
• étudier la répartition de la variable (médiane, quartiles d’ordre 1 et 3, centiles d’ordre 1, 5,
10, 25, 50, 75, 90, 95, 99) ;
• étudier la forme de la distribution (coefficients d’aplatissement et d’asymétrie) ;
• identifier les valeurs extrêmes de la variable.
80
Syntaxe :
PROC MEANS <DATA=nom_de_table STAT1…STATm <liste d’options> ;
CLASS liste_de_variables ;
VAR liste_de_variables_numériques ;
BY liste_de_variables ;
FREQ variable ;
WEIGHT variable ;
ID variable;
OUTPUT OUT=nom_de_table;
Seule l’instruction VAR est obligatoire. Si on ne précise aucune option ni instruction
spécifique, la procédure MEANS va calculer par défaut, pour chaque variable numérique :
• le nombre d’observations renseignées (N) ;
• la moyenne (Mean) ;
• l’écart-type (Std Dev) ;
• le minimum ;
• le maximum.
Sinon, on précise sur la première ligne (STAT1…STATm) les statistiques descriptives à
calculer.
Exemple : comparaison des sorties obtenues avec CLASS et BY, lorsque l’on veut calculer
la moyenne du PNB par tête des pays en fonction du régime politique.
Avec l’instruction CLASS :
proc means data=pays.russet mean;
var gnpr;
class demo;
run;
The MEANS Procedure
Analysis Variable : Gnpr
Nb
Demo obs.
Moyenne
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
1 15
1055.00
2
11
490.2727273
3 21 241.2857143
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
Avec l’instruction BY :
proc sort data=pays.russet;
by demo;
run;
proc means mean;
var gnpr;
by demo;
run;
81
---------- Demo=1 --------The MEANS Procedure
Analysis Variable : Gnpr
Moyenne
ƒƒƒƒƒƒƒƒƒƒƒƒ
1055.00
ƒƒƒƒƒƒƒƒƒƒƒƒ
---------- Demo=2 --------Analysis Variable : Gnpr
Moyenne
ƒƒƒƒƒƒƒƒƒƒƒƒ
490.2727273
ƒƒƒƒƒƒƒƒƒƒƒƒ
---------- Demo=3 --------Analysis Variable : Gnpr
Moyenne
ƒƒƒƒƒƒƒƒƒƒƒƒ
241.2857143
ƒƒƒƒƒƒƒƒƒƒƒƒ
Choix de croisements des variables de classes
La présence de l’instruction CLASS avec plusieurs variables construit des groupes
correspondant au croisement de toutes les variables citées dans cette instruction. Avec
l’instruction TYPES, on peut préciser les croisements voulus. Les combinaisons se
spécifient avec le nom d’une variable de l’instruction CLASS, éventuellement séparée de
celle avec laquelle elle est croisée par un astérisque (*). Le niveau le plus agrégé, n’utilisant
aucune variable de l’instruction CLASS, se note ().
Exemple : on souhaite obtenir la moyenne des cylindrées et de la puissance de 18 voitures
sur les deux combinaisons origine*tranche_de_prix et origine*finition.
proc means data=voiture mean;
class origine finition tranche_prix;
types origine*finition origine*tranche_prix ();
var cylindree puissance;
run;
The MEANS Procedure
N
Obs Variable
Mean
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
18 Cylindree
1631.67
Puissance 84.6111111
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
82
N
Origine Tranche_prix Obs Variable
Mean
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
D
1 1 Cylindree
1979.00
Puissance 100.0000000
F
2
2 Cylindree
Puissance
1790.50
91.5000000
1
4 Cylindree
Puissance
1469.25
65.2500000
2
2 Cylindree
Puissance
2053.00
104.0000000
GB
2
I
J
1
1 Cylindree
Puissance
1350.00
79.0000000
2
3 Cylindree
Puissance
1484.00
96.3333333
1
2 Cylindree
1467.50
Puissance 69.0000000
1 Cylindree
1998.00
Puissance 115.0000000
2
U
1 Cylindree
1798.00
Puissance 82.0000000
1
1 Cylindree
1294.00
Puissance 68.0000000
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
N
Origine Finition Obs Variable
Mean
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
D
B
2 Cylindree
1986.00
Puissance 99.0000000
F
TB
1 Cylindree
1588.00
Puissance 85.0000000
B
2 Cylindree
1680.50
Puissance 67.0000000
M
2 Cylindree
1258.00
Puissance 63.5000000
TB
2 Cylindree
2053.00
Puissance 104.0000000
B
1 Cylindree
1798.00
Puissance 82.0000000
GB
I
B
2 Cylindree
1467.50
Puissance 88.5000000
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
83
Le traitement des valeurs manquantes
Les valeurs manquantes d’une variable d’analyse sont toujours exclues des calculs.
Concernant les variables de classes, les observations ayant des valeurs manquantes sont
gardées dans l’analyse si l’on utilise l’instruction BY. Si l’on utilise CLASS, SAS ne prend
pas en compte par défaut le groupe constitué des valeurs manquantes de la variable de
classe ; l’option MISSING dans l’instruction PROC MEANS permet de considérer que dans
une variable de l’instruction CLASS, la valeur manquante définit un groupe à part entière.
Autres instructions
VAR :
BY :
WEIGHT :
OUTPUT :
ID :
variables (numériques) pour lesquelles on sollicite la procédure
la procédure s’exécute pour chaque groupe d’observation
variable de pondération
permet de stocker les résultats dans une table
la valeur maximum de la variable mentionnée, au niveau de chaque groupe
défini par l’instruction CLASS, sera conservée dans la table de sortie.
Options
DESCENDING :
NOPRINT :
IDMIN :
VARDEF :
DF :
N:
WDF :
WEIGHT :
ALPHA :
inverse l’ordre des observations dans la table en sortie
empêche PROC MEANS de produire un état dans la fenêtre OUTPUT.
pour retenir la valeur minimum de la variable ID au lieu de son maximum.
diviseur calculé pour les variances et les covariances
degrés de liberté (n-1)
nombre d’observations
somme des poids – 1 (variance corrigée – estimateur non biaisé)
somme des poids.
seuil pour les intervalles de confiance.
PROC MEANS peut également calculer d’autres statistiques, parmi lesquelles :
KURTOSIS :
coefficient de KURTOSIS (compare la forme de la courbe de distribution
des observations à celle de la loi normale : un coefficient positif indique une
plus forte concentration des observations ; un coefficient négatif indique
une courbe plus « aplatie »).
PRT :
probabilité de nullité de la moyenne (test de Student)
RANGE :
étendue
SKEWNESS : coefficient de symétrie (indique sur les observations sont réparties
équitablement autour de la moyenne (le coefficient est alors nul) ou si elles
sont plutôt concentrées vers les valeurs les plus faibles (coefficient positif)
ou vers les valeurs les plus élevées (coefficient négatif).
SUM :
somme
T:
valeur de Student
VAR :
variance
La création d’une table SAS de résultats
Tous les résultats issus de la PROC MEANS peuvent être sauvegardés dans une table.
Alors qu’à l’écran ne sont affichées que les statistiques au niveau le plus fin, toutes les
statistiques au niveau agrégé sont conservées dans la table de sortie.
Syntaxe :
OUTPUT OUT=nom_de_table <statistiques_à_conserver> / <AUTONAME>
OUT= : nom de la table créée
Statistiques : statistiques à conserver.
Il existe trois formes de demandes statistiques :
statistique=
calculera les statistiques décrites plus haut pour les variables précisées dans VAR= et
donne les mêmes noms aux variables en sortie que les variables en entrée. Une seule
statistique peut être sauvegardée par ce biais.
84
statistique=nom1…nomn
calcule les statistiques sur toutes les variables de VAR mais les stocke sous un nom
différent. Les noms de la liste sont attribués dans l’ordre des variables de VAR.
statistique(var1…varn)=nom1…nomn
applique les statistiques à un sous-ensemble des variables de VAR.
L’option AUTONAME construit automatiquement les noms des variables.
La table SAS créée par l’instruction OUTPUT contient systématiquement deux variables :
_TYPE_ et _FREQ_. _FREQ_ contient le nombre d’observations renseignées ayant servi
au calcul des statistiques énumérées à cette ligne de la table en sortie. La variable _TYPE_
représente le niveau auquel se trouve chaque information et permet de savoir si une
variable est agrégée à ce niveau.
Exemple dans le cas de 3 variables :
CLASS A B C :
A
niveau agrégé
niveau agrégé
niveau agrégé
niveau agrégé
niveau détaillé
niveau détaillé
niveau détaillé
niveau détaillé
B
niveau agrégé
niveau agrégé
niveau détaillé
niveau détaillé
niveau agrégé
niveau agrégé
niveau détaillé
niveau détaillé
C
niveau agrégé
niveau détaillé
niveau agrégé
niveau détaillé
niveau agrégé
niveau détaillé
niveau agrégé
niveau détaillé
_TYPE_
0
1
2
3
4
5
6
7
Exemple : on calcule la moyenne et la variance des variables gini, famr et gnpr.
proc means data=pays.russet noprint;
class demo;
var gini farm gnpr;
output out=m_russet
mean=
var= / autoname;
run;
Exercice 12 : établissez la table m_russet suivante en créant les variables à partir de
l’instruction :
statistique=nom1…nomn,
puis de l’instruction statistique(var1…varn)=nom1…nomn.
On peut enfin combiner le choix du nom de certaines variables et l’attribution automatique
des noms.
85
Exemple
proc means data=a.pays noprint;
class demo;
var gini farm gnpr;
output out=m_russet
mean=
var(gini farm gnpr)=v_gini v_farm v_gnpr / autoname;
run;
5. 5. La procédure UNIVARIATE : analyser la distribution de variables quantitatives
(analyse en détail d’une variable)
Cette procédure calcule des statistiques simples sur des variables numériques. Plus
complète que la procédure MEANS, elle fournit :
•
des détails sur les valeurs extrêmes d’une variable
•
le calcul de n’importe quel quantile de la distribution
•
plus de tests : 2 tests pour l’égalité de la moyenne à une constante donnée, 1 pour le
même test avec la médiane, 4 pour la normalité de la distribution… ;
•
la création de graphiques pour étudier la distribution (box-plot, stem-and-leaf,
histogrammes, courbes de densité).
Syntaxe :
PROC UNIVARIATE DATA=nom_de_table_SAS <options> ;
VAR liste_de_variables ;
ID variable ;
HISTOGRAM liste_de_variables / <options> ;
PROBLPLOT liste_de_variables / <options> ;
RUN ;
VAR
spécifie les variables numériques à analyser. Si l’instruction VAR est omise,
toutes les variables numériques de la table en entrée sont analysées.
ID
variable d’identification pour les 5 plus petites et 5 plus grandes valeurs en
sortie.
HISTOGRAM trace un histogramme pour les variables spécifiées.
PROBPLOT trace la distribution des variables, en la comparant à une distribution
théorique spécifiée par l’utilisateur.
La procédure UNIVARIATE fournit par défaut une large gamme de statistiques descriptives
classées par thème.
Exemple :
proc univariate data=demography;
var pop_1996;
id country;
run;
86
The UNIVARIATE Procedure
Variable: Pop_1996 (Pop_1996)
Moments
N
150 Sum Weights
150
Mean
38.3126667 Sum Observations
5746.9
Std Deviation 129.595069 Variance
16794.8818
Skewness
7.7041216 Kurtosis
64.0665621
Uncorrected SS 2722616.45 Corrected SS
2502437.39
Coeff Variation 338.256456 Std Error Mean
10.581393
Le premier tableau, intitulé “Moments” donne plusieurs moments empiriques de la variable
étudiée. On y reconnaît la somme, la moyenne, l’écart-type, la variance ainsi que le
coefficient de variation de la variable. Les coefficients de forme (skewness et kurtosis) sont
également indiqués.
Basic Statistical Measures
Location
Variability
Mean 38.31267 Std Deviation
129.59507
Median 9.80000 Variance
16795
Mode 1.10000 Range
1231
Interquartile Range 19.60000
NOTE: The mode displayed is the smallest of 2 modes with a count of 4.
Le deuxième tableau présente les statistiques descriptives les plus usuelles : à gauche, des
indicateurs de tendance centrale (moyenne, médiane, mode) ; et à droite, des indicateurs
de dispersion (écart-type, variance, étendue et intervalle inter-quartile).
Tests for Location: Mu0=0
Test
-Statistic- -----p Value------
Student's t t 3.620758 Pr > |t| 0.0004
Sign
M
75 Pr >= |M| <.0001
Signed Rank S 5662.5 Pr >= |S| <.0001
Le troisième tableau contient des éléments permettant de réaliser deux tests de nullité de la
moyenne (Student : test de Student et Signed Rank : test des rangs signés de Wilcoxon) et
un test de nullité de la médiane (Sign : test des signes). Dans la colonne de gauche, SAS
édite les statistiques caractéristiques de chaque test, et à droite, les probabilités d’accepter
l’hypothèse de nullité.
Les trois probabilités (p Value) sont inférieures à 0,0001. On en conclut que la moyenne et
la médiane des populations sont significativement non nulles (l’intérêt d’une telle information
est limitée), car on peut rejeter l’hypothèse de nullité avec une très forte probabilité (1-p
value).
Il est possible de remplacer la valeur MuO=0 prise par défaut pour ces tests par une valeur
réelle quelconque grâce à l’option Mu0=valeur. On écrirait par exemple :
proc univariate data=demography MU0=38;
var pop_1996;
id country;
run;
87
Quantiles (Definition 5)
Quantile
Estimate
100% Max
1232.1
99%
944.6
95%
125.4
90%
66.3
75% Q3
23.9
50% Median
9.8
25% Q1
4.3
10%
2.3
5%
1.6
1%
1.1
0% Min
1.1
Le quatrième tableau fournit l’estimation de plusieurs quantiles (quartiles, déciles et centiles)
de la distribution de la variable étudiée.
Extreme Observations
-------------Lowest------------
-------------Highest-------------
Value Country
Value Country
1.1
1.1
1.1
1.1
1.3
Obs
Mauritius
134
161.1 Brazil
59
Guinea-Bissau
126
200.4 Indonesia
Gambia
123
269.4 U.S.A.
80
Gabon
122
944.6 India
87
Trinidad
76
1232.1 China
15
Obs
100
Le cinquième tableau fournit une liste qui permet d’identifier les 10 observations extrêmes
de la variable étudiée.
Quelques précisions sur le premier tableau
N
Mean
Std Deviation
Skewness
nombre d’observations
moyenne
écart-type
coefficient d’asymétrie
Si le coefficient d’asymétrie est proche de 0, la distribution est symétrique.
Si le coefficient d’asymétrie est supérieur à 0, les observations sont
concentrées à gauche (la moyenne est inférieure à la médiane). On a un
histogramme de la forme :
F
100
r
e
Si le coefficient
q d’asymétrie est inférieur à 0, les observations sont
concentrées à droite (la moyenne est supérieure à la médiane). On a un
histogramme de la forme :
u
e
50
n
88
c
y
40
F
r
e
q est inférieur à -1 ou supérieure à 1, on a une distribution
Si le coefficient
très asymétrique.
u
20
Uncorrected SS Somme des carrés non
corrigés : Σ x _
Coeff variation
(écart-type)
e/ moyenne
Kurtosis
Permet de comparer l’étalement d’une distribution par rapport à la loi
normale. Le
ncoefficient est proche de 0 si on a une distribution proche de
la loi normale. Si la distribution est plus concentrée autour de la moyenne,
le coefficient est négatif. Si la distribution est plus étalée, le coefficient est
c
positif.
Corrected SS
Somme des carrés corrigés : Σ (x – m)_
y
Std Error Mean (écart-type) / √(n)
i
i
Quelques précisions sur le deuxième tableau
Mode
Range
Interquartile range
0
Valeur la plus fréquente. Si on ne retrouve pas plusieurs fois la même
valeur, on prend la plus petite.
Différence entre la plus grande et la plus petite valeur
Différence entre Q3 et Q1 (dans l’exemple ci-dessous, Q3-Q1=41)
33
39
45 51 57 6
Life_expect_1
Option PLOT
SI on précise l’option plot, on obtient 3 sortes de graphiques : un diagramme stem-and-leaf,
une boîte à moustaches (box and wilker plot), et un diagramme de normalité (normal
probability plot).
Le diagramme stem-and-leaf
Il s’agit d’un histogramme qui fournit certaines informations sur les valeurs numériques des
données.
Par exemple, supposons qu’on ait les valeurs suivantes :
14 20 39 58 60 63 65 66 68 70 70 71 73 74 75 75 76 76 77 77 79 79 80 80
81 82 83 84 87 87 88 89 90 91 93 93 98
89
On va obtenir le diagramme suivant :
9
01338
8
0012347799
7
0013455667799
6
03568
5
8
4
3
9
2
0
1
4
On a ainsi la forme de la distribution ainsi que les valeurs des données. Dans l’exemple
précédent, la première colonne correspond à la dizaine et les valeurs de la deuxième
colonne à l’unité.
Le diagramme à moustaches
Le diagramme à moustaches fournit des informations sur la variabilité des données et sur
les valeurs extrêmes.
Dans l’exemple ci-dessus, la médiane est égale à 18,3.
Q1 est égal à 8,8. 25% des observations prennent une valeur inférieure à Q1.
Q3 est égal à 29,5. 75% des observations ont une valeur inférieure à Q3.
L’écart interquartile est égal à Q=Q3-Q1=20,7.
La limite supérieure de la boîte à moustache est égale à Q3+1,5Q = 60,5. La limite
inférieure de la boîte à moustache est égale à Q3-1,5Q = -22,2. On a donc deux valeurs
« aberrantes » : 62,3 et 75,0.
La courbe de normalité
Exemple : on trace la courbe de normalité de la variable rent.
proc univariate data=a.pays plot;
var rent;
id pays;
probplot rent/normal (mu=est
sigma=est
color=blue
w=1);
run;
Sorties partielles obtenues par l’option PLOT :
90
Stem Leaf
#
Boxplot
75
1
0
7
6
62
1
0
5
5 334
3
|
4
|
4 044
3
|
3 57
2
|
33
1
|
26
1
+-----+
2 0001124
7
| + |
1 55778999
8
*-----*
1 12223
5
| |
0 567889
6
+-----+
0 002234
6
|
----+----+----+----+
Multiply Stem.Leaf by 10**+1
Le premier graphique est le stem and leaf qui reprend la distribution des valeurs de la
variable rent. Pour passer des valeurs du stem-and-leaf plot aux valeurs de l’échantillon, il
1
suffit de multiplier les valeurs du diagramme par 10 (10 ). Ainsi, une seule observation à
ème
une valeur de l’ordre de 75. A la 6
ligne, on lit que 3 observations ont les valeurs
respectives 53, 53 et 54.
La boîte à moustache indique que la moyenne est supérieure à la médiane et que la
distribution de cette variable est très étirée vers les valeurs basses.
On obtient également la courbe de normalité suivante :
The UNIVARIATE Procedure
Variable: Rent
Normal Probability Plot
77.5+
*
|
|
+
62.5+
* +++
|
+++
|
** *++
47.5+
++
|
***++
|
+*+
32.5+
++**
|
+++ *
|
++*****
17.5+
+****
|
****
|
*****
2.5+ * * * **+*+
+----+----+----+----+----+----+----+----+----+----+
-2
-1
0
+1
+2
Les signes + indiquent les valeurs attendues d’une distribution normale. Les astérisques
représentent les valeurs observées.
91
Les courbes de normalité permettent de vérifier visuellement que les données suivent une
distribution approximativement normale. L’axe vertical représente les données réelles et
l’axe horizontal les percentiles attendus d’une distribution normale. Les diagrammes
suivants illustrent les courbes types que l’on peut obtenir :
1. les données suivent une distribution normale
2. les données sont concentrées à gauche
3. les données sont concentrées à droite
4. la distribution est plus étalée qu’une distribution normale
5. la distribution est plus concentrée qu’une distribution normale.
Avec l’instruction PROBPLOT, on peut obtenir un graphique plus précis qui sera affiché
dans une fenêtre graphique :
Ce graphique met en évidence une concentration à gauche des observations.
Avec PROBPLOT, on peut tracer avec SAS Graph une courbe qui compare les valeurs
observées de la variable avec les percentiles d’une distribution théorique spécifiée. Si on
spécifie normal, on obtient le tracé d’une ligne de référence correspondant à la distribution
normale (estimée avec les paramètres mu – moyenne - et sigma – écart-type – des valeurs
observées). Dans l’exemple précédent, cette ligne de référence est tracée en bleu avec une
épaisseur de trait de 2.
HISTOGRAM trace un histogramme avec SAS Graph, auquel on peut superposer la courbe
de densité d’une loi normale de mêmes moyenne et variance.
92
Test de normalité
SAS permet de réaliser quatre tests de normalité d’une distribution : les tests de ShapiroWilk, Kolmogorov-Smirnov, Cramer-von Mises et Anderson-Darling.
La statistique de test de Shapiro-Wilk (W) est comprise entre 0 et 1 et une valeur faible
conduit à rejeter l’hypothèse de normalité. A l’inverse, pour les statistiques des tests de
Kolmogorov-Smirnov (D), Cramer-von Mises (W-sq) et Anderson-Darling (A-sq), une valeur
élevée conduit à rejeter l’hypothèse de normalité.
Il est conseillé d’interpréter les tests de Kolmogorov-Smirnov, Cramer-von Mises et
Anderson-Darling lorsque le nombre d’observations renseignées est supérieur à 2000.
Pour obtenir les résultats des quatre tests de normalité, il suffit d’utiliser l’option NORMAL
dans l’instruction PROC UNIVARIATE.
PROC UNIVARIATE DATA=tableSAS NORMAL ;
VAR variable ;
RUN ;
5. 6. La procédure CORR : calculer des coefficients de corrélation
PROC CORR permet le calcul des coefficients de corrélation entre les variables (de
PEARSON, de SPEARMAN, de KENDALL ou de HOEFFDING) et peut produire des
matrices de produits croisés ainsi que des matrices de variance-covariance. PROC CORR
calcule aussi des statistiques univariées simples et crée de nouveaux tableaux contenant
ces statistiques univariées et les corrélations. Elle permet enfin de calculer des coefficients
de corrélation partiels entre un couple de variables en éliminant l’influence d’une liste de
variables.
De plus, à partir de la version 9 de SAS, cette procédure peut produire des graphiques de
type « nuages de points » sans nécessité d’utiliser la procédure GPLOT.
Syntaxe :
PROC CORR DATA=nom_de_table <liste d’options> ;
BY liste_de_variables ;
FREQ variable ;
PARTIAL liste_de_variables ;
VAR liste_de_variables ;
WEIGHT variable ;
WITH liste_de_variables ;
BY :
la procédure est exécutée pour chaque sous groupe.
PARTIAL : permet de mesurer les corrélations partielles entre les combinaisons 2 à 2
d’une liste de variables numériques (instruction VAR) en éliminant l’influence
des variables de l’instruction PARTIAL.
VAR :
variables pour lesquelles les coefficients sont calculés.
WITH :
utilisé pour obtenir les corrélations uniquement pour certaines combinaisons de
variables. Indiquer dans l’instruction WITH les variables dont on veut les
corrélations avec les variables de VAR.
WEIGHT : variable de pondération. A utiliser uniquement pour le calcul du coefficient de
Pearson.
FREQ :
spécifie la variable numérique dont la valeur représente la fréquence de
l’observation.
Quelques options disponibles :
KENDALL : sélection du type de corrélation KENDALL (pour les variables ordinales).
PEARSON : sélection du type de corrélation PEARSON (par défaut) (pour les variables
métriques).
SPEARMAN : sélection du type de corrélation SPEARMAN (pour les variables ordinales).
OUTP =:
stockage des résultats dans un tableau de TYPE CORR. Il contient les
moyennes, écarts-types, nombre d’observations et corrélations.
OUTS= :
idem avec les corrélations de SPEARMAN.
93
OUTK :
NOMISS :
VARDEF :
COV :
NOSIMPLE :
idem avec les corrélations de KENDALL.
exclusion des observations à valeur manquante de tous les calculs.
spécifie le diviseur utilisé pour les variances.
impression de la matrice de variances covariances.
supprime l’édition des statistiques univariées.
Exemple
proc corr data=voiture;
var cylindree puissance;
run;
The CORR Procedure
2 Variables: Cylindree Puissance
Simple Statistics
Variable
N
Mean
Cylindree
Puissance
18
18
1632 373.92985
84.61111 20.37628
Std Dev
Sum
29370
1523
Minimum
Maximum Label
1166
2664 Cylindrée
55.00000 128.00000 Puissance
Pearson Correlation Coefficients, N = 18
Prob > |r| under H0: Rho=0
Cylindree
Cylindree
Cylindrée
Puissance
Puissance
Puissance
1.00000
0.79663
<.0001
0.79663
<.0001
1.00000
On a d’abord la liste des variables d’analyse, puis des statistiques descriptives usuelles
pour chaque variable utilisée. Ensuite, SAS édite dans chaque case hors diagonale le
coefficient de corrélation, et édite en dessous la probabilité de rejeter l’hypothèse de nullité
du coefficient de corrélation. Ici, la probabilité est inférieure à 0.0001, on peut donc conclure
sur l’existence d’une corrélation linéaire entre les deux variables.
5. 7. La procédure TTEST : test de comparaison d’échantillons
Pour réaliser des tests d’égalité de la variance et de la moyenne de deux échantillons, on
peut utiliser la procédure TTEST. On peut obtenir des résultats comparables avec la
procédure NPAR1WAY si l’on travaille sur de petits échantillons, en utilisant alors des
statistiques dites non-paramétriques.
Syntaxe :
PROC TTEST DATA=tableSAS ;
VAR variable(s)Numérique(s) ;
CLASS variableDeClasse ;
RUN ;
La procédure TTEST va réaliser un test d’égalité des moyennes de deux échantillons.
L’instruction VAR permet de citer les variables dont les moyennes seront comparées.
L’instruction CLASS permet de spécifier une variable dont les valeurs constituent les
groupes d’observations à comparer. Cette variable ne doit avoir que deux valeurs.
94
Exemple : on veut tester la différence des PIB (Gnpr) entre démocraties et dictatures :
proc format;
value $ regim
'1','2'='Democratie'
'3'='Dictature'
;
run;
proc ttest data=pays.russet;
var gnpr;
class demo;
format demo $regim.;
run;
Les résultats commencent par des statistiques descriptives par groupe sur la variable gini.
On y retrouve la moyenne avec un intervalle de confiance à 95% (LOWER CL et UPPER CL
pour MEANS) et l’écart-type (STD DEV) avec son intervalle de confiance, ainsi que le
minimum, le maximum et l’effectif de chaque groupe.
The TTEST Procedure
Statistics
Variable Demo
Gnpr
Gnpr
Gnpr
Lower CL
Upper CL Lower CL
Upper CL
N
Mean Mean
Mean Std Dev Std Dev
Std Dev Std Err Minimum Maximum
Democratie
26
606.6 816.08 1025.6 406.74 518.63 715.92 101.71
Dictature
21 171.28 241.29 311.29 117.66 153.79 222.09 33.561
Diff (1-2)
338.46 574.79 811.12 331.72 399.93 503.72 117.34
72
66
2343
762
T-Tests
Variable Method
Gnpr
Gnpr
Variances
DF t Value Pr > |t|
Pooled
Equal
45
4.90 <.0001
Satterthwaite Unequal 30.3
5.37 <.0001
Equality of Variances
Variable Method
Num DF Den DF F Value Pr > F
Gnpr
25
Folded F
20
11.37 <.0001
La procédure TTEST fournit les résultats d’un test d’égalité des moyennes sous deux
hypothèses : variances égales (equal) et variances différentes (unequal). La lecture des
sorties commence par le dernier tableau, qui correspond à un test d’égalité des variances.
Si la colonne PR>F de ce tableau contient un nombre inférieur au risque accepté
(généralement 5%), alors on rejette l’hypothèse de variances égales, et on lira, dans l’avantdernier tableau (intitulé T-Tests), la ligne UNEQUAL (c’est notre cas). Si le nombre est
supérieur à 0,05, alors la ligne à lire est EQUAL.
Le seuil de significativité du test de Student d’égalité des moyennes est inférieur à 1%. Au
seuil 1%, les PIB ne sont pas significativement égaux en moyenne.
95
5. 8. La procédure STANDARD : réduction de variables quantitatives
PROC STANDARD permet de réduire ou « standardiser » les variables quantitatives.
Syntaxe :
PROC STANDARD <liste d’options> ;
BY <descending> liste_de_variables ;
VAR liste_de_variables ;
WEIGHT variables ;
BY :
suivi du nom d’une variable qualitative indique que les statistiques sont
calculées par groupe d’observations ; la table doit être préalablement triée.
VAR :
variables standardisées et recopiées dans la table de sortie (instruction OUT=).
Par défaut, toutes les variables numériques sont traitées.
WEIGHT : nom de la variable contenant les pondérations des observations.
5. 9. La procédure TRANSPOSE : transposition des matrices
PROC TRANSPOSE lit tout ou partie d’une table SAS et la recopie après transposition : les
lignes deviennent des colonnes et les colonnes des lignes. Une nouvelle variable _name_
contient alors, en sortie, les noms des variables transposées qui désignent maintenant les
observations.
Syntaxe :
PROC TRANSPOSE<liste d’options> ;
VAR liste_de_variables ;
COPY liste_de_variables ;
BY liste_de_variables ;
BY :
COPY :
VAR :
une observation est créée pour chaque variable transposée et pour chaque
groupe ; la variable de groupe est incluse en sortie mais non transposée. La table
doit être préalablement triée.
les variables de la liste sont recopiées dans la table de sortie sans transposition.
les variables de la sliste sont transposées et recopiées dans la table de sortie ;
par défaut, toutes les variables numériques sont traitées.
Options principales :
OUT =
TABLE SAS spécifie le nom de la tables créée
NAME = spécifie le nom de la variable créée qui contiendra les noms des anciennes
variables pour désigner les observations (par défaut _name_).
96
5. 10. La procédure IML : le langage matriciel
SAS IML est un module spécialisé interprétant un langage de calcul matriciel.
L’objet de base de manipulation du langage est une matrice, un tableau bidimensionnel
(nrow X ncolumn) de valeurs numériques ou de caractères. Une table SAS peut être lue
dans une matrice ou, inversement, créée à partir d’une matrice.
SAS IML est une procédure SAS commençant par l’instruction PROC IML et se terminant
par QUIT.
5.10. 1. Lire les colonnes d’une table SAS et les mettre en matrice
Syntaxe :
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;
5.10. 2. Créer une table SAS à partir d’une 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;
5.10. 3. Définir un vecteur colonne ou une matrice
Pour définir un vecteur colonne au cours d’une procédure IML :
X={1 2 3} ;
Pour définir 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) ;
97
5.10. 4. Les fonctions matricielles
La fonction j(n1,n2,val) peut être utilisée pour créer une matrice de n1 lignes et n2
colonnes dont tous les éléments prennent la valeur val :
A=j(1,5,1)
crée un vecteur ligne de 5 colonnes prenant la valeur 1.
Pour créer la matrice identité, on utilise la fonction I :
Ident=I(4)
crée une matrice identité 4X4.
La fonction DIAG permet de créer une matrice diagonale dont les éléments sont les
termes diagonaux de la matrice argument. Les éléments hors de la diagonale sont
nuls.
La fonction VECDIAG permet de créer un vecteur dont les éléments sont les
éléments diagonaux de la matrice argument.
Le calcul des vecteurs et des valeurs propres d’une matrice s’effectue à partir des
fonctions EIGVEC et EIGVAL.
La fonction EIGVAL retourne le vecteur colonne des valeurs propres, triées
dans leur ordre décroissant.
La fonction EIGVEC retourne la matrice des vecteurs propres.
La fonction TRACE retourne la trace de la matrice.
La fonction DET calcule le déterminant d’une matrice.
L’inverse d’une matrice peut être utilisée à partir de la fonction INV :
Y=INV(X)
Le calcul d’une puissance α d’une matrice s’effectue à partir de l’opérateur ** :
Y=X**α
98
5.10. 4. Inversion des matrices
Les résultats obtenus par la fonction INV ne sont pas toujours très stables. Ils ne le
sont pas non plus lorsque l’on calcule une puissance négative d’une matrice.
C’est pourquoi il est préférable de procéder à la diagonalisation de la matrice X
(X=ULU` => Xα= ULαU`, avec _ négatif)
selon les étapes ci-dessous :
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 ;
DATA nom_de_table2 ;
SET nom_de_table2(KEEP=COL1-COL3) ;
COL1=COL1**α ;
COL2=COL2**α ;
COL3=COL3**α ;
RUN ;
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;
99
Annexe 1 : formats disponibles sous SAS
Character
DBCS
Date and
Time
$ASCIIw.
Converts native format character data to ASCII representation
$BINARYw.
Converts character data to binary representation
$CHARw.
Writes standard character data
$EBCDICw.
Converts native format character data to EBCDIC representation
$HEXw.
Converts character data to hexadecimal representation
$MSGCASEw.
Writes character data in uppercase when the MSGCASE system
option is in effect
$OCTALw.
Converts character data to octal representation
$QUOTEw.
Writes data values that are enclosed in double quotation marks
$REVERJw.
Writes character data in reverse order and preserves blanks
$REVERSw.
Writes character data in reverse order and left aligns
$UPCASEw.
Converts character data to uppercase
$VARYINGw.
Writes character data of varying length
$w.
Writes standard character data
$KANJIw.
Adds shift-code data to DBCS data
$KANJIXw.
Removes shift code data from DBCS data
DATEw.
Writes date values in the form ddmmmyy or ddmmmyyyy
DATEAMPMw.d
Writes datetime values in the form ddmmmyy:hh:mm:ss.ss with
AM or PM
DATETIMEw.d
Writes datetime values in the form ddmmmyy:hh:mm:ss.ss
DAYw.
Writes date values as the day of the month
DDMMYYw.
Writes date values in the form ddmmyy or ddmmyyyy
DDMMYYxw.
Writes date values in the form ddmmyy or ddmmyyyy with a
specified separator
DOWNAMEw.
Writes date values as the name of the day of the week
EURDFDDw.
Writes international date values in the form dd.mm.yy or
dd.mm.yyyy
EURDFDEw.
Writes international date values in the form ddmmmyy or
ddmmmyyyy
EURDFDNw.
Writes international date values as the day of the week
100
Date and
Time
EURDFDTw.d
Writes international datetime values in the form
ddmmmyy:hh:mm:ss.ss or ddmmmyyyy hh:mm:ss.ss
EURDFDWNw.
Writes international date values as the name of the day
EURDFMNw.
Writes international date values as the name of the month
EURDFMYw.
Writes international date values in the form mmmyy or mmmyyyy
EURDFWDXw.
Writes international date values as the name of the month, the day,
and the year in the form dd month-name yy (or yyyy )
EURDFWKXw.
Writes international date values as the name of the day and date in
the form day-of-week, dd month-name yy (or yyyy)
HHMMw.d
Writes time values as hours and minutes in the form hh:mm
HOURw.d
Writes time values as hours and decimal fractions of hours
JULDAYw.
Writes date values as the Julian day of the year
JULIANw.
Writes date values as Julian dates in the form yyddd or yyyyddd
MINGUOw.
Writes date values as Taiwanese dates in the form yyymmdd
MMDDYYw.
Writes date values in the form mmddyy or mmddyyyy
MMDDYYxw.
Writes date values in the form mmddyy or mmddyyyy with a
specified separator
MMSSw.d
Writes time values as the number of minutes and seconds since
midnight
MMYYxw.
Writes date values as the month and the year and separates them
with a character
MONNAMEw.
Writes date values as the name of the month
MONTHw.
Writes date values as the month of the year
MONYYw
Writes date values as the month and the year in the form mmmyy or
mmmyyyy
NENGOw.
Writes date values as Japanese dates in the form e.yymmdd
PDJULGw.
Writes packed Julian date values in the hexadecimal format
yyyydddF for IBM
PDJULIw.
Writes packed Julian date values in the hexadecimal format
ccyydddF for IBM
QTRw.
Writes date values as the quarter of the year
QTRRw.
Writes date values as the quarter of the year in Roman numerals
TIMEw.
Writes time values as hours, minutes, and seconds in the form
hh:mm:ss.ss
TIMEAMPMw.d
Writes time values as hours, minutes, and seconds in the form
hh:mm:ss.ss with AM or PM
TODw.d
Writes the time portion of datetime values in the form hh:mm:ss.ss
101
Date and
Time
Numeric
WEEKDATEw.
Writes date values as the day of the week and the date in the form
day-of-week, month-name dd, yy (or yyyy)
WEEKDATXw.
Writes date values as day of week and date in the form day-ofweek, dd month-name yy (or yyyy)
WEEKDAYw.
Writes date values as the day of the week
WORDDATEw.
Writes date values as the name of the month, the day, and the year
in the form month-name dd, yyyy
WORDDATXw.
Writes date values as the day, the name of the month, and the year
in the form dd month-name yyyy
YEARw.
Writes date values as the year
YYMMxw.
Writes date values as the year and month and separates them with a
character
YYMMDDw.
Writes date values in the form yymmdd or yyyymmdd
YYMMDDxw.
Writes date values in the form yymmdd or yyyymmdd with a
specified separator
YYMONw.
Writes date values as the year and the month abbreviation
YYQxw.
Writes date values as the year and the quarter and separates them
with a character
YYQRxw.
Writes date values as the year and the quarter in Roman numerals
and separates them with characters
BESTw.
SAS chooses the best notation
BINARYw.
Converts numeric values to binary representation
COMMAw.d
Writes numeric values with commas and decimal points
COMMAXw.d
Writes numeric values with periods and commas
Dw.s
Prints variables, possibly with a great range of values, lining up
decimal places for values of similar magnitude
DOLLARw.d
Writes numeric values with dollar signs, commas, and decimal points
DOLLARXw.d
Writes numeric values with dollar signs, periods, and commas
Ew.
Writes numeric values in scientific notation
FLOATw.d
Generates a native single-precision, floating-point value by
multiplying a number by 10 raised to the dth power
FRACTw.
Converts numeric values to fractions
HEXw.
Converts real binary (floating-point) values to hexadecimal
representation
IBw.d
Writes native integer binary (fixed-point) values, including negative
values
IBRw.d
Writes integer binary (fixed-point) values in Intel and DEC formats
102
Numeric
IEEEw.d
Generates an IEEE floating-point value by multiplying a number by
10 raised to the dth power
NEGPARENw.d
Writes negative numeric values in parentheses
NUMXw.d
Writes numeric values with a comma in place of the decimal point
OCTALw.
Converts numeric values to octal representation
PDw.
Writes data in packed decimal format
PERCENTw.d
Writes numeric values as percentages
PIBw.d
Writes positive integer binary (fixed-point) values
PIBRw.d
Writes positive integer binary (fixed-point) values in Intel and DEC
formats
PKw.d
Writes data in unsigned packed decimal format
PVALUEw.d
Writes p-values
RBw.d
Writes real binary data (floating-point) in real binary format
ROMANw.
Writes numeric values as Roman numerals
SSNw.
Writes Social Security numbers
S370FFw.d
Writes native standard numeric data in IBM mainframe format
S370FIBw.d
Writes integer binary (fixed-point) values, including negative values,
in IBM mainframe format
S370FIBUw.d
Writes unsigned integer binary (fixed-point) values in IBM mainframe
format
S370FPDw.
Writes packed decimal data in IBM mainframe format
S370FPDUw.
Writes unsigned packed decimal data in IBM mainframe format
S370FPIBw.d
Writes positive integer binary (fixed-point) values in IBM mainframe
format
S370FRBw.d
Writes real binary (floating-point) data in IBM mainframe format
S370FZDw.d
Writes zoned decimal data in IBM mainframe format
S370FZDLw.d
Writes zoned decimal leading sign data in IBM mainframe format
S370FZDSw.d
Writes zoned decimal separate leading-sign data in IBM mainframe
format
S370FZDTw.d
Writes zoned decimal separate trailing-sign data in IBM mainframe
format
S370FZDUw.d
Writes unsigned zoned decimal data in IBM mainframe format
w.d
Writes standard numeric data one digit per byte
WORDFw.
Writes numeric values as words with fractions that are shown
numerically
103
Numeric
WORDSw.
Writes numeric values as words
YENw.d
Writes numeric values with yen signs, commas, and decimal points
Zw.d
Writes standard numeric data with leading 0s
ZDw.d
Writes numeric data in zoned decimal format
104
Annexe 2 : quelques procédures pour les statistiques
Toutes ne sont pas rattachées au module SAS/STAT :
•
•
•
•
•
PRINT, MEANS, SUMMARY, FREQ, CORR, UNIVARIATE sont dans SAS/Base,
ARIMA, SPECTRA et FORECAST sont dans SAS/ETS,
HPF dans le module SAS/HPF,
IML dans le module SAS/IML,
GPLOT, GCHART et GBARLINE sont dans SAS/GRAPH.
Catégorie
Procédure
PRINT
Statistique
descriptive
Vu en
cours / TP
Cours / TP
MEANS /
SUMMARY
Cours / TP
FREQ
Cours / TP
TABULATE
Cours / TP
REPORT
/
UNIVARIATE
Cours / TP
FREQ
Cours / TP
CORR
UNIVARIATE
Cours / TP
Cours / TP
TTEST / GLM
Cours
NPAR1WAY
/
Tests statistiques
Rôle
Liste les données avec des totaux et des sous-totaux.
Calcule des statistiques descriptives (moyenne, somme, min et max, écart-type…) sur un jeu de
données, éventuellement par groupe d’observations. SUMMARY est identique à MEANS, sauf
qu’elle ne produit, par défaut, aucun résultat dans la fenêtre Output.
Fournit les répartitions d’individus selon une ou deux variables qualitatives.
Propose les statistiques des procédures MEANS / SUMMARY et FREQ dans un tableau dont la
mise en forme est plus aisément contrôlable.
Combine les possibilités des procédures PRINT et TABULATE.
Reprend les sorties fournies par MEANS ou SUMMARY et ajoute d’autres statistiques plus
complètes, ainsi que des graphiques (histogramme, adéquation à une loi).
Propose des tests de liaison entre deux variables qualitatives (chi-2, V de Cramer, tests exacts
associés) ainsi que des tests de tendance (Cochran-Armitage).
Calcule des corrélations entre variables quantitatives et teste la nullité du coefficient de corrélation.
Propose des tests de normalité et de nullité de la moyenne.
Compare avec un test statistique les moyennes de groupes d’observations. La procédure TTEST
se limite à l’étude de deux groupes, tandis que GLM permet les études à plusieurs groupes et
propose davantage de tests. Cependant, l’hypothèse statistique pour l’utilisation de la procédure
GLM (égalité des variances) est plus contraignante que pour TTEST. Dans les deux procédures,
les tests sont paramétriques.
Réalise des tests non-paramétriques de comparaison de moyennes à deux groupes ou
davantage.
105
GLM / ANOVA
Analyse
variance
de
TP
la
GLM /MIXED
/
Graphiques
GCHART
GPLOT
GBARLINE
BOXPLOT
Echantillonnage
SURVEYSELECT
/
RANK
/
STDIZE
/
TRANSREG /
GLMMOD
/
KDE
/
STDIZE
/
MI / MIANALYZE
/
Préparation des
données
Données
manquantes
Cours
Cours / TP
/
/
Permet l’étude de l’impact de facteurs qualitatifs et quantitatifs contrôlés sur une donnée
quantitative. La procédure GLM reprend et enrichit les fonctionnalités de la procédure ANOVA,
plus ancienne. Cette dernière fournit des résultats plus rapidement dans le cas de plans
d’expérience équilibrés.
Permet l’étude de l’impact de facteurs qualitatifs et quantitatifs contrôlés et non contrôlés sur une
donnés quantitative. La procédure GLM contient une instruction RANDOM dont les fonctionnalités
sont plus étendues dans la procédure MIXED, construite expressément pour ce type d’analyse et
plus récente.
Trace des histogrammes, des diagrammes en bâtons et des diagrammes circulaires.
Trace des nuages de points, des courbes et des nuages où les points sont de taille variable.
Superpose un histogramme et une courbe (procédure disponible à partir de la version 9).
Trace des graphiques « boîtes à moustaches ».
Tire des échantillons d’observations à partir d’une table SAS en proposant de nombreux modes
d’échantillonnage.
ème
Remplace les valeurs par leur rang (1 pour le minimum, 2 pour la 2
plus petite valeur, etc…) ce
qui permet des analyses non-paramétriques.
Centre (=rend la moyenne nulle) et réduit (=rend la variance égale à 1) une ou plusieurs variable
quantitatives.
Construit des indicatrices (variables valant 0 ou 1) à partie de variables qualitatives. La procédure
TRANSREG construit des macro-variables contenant la liste des indicatrices créées, et gère
mieux labels et formats que la procédure GLMMOD.
Complète la répartition des valeurs d’une variable quantitative à l’aide d’un « noyau » nonparamétrique ; cela permet l’édition d’une courbe de densité lissée.
Permet le remplacement de données manquantes par la moyenne, éventuellement par la
moyenne du groupe d’observations si l’on utilise son instruction BY.
Permettent de remplacer les valeurs manquantes par des valeurs simulées pour l’analyse
statistique. Ces deux procédures travaillent de pair (MI en amont de l’analyse statistique,
MIANALYZE en aval).
106
PRINCOMP
TP
CORRESP
TP
FACTOR
CLUSTER
TREE
/
/
/
FASTCLUST
/
LOGISTIC /
CATMOD
/
DISCRIM
STEPDISC
/
/
Fournit les résultats de l’estimation d’un modèle de régression linéaire. On peut y étudier et y
prédire les valeurs d’une variable quantitative en fonction de variables quantitatives seulement
(procédure REG), ou de variables de toutes natures (procédure GLM, plus récente).
Effectue une régression robuste (=qui minimise l’impact d’individus atypiques) par diverses
méthodes.
Effectue une régression PLS (régression sur des facteurs pouvant traiter des données
multicorrélées).
Construit des modèles de régression sur des variables dont la distribution ne correspond pas à
une loi normale (Gamma, Log-normale, Poisson, etc.). La procédure CATMOD ne traite que les
cas de données qualitatives.
Construit des modèles à équations structurelles (variables latentes).
Construit un modèle de régression sur des données censurées à droite (appelées également
données de survie).
Calcule des indicateurs usuels sur les données « de survie », dont la fonction de survie et le
produit-limite de Kaplan-Meier.
Construit un modèle de régression sur des données censurées à droite avec une hypothèse de
hasards proportionnels. La procédure TPHREG permet d’intégrer des variables explicatives
qualitatives au modèle.
Fournit les résultats et les aides à l’interprétation d’une analyse en composantes principales
(ACP).
Fournit les résultats et les aides à l’interprétation d’une analyse des correspondances simple
(AFC) ou multiple (ACM).
Fournit les résultats et les aides à l’interprétation de plusieurs méthodes d’analyse factorielle.
Fournit les résultats et les aides à l’interprétation d’une classification ascendante hiérarchique.
Fournit le dendogramme à l’issue d’une classification hiérarchique.
Fournit les résultats et les aides à l’interprétation d’une classification par centres mobiles (Kmoyennes ou nuées dynamiques).
Fournit les résultats de l’estimation d’un modèle de régression logistique, où une variable
qualitative est expliquée par des variables quantitatives ou qualitatives. La procédure LOGISTIC
reprend toutes les fonctionnalités de la procédure CATMOD, plus ancienne, et les enrichit de
sorties plus orientées vers les modèles réellement décisionnels ou datamining.
Fournit les résultats et les aides à l’interprétation d’une analyse discriminante.
Choisit le modèle le plus approprié pour la constitution d’une analyse discriminante.
PLAN
/
Effectue des ventilations d’individus dans des plans d’expériences.
REG / GLM
Régression
Données « de
survie »
Analyses
factorielles
Typologies
Modèles
décisionnels
Plans
d’expérience
TP
ROBUSTREG
/
PLS
/
GENMOD /
CATMOD
/
CALIS
/
LIFEREG
/
LIFETEST
/
PHREG / TPHREG
/
107
Séries
temporelles
Autres méthodes
statistiques
ARIMA
/
HPF / FORECAST
/
SPECTRA
/
IML
Cours / TP
Effectue des ajustements de séries chronologiques et des prévisions à l’aide du modèle ARIMA de
Box et Jenkins.
Propose la prévision de données quantitatives suite à l’analyse d’une série chronologique de
valeurs par diverses méthodes. La procédure HPF apparaît avec la version 9 en reprenant de
nombreuses fonctionnalités de la procédure FORECAST.
Conduit l’analyse spectrale de données temporelles.
Propose un langage matriciel très complet sachant traiter les tables SAS et produire des
graphiques et des listings.
D’après : SAS – Maîtriser SAS Base et SAS Macro – Hélène Kontchou Kouomegni et Olivier Decourt – Dunod.
108