SAS base Introduction à SAS SQL SAS IML

108
1 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.

Transcript of SAS base Introduction à SAS SQL SAS IML

Page 1: SAS base Introduction à SAS SQL SAS IML

1

SAS baseIntroduction à SAS SQL

SAS IML

Introduction

Le système SAS est un ensemble de modules logiciels pour la gestion et le traitement statistique desdonnées. À travers différents types d’interfaces utilisateur, il permet l’écriture de programmes SAS quiexé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 êtrepilotées par menu.

Il existe plusieurs modules qui permettent un traitement de l’information sans écrire une ligne deprogramme : les modules Insight, Enterprise Guide et Enterprise Miner ont été élaborés en ce sens. Ilserait possible, en première approche, de se contenter de cette utilisation élémentaire mais l’usagemontre que ces solutions sont nécessairement limitées et qu’un usage professionnel, associé à descontraintes 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 miseen 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 basesde données (SGBD), permettant également l’extraction, la transformation et l’appariement dedonnées.

• L’IML (Interactive Matrix Language), langage matriciel permettant de nombreux calculsmathématiques et statistiques.

Ce cours abordera ces 4 langages, en insistant tout particulièrement sur 2 d’entre eux : le langage debase et le langage macro. A l’issue de cet enseignement, vous devrez être capable de manipuler lesdonné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 estfortement recommandé, surtout dans la période de prise en main du logiciel, de consulter les manuelsde SAS ou la documentation SAS en ligne afin notamment de prendre connaissance de la syntaxe etde l’ensemble des options disponibles pour les procédures. La documentation SAS en ligne estdisponible à 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’utilisationde la proc import et de la proc export pour l’import/export de différents types defichiersl’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 detables (étapes PROC).

• le langage SQL (Structured Query Language) de gestion des données informatiques desSGBD relationnels.

• le langage matriciel (module SAS IML).

• les graphiques avec SAS GRAPH.

• le macro langage SAS.

Page 2: SAS base Introduction à SAS SQL SAS IML

2

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 pourimporter 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 quenous 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)

Page 3: SAS base Introduction à SAS SQL SAS IML

3

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ïqueverticale) :

• 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 ProgramEditor 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 devisualiser 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 dele remettre en vue intégrale via Edit > Expand all.

Page 4: SAS base Introduction à SAS SQL SAS IML

4

• 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 lieupendant 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 lignesincré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épitdes 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é dereprendre 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 queSAS sait gérer lui-même ce type d’erreur (qui consiste souvent à générer des valeursmanquantes).

La fenêtre Log n’est pas purgée automatiquement pas SAS à l’exécution d’un nouveauprogramme. Les messages sont donc affichés à la suite de ceux concernant l’exécution ducode précédent. Il est souvent pratique, pour retrouver le début des messages, d’effacer lecontenu 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 desprogrammes, rapports générés par les procédures SAS et les étapes DATA. Elle estcomplétée par deux autres fenêtres pour l’affichage des sorties : la fenêtre Graph pour lesgraphiques et la fenêtre Résultats (ou Results) qui montre sous forme arborescente lesdifférentes sorties engendrées par le programme.

Page 5: SAS base Introduction à SAS SQL SAS IML

5

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 sortiesengendrées par un ou plusieurs programmes. La suppressions des sorties parmorceaux est possible (faire un clic droit sur un des éléments de cette fenêtre etchoisir 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 nouveauprogramme, mais ajoute de nouvelles sorties à la suite de celles existantes. Il est doncpossible 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 lesdonnées SAS et en particulier de visualiser les tables SAS.

Page 6: SAS base Introduction à SAS SQL SAS IML

6

2. Les menus et les barres d’outils

Les menus disponibles sont variables en fonction de la fenêtre active. Les menus disponibles sontFILE, EDIT, VIEW, TOOLS, SOLUTIONS, WINDOWS et HELP. S’y ajoute le menu RUN quandl’é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 lasession SAS.

• EDIT regroupe les commande d’édition usuelles (couper/copier/coller, annuler) ainsi quecelles pour le repli et le déploiement d’un programme. On y trouve aussi la commande CLEARALL 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 uneinterface etc…). On y trouve également, dans un sous-menu OPTIONS, les réglages de lasession SAS (aspect des fenêtres, préférences de l’utilisateur, tableau des optionssystè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’unefenê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 permetl’exécution du programme écrit dans la fenêtre active ; si une partie du programme estsélectionnée, alors seul ce morceau de code est soumis à SAS.

A gauche de la barre d’outils, une fenêtre rectangulaire, pouvantaccueillir une seule ligne, est appelée fenêtre de commande. Elletrouve son intérêt dans les versions dépourvues de menus. Dans cesversions, elle apparaît en première ligne de chaque fenêtre, sous laforme d’une ligne blanche précédée de COMMAND. Elle permet, en ytapant et soumettant des commandes, d’obtenir des manipulationssemblables à celles proposées par les icônes de la barre d’outils, etpar certains items des menus.

Par exemple, une commande utile est KEYS, qui permet d’afficher la liste des raccourcis clavierde SAS.

3. Modules

SAS est un logiciel organisé en modules qui sont des groupes de fonctionnalités. Ce système sertde base de tarification, mais aussi d’organisation logique. Les procédures sont rattachées à unmodule et ne sont donc pas toutes disponibles sur toutes les installations de SAS. Par exemple, laproc 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 unedurée limitée, de certains modules. Dans la version 9, un fichier SAS Installation Data spécifie lesmodules 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 manipulationde données, les statistiques descriptives élémentaires et l’édition de rapports. Ce modulepermet de programmer dans le langage SAS de base, ainsi que dans les langages SQL etmacro.

Page 7: SAS base Introduction à SAS SQL SAS IML

7

• 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’autresapplications.

• 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 desdonnées temporelles (ETS : Econometrics and Time Series).

• SAS FSP : ce module permet la manipulation de données en plein écran (FSP : Full ScreenProducts).

• SAS AF : ce module permet la construction d’interfaces clique-bouton par-dessus SAS, sur unmode 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étiquesregroupant 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 MatrixLanguage).

• 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 etde fenêtres de dialogue, de réaliser des extractions, de croiser des sources de donnéeshétérogènes, de produire des tableaux, des graphiques et des statistiques. Il génère desprogrammes SAS et intègre également un éditeur de programmes, afin d’ajouter ou d’amender ducode.

SEG produit des sorties dans les formats les plus courants : page Web, document PDF, documentWord, feuille Excel.

Enterprise Guide est un croisement entre SAS et Excel. Il a hérité du premier la puissance decalcul 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 EnterpriseGuide, mais toute application constituée de menus et de fenêtres de dialogue trouve sa limitedans 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 lafermeture du logiciel. Au sein d’une session SAS, de nombreux réglages sont temporaires. Ilsdurent le plus souvent jusqu’à la fermeture de la session.

Page 8: SAS base Introduction à SAS SQL SAS IML

8

6. Sorties

On parle de sorties en général pour désigner l’ensemble des résultats produits par SAS. Cessorties peuvent prendre différents aspects selon les instructions du programme exécuté. Leprogramme peut produire :

• une ou plusieurs table(s) SAS ;

• du texte, appelé généralement listing, d’une mise en forme minimale (police de caractèresunique, pas de gras ni d’italique). Le listing est le mode par défaut d’affichage de résultats parSAS ;

• 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 parSAS,

• Les commentaires, encadrés par les signes /* et */, peuvent être intégrés à n’importe quelendroit du programme, à la seule condition de ne pas couper une instruction,

• La contrainte la plus incontournable dans SAS est l’obligation de terminer chaque instructionpar un point-virgule.

8. Concepts et vocabulaire

Nous allons commencer par survoler les concepts qu’il est essentiel d’avoir intégrés avant decommencer 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 traitedu décalage qui existe – à travers les labels et les formats – entre les données vues à l’écran et laréalité qu’il faut programmer. Les derniers concepts concernent la programmation, et fait ladistinction entre l’étape Data et les procédures, qui sont les deux grandes étapes deprogrammation de SAS.

Page 9: SAS base Introduction à SAS SQL SAS IML

9

1. Deux étapes : DATA et PROC

Un ensemble d’instructions constitue une étape. Dans SAS, on distingue deux grands typesd’é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) etd’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 ouPROC 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 uncertain format, interne à SAS. SAS possède en effet son propre système de gestion debases de données (étape DATA), bâti sur la notion de table (SAS DATA SET nommé par lasuite 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 lenom de la table SAS créée. Si aucune table SAS n’est créée (cas par exemple de la recopied’une table dans un fichier texte), alors l’étape DATA débutera par l’instructionDATA _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. Lesdonné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 sonteffacées lorsqu’on quitte la session.

On appelle table SAS la représentation la plus courante des données utilisées par celogiciel. Ces données sont organisées en lignes et en colonnes, également appeléesobservations 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 êtreanalysées au moyen de procédures (étape PROC). Les procédures sont des programmesdéjà écrits de SAS, à la syntaxe beaucoup moins libre que celle de l’étape Data, où il fautsurtout renseigner un certain nombre de paramètres et faire jouer certaines options. Lesprocédures, qui sont assez nombreuses (aux alentours de 200 sur l’ensemble des modulesde 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.

Page 10: SAS base Introduction à SAS SQL SAS IML

10

Chaque procédure commence par une instruction PROC suivie de son nom, et s’achève surune 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 ; pourclore 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 permetl’é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 : cesont 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 unetable. 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 plusjusqu’à 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 seraré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éesperpé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 : celas’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 parexemple 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_, quicorrespond au numéro d’observation dans la table SAS1) 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…

Page 11: SAS base Introduction à SAS SQL SAS IML

11

(exemple : data _NULL_) et ne peuvent pas être utilisés pour nommer des variables ou destables 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 observationcorrespond à 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 latable.

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_, quicorrespond au numéro d’observation dans la table SAS2) et ne peuvent pas être utiliséspour 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 leuraffecte 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…

Page 12: SAS base Introduction à SAS SQL SAS IML

12

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. SASstocke les dates comme un nombre de jours depuis le 1er janvier 1960.

Le label

Le label d’une variable est un texte libre de 256 caractères maximum, qui permet de décrirele contenu de la variable, de donner sa définition, de décrire éventuellement ses valeurs, demaniè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 entreles valeurs telles qu’elles sont stockées (de manière parfois peu lisible : les dates sontstockées comme un nombre de jours depuis le 1er janvier 1960) et les valeurs telles qu’ellessont affichées. On trouvera en annexe 1 les formats les plus courants fournis par SAS. Encomplément de ces formats, SAS propose, avec un programme (la procédure FORMAT quel’on étudiera ultérieurement), de définir des formats personnalisés correspondant auxdiffé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 sesvaleurs. SAS prévoit par défaut d’utiliser 8 octets pour chaque valeur. Les longueursautorisé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 longueurspossibles 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 ; ils’applique aux données telles qu’elles sont lues lors de la création de la table SAS à partird’un fichier externe.

Ainsi, pour reprendre l’exemple d’une date, on peut avoir une donnée stockée sous la forme20010125 qui désignerait le 25/01/2001. SAS doit comprendre que c’est une date et stockerle nombre 15000 (car le 25 janvier 2001 est le 15000ème jour depuis le 1er 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 dumois, et enfin ceux du jour.

Page 13: SAS base Introduction à SAS SQL SAS IML

13

4. Manipulations de tables SAS

Le but premier de SAS est la manipulation de données, avant même de commencer lestraitements 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 dedonné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 encolonne les variables.

Exemple :

Les données de cet exemple (fichier PAYS), avec lequel nous travaillerons également enTP, 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, Russetutilise des variables décrivant la répartition des terres agricoles, le produit national brut partê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 lacourbe 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é desterres 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êteen dollars U.S. en 1955,

• la variable LABO est égale au pourcentage de personnes actives travaillant dansl’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 dunombre d’années pendant lesquelles le pays a été indépendant entre 1945 et 1961. Cetindice 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 lenombre 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 lapériode 1950-1962,

• la variable DEMO classe les pays en trois groupes : démocratie stable (1), démocratieinstable (2) et dictature (3).

Les données d’origine sont reproduites dans le tableau suivant :

Page 14: SAS base Introduction à SAS SQL SAS IML

14

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 estdé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’uneinstruction LIBNAME assurant la correspondance entre le nom_de_librairie et lenom physique (« réel ») de la librairie.

Page 15: SAS base Introduction à SAS SQL SAS IML

15

Ainsi, là où d’autres logiciels comme Excel se contentent de demander à l’utilisateuroù aller chercher les données, SAS demande de lui définir au préalable le ou lesemplacements 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 à laretrouver 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 ;• ne doit comporter que des lettres non accentuées, des chiffres (mais pas en 1ère

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 lasession SAS. Pour définir une table SAS temporaire, on peut ainsi écrirenom_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 propreSASUSER) permanente (au contraire de WORK). Son contenu n’est donc paseffacé à la fermeture de SAS. Cette bibliothèque contient entre autres lesinformations de personnalisation de la session SAS (barres d’outils parexemple). Il est possible d’y écrire ses données, même si, en général, il estpré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 cartedépartementale de la France.

Page 16: SAS base Introduction à SAS SQL SAS IML

16

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, à partirdes 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 figurechaque variable, son type (caractère ou numérique), sa longueur, le nom à luidonner 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 comptepour le déroulement de l’étape DATA. Cette instruction est utile lorsque lapremière ligne comporte les noms des variables (surtout si les variablesexcè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 comptepour le déroulement de l’étape DATA.

MISSOVER

En cas d’enregistrements de longueur variable, si toutes les variables del’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 del’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 parle menu Import Data de SAS). Un des intérêts de ce type de fichier résidedans le fait que les données ne doivent pas obligatoirement être organiséesen colonnes fixes. Les délimiteurs les plus fréquents sont les blancs, lesvirgules, et les tabulations.

Après l’instruction INFILE, on précise l’option DLM=’caractères’. Ainsi, si parexemple des virgules servent de délimiteurs, l’instruction infile sera lasuivante :

infile 'c:\Cours SAS\myfile.txt' dlm=’,’;

En fin de compte, si aucun délimiteur n’est spécifié avec l’option DLM=, ledé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

Page 17: SAS base Introduction à SAS SQL SAS IML

17

comme délimiteur. Par exemple, dlm=’, -’ indique que la virgule et le tiretpeuvent tous deux servir de délimiteur.

DSDIndique que si deux séparateurs sont consécutifs, ils correspondent à unevaleur 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 Gini Farm Rent Gnpr Labo Inst Ecks Deat Demo 1 Australie 92.9 99.6 . 1215 14 11.3 0 0 1 2 Autriche 74.0 97.4 10.7 532 32 12.8 4 0 2 3 Belgique 58.7 85.8 62.3 1015 10 15.5 8 1 1

Instruction INPUT

Dans l’instruction INPUT, la liste des variables lues doit respecter l’ordre danslequel les champs sont présents dans le fichier importé. Pour jouer sur cet ordredans la table SAS créée, on utilisera les déclarations d’attributs (instructionATTRIB) dans l’ordre voulu.

Il faudra distinguer les variables numériques et caractères, en faisant précéder lesvariables caractères par un signe $.

Si on précise &, la variable à lire peut contenir un espace : la variable sera luejusqu’à 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 decolonne 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.

Page 18: SAS base Introduction à SAS SQL SAS IML

18

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éesstandard se rapporte aux données de type numérique et caractère qui n’ont pas dequalités de données inhabituelles. Le terme données non standard se rapporteplutô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 ounumé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éparateurdé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 decaractères (blancs compris) de la plus longue valeur lue.

Informats les plus courants

ExempleInformat

Type dedonnées

lues

Type dedonnéescréées

Donnéeslues

Informatutilisé

Donnéescréées

x. Entiers Numériques 123 3. 123

x.d

Nombresdécimaux(séparateurpoint)

Numériques 123.45 6.2 123.45

NUMXx.d

Nombresdécimaux(séparateurvirgule)

Numériques 123,45 NUMX6.2 123.45

$x. Texte Caractère ABC DEF $7. ABC DEF

$UPCASEx. TexteCaractère(texte enmajuscules)

Abc dEf $UPCASE5. ABC D

DDMMYYx.Date(jj/mm/aaaa)

Numérique(date)

25/01/2001 DDMMYY10. 15000

YYMMDDx.Date(aaaa/mm/jj)

Numérique(date) 20010125 YYMMDD8. 15000

2001-01-2501/25/2001ANYDTDTEx.

Date(tousformats)

Numérique(date)

25.01.2001ANYDTDTE10. 15000

Page 19: SAS base Introduction à SAS SQL SAS IML

19

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. Parexemple, 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, cecomportement est préjudiciable. L’informat :$10. permet de lire au maximum 10caractè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 lesvariables vol (identificateur du vol), cargo (capacité totale de l’avion), date (dernièredate 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,110I002,89,09/12/2001,45

3 champs correspondent à des données standards (vol, cargo et nb_passagers), unchamp contient des données non standards (date). Ecrire une étape datapermettant 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 centraliserces caractéristiques.

ATTRIB nomVariableLABEL='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 formatscréés par l’utilisateur,

• La longueur est le nombre d’octets affectés au stockage de chaque valeur. Pourune variable de type numérique, cette information peut généralement êtrelaissée à la gestion de SAS. Pour une variable de type caractère, on donneraaprès un $ la longueur maximale que peuvent atteindre les valeurs.

Page 20: SAS base Introduction à SAS SQL SAS IML

20

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’unevariable 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 longueurd’une donnée de type caractère, on peut définir la longueur avec une instructionLENGTH 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 prixALFASUD-TI-1350 1350 79 393 161 870 165 I B 30570AUDI-100-L 1588 85 468 177 1110 160 D TB 39990SIMCA-1307-GLS 1294 68 424 168 1050 152 F M 29600CITROEN-GS-CLUB 1222 59 412 161 930 151 F M 28250FIAT-132-1600GLS 1585 98 439 164 1105 165 I B 34900LANCIA-BETA-1300 1297 82 429 169 1080 160 I TB 35480PEUGEOT-504 1796 79 449 169 1160 154 F B 32300RENAULT-16-TL 1565 55 424 163 1010 140 F B 32000RENAULT-30-TS 2664 128 452 173 1320 180 F TB 47700TOYOTA-COROLLA 1166 55 399 157 815 140 J M 26540ALFETTA-1.66 1570 109 428 162 1060 175 I TB 42395PRINCESS-1800-HL 1798 82 445 172 1160 158 GB B 33990DATSUN-200L 1998 115 469 169 1370 160 J TB 43980TAUNUS-2000-GL 1993 98 438 170 1080 167 D B 35010RANCHO 1442 80 431 166 1129 144 F TB 39450MAZDA-9295 1769 83 440 165 1095 165 J M 27900OPEL-REKORD-L 1979 100 459 173 1120 173 D B 32700LADA-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 étaittronquée à 8 caractères (alors que certains noms de voiture comportent 16caractères). L’instruction length doit précéder l’instruction input.

Page 21: SAS base Introduction à SAS SQL SAS IML

21

Exercice 2 :

On veut lire le fichiers de données brutes employes.csv, stocké dans le répertoirec:\Cours SAS, et contenant les variables suivantes :

1/ la division de l’employé : DIV2/ la date d’entrée en service de l’employé : DESE3/ le salaire de l’employé : SE4/ le nom de famille de l’employé : NFE5/ le prénom de l’employé : PE6/ le pays de l’employé : PAYS7/ la localisation de l’employé : LE8/ le numéro d’identification de l’employé : NIE9/ 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,FLTAT3FINANCE,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 champrequiert-il ?______________________________________

Ecrire une étape DATA pour créer une table EMPLOYES qui contient toutes lesvariables du fichier d’entrée.NB : il faut spécifier par une instruction length la longueur de toutes les données quidé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,3Marie-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 53 65

NOM PRENOM DAT_NAI VILLE DEPT NB_ACHATS AN_ANCIENMartineau Anne Sophie 14/08/1955 PARIS 75 8 0,3Dupont Marie-Anne 01/12/1977 ORLEANSMartin du Gard Roger 18/01/1988 29 17 1,8

On utilisera un arrobas (@) suivi d’un nombre pour indiquer la colonne à laquellecommencent les valeurs du champ.

Par ailleurs, on souhaite que le prénom figure en 1ère colonne dans la table SAS créée.

Page 22: SAS base Introduction à SAS SQL SAS IML

22

Format

On peut également préciser le format des données avec l’instruction format. Lesformats 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 soitcodé 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, leprix était codé sur 5 colonnes. On ajoute deux chiffres après la virgule, et unecolonne 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’avionest 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 lacapacité 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’enregistrementlorsqu’il rencontre le 2ème input. On utilise donc l’indicateur de retenue @ pourgarder :

• la ligne de données courante dans le tampon d’entrée pour le traitement d’uneautre instruction INPUT,

• le pointeur de colonne à son emplacement actuel dans la ligne de données.

Page 23: SAS base Introduction à SAS SQL SAS IML

23

Exercice 5 :

On dispose d’un fichier aircraft.csv délimité par des virgules, décrivant les avionsdont 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, parexemple 12/31/1999),date de dernière utilisation : LAST_SERVICE_DATE (date de format MM/JJ/AAAA),capacité en première classe : CAPACITY_FIRSTCLASScapacité en classe affaire : CAPACITY_BUSINESScapacité en classe économique : CAPACITY_ECONOMY

Pour les avions entrés en service après le 1er janvier 1990, on ne veut que lesvariables ID, MODEL et IN_SERVICE_DATE. On veut toutes les variables pour lesavions entrés en service avant le 1er janvier 1990. Ecrivez une étape DATA pourrécupérer ces données.

4. 2. 2. La procédure Import

La procédure IMPORT correspond au programme le plus souvent rédigé parl’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, laprocédure IMPORT nécessite d’avoir une licence pour le module SAS/ACCESS TOPC FILES.

Syntaxe :

PROC IMPORT DATAFILE=’chemin et nom du fichier importé’OUT=tableSAScrééeDBCS=typeFichierLuREPLACE ;<instructions optionnelles>

RUN ;

La table SAS créée est désignée par sa librairie et son nom. Le fichier importé estdonné 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 versionimportée. En son absence, SAS renvoie un message d’erreur si l’on essaye decréer une table qui existe déjà.

Les valeurs les plus courantes de l’option DBCS sont répertoriées dans le tableausuivant.

Page 24: SAS base Introduction à SAS SQL SAS IML

24

Principales valeurs possibles pour le type de fichier lu

Mot-clé Type de fichierNécessité

ACCESS TO PCFILES

DLMFichier à caractère délimiteur (blancpar défaut)

Non

CSV Fichier à séparateur virgule NonTAB Fichier à séparateur tabulation NonEXCEL2002 Classeur excel 2002 OuiEXCEL2000 Classeur excel 2000 OuiEXCEL97 Classeur excel 97 OuiEXCEL5 Classeur excel 5 OuiEXCEL4 Classeur excel 4 OuiACCESS2002 Table Access 2002 OuiACCESS2000 Table Access 2000 OuiACCESS97 Table Access 97 OuiWK1 Classeur Lotus 1-2-3 version 2 OuiDBF Fichier Dbase Oui

Les instructions optionnelles dépendent beaucoup du type de fichier lu. Onretiendra en particulier GETNAMES=YES ou NO ; qui permet de lire en premièreligne du fichier les noms des variables à importer. Sans cette option, les variablescréées seront nommées F1, F2, F3 etc.

SHEET=’nomFeuilleExcel$’ est utile pour l’import d’un classeur excel. Par défaut, lapremière feuille est importée. La procédure IMPORT ne propose pas de moyenautomatique simple pour importer dans autant de tables toutes les feuilles d’unclasseur Excel.

Enfin, DELIMITER=’caractère’ permet de spécifier le caractère séparateur pourDBCS=DLM.

Exemple :

Pour importer la feuille ‘Ventes2003’ du classeur TableaudeBord.xls, situé dans lerépertoire ‘c:\perso\tdb’, on utilisera la programme suivant :

PROC IMPORT DATAFILE=’c:\perso\tdb\TableaudeBord.xls’OUT=base.ventes03REPLACEDCBS=EXCEL2002 ;GETNAMES=YES ;SHEET=’Ventes2003’ ;

RUN ;

Ces deux dernières méthodes sont plus simples que l’utilisation de l’étape Datapour importer des fichiers. Mais l’intérêt de l’importation par l’étape Data est depermettre 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 Excelsera importé comme variable numérique par la PROC IMPORT). L’étape Datapermet également de ne pas commencer la lecture des données avant la nièmeligne, 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 desdonnées) pour créer une table SAS à partir d’un fichier externe. Le choix des typesde fichiers importés est plus ou moins riche selon que le module SAS/ACCESS TOPC FILES est sous licence ou non. Dans le cas où ce module n’est pas souslicence, la liste se réduit à :

Page 25: SAS base Introduction à SAS SQL SAS IML

25

• 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 ouLotus.

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éristiquesphysiques d’un parc national. Il s’agira, au cours du TP, d’étudier la relation entre laprésence d’herbivores et l’environnement dans le parc. Dans la table SAS suivante, ontrouve 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 deshippopotames 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 sonprincipe et son ergonomie à l’assistant d’import. Nous aborderons cette possibilité enTP.

• 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 desinstructions INFILE et INPUT vues précédemment.

Page 26: SAS base Introduction à SAS SQL SAS IML

26

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 aucours de l’étape DATA. Puisque la sortie attendue est un fichier externe et non tableSAS, 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 unetable SAS, mais de se servir d’éléments existants, afin de les présenter dans unfichier externe),

• utiliser les possibilités de la fonction PUT, notamment en matière de formatagedes variables.

Chaque observation soumise à une instruction PUT sera ainsi copiée dans le fichiertexte 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 instructionFILENAME.

Options de l’instruction FILE

Pour créer un fichier dont les champs sont séparés par un délimiteur, on utilisel’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ù lesmilliers 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. Pourindiquer que les valeurs de données contenant des virgules doivent être présentéesentre 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”

Page 27: SAS base Introduction à SAS SQL SAS IML

27

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 unespécification est envoyée au pointeur d’écriture pour écrire au delà de cette limite, lesystè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 decaractè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 enutilisant un FORMAT d’écriture. Ce format pourra aussi bien être un format SASprédéfini qu’un format utilisateur préalablement défini par une PROC FORMAT, oulu dans une librairie de formats utilisateur. La valeur exportée sera lors la valeurformaté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 variablescaractè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 formatd’é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 :

Page 28: SAS base Introduction à SAS SQL SAS IML

28

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 lavaleur formatée, au lieu du comportement par défaut de SAS qui exporte la valeurstocké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:/coursSAS. La variable nom sera codée sur les colonnes 1 à 23, la variable taille seracodée à partir de la colonne 24 (de sorte que dans le fichier texte, toutes lesvariables 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 lesclasseurs Excel nécessite d’avoir une licence pour le module SAS/ACCESScorrespondant. Si aucun module SAS/ACCESS n’est disponible, alors la procédureEXPORT 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 ;

Page 29: SAS base Introduction à SAS SQL SAS IML

29

La table SAS lue est désignée par sa bibliothèque et par son nom. Le fichierexporté est donné sous forme de chemin complet, avec le nom du fichier et sonextension. 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 unclasseur Excel (avec l’option DBCS=EXCEL) quelle est la feuille Excel du classeurdans 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 unevaleur de données en un seul blanc.

• TRANWRD : remplace dans une valeur de données toutes les occurrencesd’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, lalongueur de cette nouvelle variable est 200 (sauf si on utilise l’instructionLENGTH).

Exemple : un chasseur de tête d’une compagnie aérienne dispose d’une table SASapplicants sur les candidats. Les premières lignes sont les suivantes :

Applicant Last Name Applicant First name Applicant country Job CodeCHASE JR MARJORIE J. USA FLTAT1RIGHENZI NICOLAS France MECH01DE PABLOS MARIA Spain FINCLK.

Afin de retrouver plus facilement les candidats dans la base de données on vaprocé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 denouvelles variables. On peut utiliser les instructions ATTRIB et LENGTH vueprécédemment. Vient ensuite la nécessité de définir la formule qui va permettre lecalcul des valeurs de cette nouvelle variable.

Lors de la création de variables, un certain nombre de formules et de fonctionspeuvent ê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 decalcul 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;

Page 30: SAS base Introduction à SAS SQL SAS IML

30

• 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èresd’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 premierscaractères de la variable name et est égal à ‘Dor’.

La fonction SCAN extrait une partie d’une valeur de données de type caractèred’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 ‘DorothyE’. 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, lalongueur 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, lalongueur de la nouvelle variable est la somme des longueurs de toutes les variableset 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 typecaractè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 etde @IA.COM.

Données partielles

emp_lastname emp_firstnameMILLS DOROTHY EBOWER EILEEN AREADING TONY RJUDD CAROL A

Page 31: SAS base Introduction à SAS SQL SAS IML

31

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 lavariable email email=first_initial||middle_initial||trim(lastname)||’@IA.COM’

Principales fonctions sur les variables de type caractère

Fonction Description Exemples

VarCar1 ! !varCar2Concaténation de deuxchaînes de caractères

NUMSECU=NUM_INSEE ! !CLE

Si NUMSECU=2750986345776et CLE=33, alors NUMSECU=275098634577633

SUBSTR(varCar,début,longueur)

Extraction d’un morceaud’une chaîne decaractères

SEXE=SUBSTR(NUMSECU,1,1)_’2’

UPCASE(varCar)Mise en majuscule d’unechaîne de caractères

UPCASE(VILLE)_’ PARIS CEDEX 03 ’

LOWCASE(varCar)Mise en minuscules d’unechaîne de caractères

LOWCASE(VILLE)_‘ paris cedex 03 ’

LEFT(varCar)Suppression des blancs àgauche d’une chaîne decaractères

LEFT(VILLE)_‘Paris CEDEX 03 ’

TRIM(varCar)Suppression des blancs àdroite d’une chaîne decaractères

TRIM(VILLE)_‘Paris CEDEX 03’

STRIP(varCar)Suppression des blancs àdroite et à gauche d’unechaîne de caractères

STRIP(VILLE)_‘Paris CEDEX 03’

COMPRESS(varCar)Suppression des blancsdans une chaîne decaractères

COMPRESS(VILLE)_‘ParisCEDEX03’

COMPBL(varCar)Suppression des blancsconsécutifs dans unechaîne de caractères

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 statistiquessur plusieurs variables. Ces statistiques sont calculées sur chaque observation etsur les valeurs non manquantes des variables concernées. Elles permettent desynthétiser plusieurs variables numériques.

La fonction SUM additionne des valeurs de variables, et ignore les valeursmanquantes. Elle renvoie toujours un résultat (zéro si toutes les valeurs concernéessont non renseignées), alors que l’addition avec l’opération + générera une valeurmanquante si une des variables n’est pas renseignée.

Syntaxe var=SUM(var1,var2,…,varN)

Exemple var1 var2 var3 var=sum(var1,var2,var3); var12 . 6 18

On peut aussi utiliser la liste implicite de variables, en utilisant le mot clé OF devantle premier nom de variable pour éviter la soustraction.

Var=SUM(OF var1-varN) ;

Page 32: SAS base Introduction à SAS SQL SAS IML

32

Exemple : précédemment, on aurait pu utiliser l’instruction suivante : var=sum(of var1-var3);

La fonction MEAN retourne la moyenne arithmétique et ignore les valeursmanquantes. Elle ne prend en compte, comme dénominateur, que le nombre devariables renseignées pour cette observation.

Syntaxe :var=MEAN(var1,var2,…,varN) ;

Exemplevar1 var2 var3 var=mean(var1,var2,var3); var12 . 6 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 plusprès.

var=ROUND(var1<,unité d’arrondissement>)

Tout nombre ou valeur fractionnaire peut être désigné comme unitéd’arrondissement.

Exemples

var1 var2 var3 var412.12 42.54 6.472 -6.47

var1a=round(var1) ;var2a=round(var2) ;var3a=round(var3,.1);var4a=round(var4,.1);

var1 var2 var3 var412 43 6.5 -6.5

La function INT retourne la partie entière d’un argument.

var=INT(var1) ;

Exemple

var1 var2 var3 var412.1242.54 6.472 -6.47

var1a=int(var1) ;var2a=int(var2) ;var3a=int(var3);var4a=int(var4);

var1 var2 var3 var412 42 6 -6

Exemple : on dispose pour chaque employé du montant des primes reçues aucours des 9 dernières années. Voici un aperçu des données partielles :

EMP_ID Prime1 Prime2 Prime3 Prim4 Prim5 Prim6 Prim7 Prim8 Prim9E00002 . . 2704.07 2705.43 2706.78 2708.14 2709.50 2710.85 2712.21E00003 . . . . 12030.15 12036.18 12042.21 12048.24 12054.27E00004 . . . . . . . . 4218.99E00005 1900.95 1901.91 1902.86 1903.82 1904.77 1905.73 1906.68 1907.64 1908.59E00007 2904.37 2905.83 2907.29 2908.74 2910.20 2911.66 2913.12

On souhaite avoir un rapport affichant les ID des employés, le total des primes qu’ilsont 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.

Page 33: SAS base Introduction à SAS SQL SAS IML

33

data sum_avg_prime; set prime; sum_prime=sum(of prime1-prime9); avg_bonus=round(mean(of bonus1-bonus9));run;

Sortie partielle

EMP_ID Sum_prime

Avg_bonus

E00002 18956.98 2708E00003 60211.06 12042E00004 4218.99 4219E00005 17142.96 1905E00007 20361.21 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 estmanquante. Le résultat généré est alors une valeur manquante. Un messages’affiche dans la fenêtre Log pour rendre compte de ce problème.

Principales fonctions numériques

Fonction Description ExemplesROUND(varNum,précision)ou ROUND(varNum

Arrondi à une précisiondonnée

ROUND(CA)_125ROUND(CA,0.1)_124.6ROUND(CA,10)_120

RANUNI(0)Génération d’un nombreau hasard entre 0 et 1(inclus)

RANUNI(0)_0.63562536741

LOG(varNum) Logarithme naturel LOG(CA)_4.8247875EXP(varNum) Exponentielle EXP(CA/100)_3.475019SQRT(varNum) Racine carrée SQRT(CA)_11.160645ABS(varNum) Valeur absolue ABS(-1*CA)_124.56

Principales fonctions statistiques de l’étape Data

Fonction DescriptionSUM(varNum1, varNum2, varNum3…) ouSUM(of varNum1-varNum3)

Somme de plusieursvariables

MEAN(varNum1, varNum2, varNum3…) ouMEAN(of varNum1-varNum3)

Moyenne de plusieursvariables

MIN(varNum1, varNum2, varNum3…) ouMIN(of varNum1-varNum3)

Minimum de plusieursvariables

MAX(varNum1, varNum2, varNum3…) ouMAX(of varNum1-varNum3)

Maximum deplusieurs variables

MEDIAN(varNum1, varNum2, varNum3…) ouMEDIAN(of varNum1-varNum3)

Médiane de plusieursvariables

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-heurepar une valeur entière donnée, puis retourne une date, une heure ou unecombinaison de date-heure.

Page 34: SAS base Introduction à SAS SQL SAS IML

34

Syntaxe

Var=INTNX(‘intervalle’,début,incrément)

‘intervalle’ indique une variable ou une constante de type caractère. L’argumentintervalle peut apparaître en lettres minuscules ou majuscules.

La fonction INTNX avance au début de l’intervalle : par exemple 01JAN pourl’intervalle YEAR.

Le premier argument de la fonction INTNX doit être un de ceux qui sont énumérésdans ce tableau

Intervalle de date Intervalle de date-heure Intervalle d’heureDAY DTDAY HOURWEEKDAY DTWEEKDAY MINUTEWEEK DTWEEK SECONDTENDAY DTTENDAYSEMIMONTH DTSEMIMONTHMONTH DTMONTHQTR DTQTRSEMIYEAR DTSEMIYEARYEAR DTYEAR

début spécifie une expression SAS qui représente une valeur de date, d’heureet 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écifiqued’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.

Page 35: SAS base Introduction à SAS SQL SAS IML

35

Principales fonctions sur les dates

Fonction Description ExemplesTODAY() Date du jour TODAY()_16436

(31 décembre 2004)DAY(varDate) Jour extrait d’une date DAY(16436)_31MONTH(varDate) Mois extrait d’une date MONTH(16436)_12YEAR(varDate) Année extraite d’une

dateYEAR(16436)_2004

WEEKDAY(varDate) Jour de la semaineextrait d’une date 1=dimanche, 2=lundi,3=mardi…

WEEKDAY(16436)_6

MDY(mois,jour,année) Construction d’une dateSAS à partir deséléments jour, mois etannée

MDY(12,31,2004)_16436

INTCK(‘période’,début,fin) Nombre de débuts depériode écoulés entredeux dates. La périodeest un mot-clé à choisirentre ‘week’, ‘month’ et‘year’. Les débuts depériode sont ledimanche, le 1er dumois, le 1er janvierrespectivement.

INTCK('‘eek'’16436,16512)_11(11 dimanche entre lesdeux dates)

INTNX(‘période’,début,nbPériodes)

Décalage d’une date den périodes dans letemps. La date en sortiede cette fonction estcalquée sur le début dela périodecorrespondante.

INTNX(‘week’,16436,11)_16508(le résultat est forcémentun dimanche. 16512 estun jeudi, 16508 est undimanche)

Fonction de retard

Fonction Description ExempleLAG(var) Valeur lue à l’observation

précédentevar1=lag(_N_)_

Obs var1 1 . 2 1 3 2 4 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éried’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

Page 36: SAS base Introduction à SAS SQL SAS IML

36

Opérateur Signification= Egalité

NE(ou ^= ou !=)

Différent de

> Supérieur strictement à< Inférieur strictement à

>= Supérieur ou égal à<= Inférieur ou égal àIN Prend une valeur dans un liste= :

(sur les variables caractèresuniquement)

Commence par une certainechaîne de caractères

NOT Contraire d’une condition

ANDLes deux conditions doivent être

vérifiées par l’observation

ORAu moins une des deux

conditions doit être vérifiée parl’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é. Celasera 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. Onpeut donc les écrire indifféremment x1 ou temp(1) pour identifier la premièrevariable, x2 ou temp(2) pour identifier la seconde,… dans l’étape DATA où cetteinstruction a été précisée.

Exemple : on dispose d’une table de corrélations entre 5 variables. On définit unindice 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;ouIF condition;

L’instruction IF filtre les observations en ne prenant en compte l’observation que siet seulement si la condition à vérifier est vraie. Cette condition peut contenir desexpressions et opérateurs de comparaison :

Page 37: SAS base Introduction à SAS SQL SAS IML

37

< 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), danslesquelles des manifestations violentes ont entraîné des morts sur la période 1950-1962 (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 desdictatures :

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 remplissantcertaines conditions. Chaque condition met généralement en jeu une variable etune 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. Uneattention particulière sera accordée à la casse,

• une date sera explicitée de la manière suivante : deux chiffres pour le jour dumois, trois lettres pour le nom du mois en anglais et deux ou quatre chiffrespour l’année. Cette description de la date est proposée entre guillemets (bienque la variable soit de type numérique), et un « d » est accolé au guillemetfermant. Par exemple, "16APR2003"d.

Plusieurs clauses peuvent être testées simultanément en utilisant les opérateurslogiques OR et AND.

Page 38: SAS base Introduction à SAS SQL SAS IML

38

Exemple :

data demo; set pays.russet; where (demo=1 or demo=2) and (deat>0);run;

Opérateurs pour l’option WHERE

Opérateur Signification= Egalité

NE(ou ^= ou !=)

Différent de

> Supérieur strictement à< Inférieur strictement à

>= Supérieur ou égal à<= Inférieur ou égal à

IN

Prend une valeur dans un listeEx. : dept IN ("22","29","35","56")

oudept IN ("22" "29" "35" "56")

LIKE(sur les variables caractère

uniquement)

Egalité sur une partie de la valeur : dans lavaleur testée, % remplace une chaîne inconnue,

_ remplace un et un seul caractère inconnuEx. : prenom LIKE ‘AN_E’

_ ANNE, ANGEprenom LIKE ‘%N%’

_ANNE, ANGE, NOEMIE, JULIEN= :

(sur les variables caractèresuniquement)

Commence par une certaine chaîne decaractères

Ex. : num_securite_sociale= :"2"BETWEEN Compris entre deux bornes (incluses)IS MISSING N’est pas renseigné

NOT Contraire d’une condition

ANDLes deux conditions doivent être vérifiées par

l’observation

ORAu 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.

Page 39: SAS base Introduction à SAS SQL SAS IML

39

• 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’ungrand nombre de variables :

• KEEP = dt :correspond à l’ensemble des variables dont le nom commence par « DT »,

• DROP = ca1997-ca2002correspond à la séquence de variables dont le nom commence par « CA » et setermine par un nom compris entre 1997 et 2002 inclus,

• DROP = _NUMERIC_correspond à l’ensemble des variables numériques de la table, quel que soitleur 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, etles variables cylindree puissance longueur largeur poids vitesse. La variable nomest 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 dansl’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 contientaucun nom de série de données, l’observation est écrite dans toutes les tables

Page 40: SAS base Introduction à SAS SQL SAS IML

40

énumérées à l’instruction DATA. Mais on peut également décider des tables danslesquelles sont écrites les observations en indiquant le nom des séries de donnéesdans l’instruction OUTPUT.

OUTPUT nom_de_tablei ;

On peut aussi indiquer plus d’une table SAS dans une instruction OUTPUT ensé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 traitementconditionnel IF/THEN/ELSE. Un autre choix est possible, en utilisant l’instructionSELECT, 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, onencadre 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 effectuerune 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 :

Page 41: SAS base Introduction à SAS SQL SAS IML

41

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 pourchaque 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 lalogique IF/THEN, on utilise le code suivant :

Page 42: SAS base Introduction à SAS SQL SAS IML

42

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 transmettreune série de données SAS au service de fabrication pour chacun des typesd’avions.

Ecrivez une étape DATA de manière à créer une série de données SAS pourchaque type d’avion : SMALL, MEDIUM et LARGE (variable MODEL). L’informationcourante 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ésretraités d’une compagnie. Vous devez transformer et écrire les données dans unetable 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 ID de l’employéChamp 2 Date de naissance de l’employé stocké sous la forme mm/jj/aaaaChamp 3 Nom complet de l’employé (prénom et nom) (47 caractères de long)Champ 4 Année de retraiteChamp 5 Avantages monétaires pour la 1ère année de retraiteChamp 6 Avantages monétaires pour la 2ème année de retraiteChamp 7 Avantages monétaires pour la 3ème année de retraiteChamp 8 Avantages monétaires pour la 4ème année de retraite

Fichier partiel :

E02837,09/17/1937,Alexander SERTUCHE,1997,5925,6221.25,6470.1,6793.61E01062,07/28/1922,Alice ROBERSON,1982,9850,10342.5,10756.2,11294.01E01417,02/11/1944,Allen OSWALD,2004,6999,7348.95,7642.91,8025.06E00356,11/03/1937,Amy FULKERSON,1992,6297,6611.85,6876.32,7220.14E02129,11/07/1945,Angela GILLMOR,2005,9608,10088.4,10491.94,11016.54

1. Lisez tous les champs. Ne conservez que les observations des employés nésavant le 1er janvier 1940.

2. Convertissez le nom des employés en lettres majuscules, puis retirez tous lesblancs 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 (pourretraité).

Page 43: SAS base Introduction à SAS SQL SAS IML

43

5. Calculez la prestation de retraite moyenne pour les quatre années, enarrondissant au centième d’euro.

6. Créez une nouvelle variable correspondant à la date de naissance de l’employéplus 60 ans au 1er janvier. Par exemple, si un employé est né le 09/17/1937, lanouvelle valeur de date est 01/01/1997.

7. Comparez la partie année de la nouvelle variable à l’année de retraite. Sil’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 ALEXANDERSERTUCHE

09/17/1937 R02837 5925 6221.25 6470.10 6793.61

2 ALICEROBERSON

07/28/1922 R01062 9850 10342.50 10756.20 11294.01

Lastname Avg_retire Retire_year Birth_60

SERTUCHE 6352.49 1997 01/01/1997ROBERSON 10560.68 1982 01/01/1982

Exercice 9 :

Les données de la série TARIFS incluent le tarif du billet demandé pour chaquetrajet et chaque classe de service (première, affaires et économique) pendantquatre 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éeTARIFS_1ERE renfermant une observation par année pour les tarifs de premièreclasse. La série résultante contient les variables TRAJET, YEAR et TARIF.

La sortie prévue est la suivante :

Page 44: SAS base Introduction à SAS SQL SAS IML

44

Obs TRAJET YEAR TARIF

1 0000001 1 1600 2 0000001 2 1942 3 0000001 3 2285 4 0000001 4 1808 5 0000002 1 1600 6 0000002 2 1942 7 0000002 3 2285 8 0000002 4 1808 9 0000003 1 1761 10 0000003 2 2139 11 0000003 3 2516 12 0000003 4 1990 13 0000004 1 1761 14 0000004 2 2139 15 0000004 3 2516 16 0000004 4 1990 17 0000005 1 176 18 0000005 2 213 19 0000005 3 251 20 0000005 4 199

4. 6. Lecture de tables SAS

Parmi les instructions disponibles dans l’étape Data, certaines sont quasimentindispensables : il s’agit d’instructions de lecture. Sans l’une d’elles, l’étape Data travaillesans repartir d’une quelconque source de données, et créera donc un table contenant 0 ou1 observation.

Les principales instructions de lecture sont SET pour la lecture d’une seule table SAS à lafois 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 etdes variables créées au cours de l’étape.

Exemple :

A data NEW ; BID set A B ; ID1 run ; 23 54 6

NEWID134256

Dans la table résultante, les séries de données ne sont pas triées. Uneconcaténation par l’instruction SET empile les observations de tables SAS enfonction de la position relative des tables dans l’instruction SET.

Imbrication

Page 45: SAS base Introduction à SAS SQL SAS IML

45

Une imbrication intercale verticalement les observations à partir de deux ouplusieurs tables SAS en fonction d’une ou plusieurs variables communes. Ce quisignifie que les données sont empilées verticalement et qu’elles conservent leurordre de tri d’origine.

Exemple :

A data NEW ; BID set A B ; ID1 by ID ; 23 run ; 54 6

NEWID123456

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 sontpas identiques (excepté la variable identifiant LNAME).

A BLNAME DIVS DATE LNAME DIV MONTH DAY YEARALLEN A1 01DEC1998 ANDER B1 1 16 2000BADGE A2 16JUN1997 BASH B2 12 16 1999CARR A3 01SEP1998 COX B3 12 16 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 enutilisant 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 quiidentifie une année en particulier.

Enfin, on va utiliser l’option IN= pour détecter quelle table SAS a contribué à lacré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’observationcourante.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 DIVS DATEALLEN A1 01DEC1998ANDER B1 16JAN2000

Page 46: SAS base Introduction à SAS SQL SAS IML

46

BADGE A2 16JUN1998BASH B2 16DEC2000CARR A3 01SEP1998COX B3 16DEC1999

Regroupement : utilisation des variables FIRST. et LAST.

Si par exemple un fichier contient des observations au niveau individu, et quechaque individu contient un identifiant ménage, il peut être utile de créer une autretable, au niveau ménage, synthétisant une partie de l’information disponible auniveau individu.

On change alors le niveau d’observation entre la table d’entrée (niveau=individu) etle niveau de sortie (niveau=ménage).

Après tri d’une table par une procédure SORT (voir plus loin), l’appel de cette tablepar 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 unevariable LAST.variable_clé mise à 1 s’il y a changement de valeur, pour la variableconsidérée, entre l’observation courante et l’observation suivante. Ces deuxvariables ne sont pas stockées dans la table de sortie.

Par exemple, on a un fichier contenant les caractéristiques des logementssuccessifs occupés par des ménages. Ces ménages sont repérés par le variableIDENTet le logement par la variable CN. On veut conserver uniquement lescaractéristiques du 1er 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 :

Page 47: SAS base Introduction à SAS SQL SAS IML

47

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 unidentifiant commun aux différentes tables. Cette clé doit porter le même nom danschacune des tables à apparier. Les tables indiquées après MERGE sont luessimultané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 laplupart des cas n’a que peu d’intérêt. En fait, l’appariement est surtout utile quand ilest 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 devariables énoncées dans l’instruction BY.

Exemple

Pour l’étude de la relation herbivores-environnement, on dispose également d’uneautre table indiquant la densité au km_ de neuf gros herbivores dans dix zones. Lesherbivores 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 Zone A B C D E F G H I 1 1 1 1 15 0 7 9 0 0 12 2 2 2 0 0 0 0 1 0 0 5 3 3 3 3 28 0 3 2 0 1 7 4 4 3 8 1 0 10 0 0 3 25 5 5 1 1 13 0 1 6 0 0 21 6 6 4 3 21 0 4 0 0 1 18 7 7 2 1 1 0 2 44 0 0 13 8 8 2 1 4 0 1 10 0 0 18 9 9 0 4 2 1 0 78 30 0 22 10 10 0 2 6 0 0 71 83 0 17

On apparie les tables présentant les caractéristiques physiques des zones étudiéeset 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;

Page 48: SAS base Introduction à SAS SQL SAS IML

48

On obtient la table SAS suivante:

Obs ZONE HERB BOSQUET EAU HIPPO A B C D E F G H I 1 1 courte oui proche moyen 1 1 15 0 7 9 0 0 12 2 2 haute oui éloignée aucun 2 0 0 0 0 1 0 0 5 3 3 courte oui proche aucun 3 3 28 0 3 2 0 1 7 4 4 courte oui proche importan 3 8 1 0 10 0 0 3 25 5 5 courte oui moyenne aucun 1 1 13 0 1 6 0 0 21 6 6 courte oui proche aucun 4 3 21 0 4 0 0 1 18 7 7 courte non éloignée aucun 2 1 1 0 2 44 0 0 13 8 8 courte oui moyenne importan 2 1 4 0 1 10 0 0 18 9 9 courte non éloignée aucun 0 4 2 1 0 78 30 0 22 10 10 courte non éloignée aucun 0 2 6 0 0 71 83 0 17

L’option IN= n’est pas indispensable. Elle permet de sélectionner des observationsselon le fichier d’origine. Si par exemple on ne veut sélectionner que lesobservations 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 (oujointure stricte)

(IF A ; IF B)

Lorsqu’on utilise l’instruction BY avec l’instruction MERGE, la table doit êtrepréalablement triée ou indexée en fonction d’une ou plusieurs variables BY. On doitalors 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.

Page 49: SAS base Introduction à SAS SQL SAS IML

49

Exemple : On veut fusionner les tables les tables EMPLOYES et SALAIRES et negarder que les observations communes aux deux tables.

EMPLOYES SALAIRESEMP_ID FIRSTNAME EMP_ID EMP_SALARY

1 RONALD 2 28 6052 ALICE 4 51 6904 JORN 6 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 typenumérique lorsque la valeur de type caractère est utilisée dans un contextenumé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 care2. Day cases of curative care3. 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éalablementtransformer les codes dans chaque fichier. Pour le fichier 1 par exemple, il suffit defaire :

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èreen 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.

Page 50: SAS base Introduction à SAS SQL SAS IML

50

2. On crée une nouvelle variable avec le même nom que celui de la variableoriginale à l’aide de la fonction INPUT.

Fonctions de conversion

Fonction Description Exemples

PUT(varNum,format.)Conversion d’unevariable numérique envariable caractère

‘Année ’!!PUT(YEAR(16436),4.)_’Année 2004’

INPUT(varCar,informat.)Conversion d’unevariable caractère envariable numérique

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éesavec 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 ledictionnaire 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 arrivesouvent que l’on ait besoin de définir des formats personnalisés. Ces types deformats 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é. Ondistingue des formats caractères, appliqués à des variables caractères, et desformats 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 nombreusesPROC.

Syntaxe :

PROC FORMAT <LIB=bibliothequeDeSTockage> <liste d’options> ;VALUE nom_de_formatliste_de_valeurs=’valeur1 formatée’…liste_de_valeurs=’valeurn formatée’;

RUN ;

Plusieurs instructions VALUE peuvent être utilisées dans la même procédureFORMAT.

Tous les formats sont stockés dans un catalogue FORMATS de la bibliothèquepré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 laprocé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).

Page 51: SAS base Introduction à SAS SQL SAS IML

51

Les caractères autorisés dans le nom d’un format sont les mêmes que pour lesnoms de variables. Les chiffres ne sont pas autorisés ni comme premier, ni commedernier caractère. Le point terminant le nom du format n’est pas cité dansl’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 classesquinquennales, 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 del’intervalle, un signe < sera placé immédiatement à gauche ou à droite du tiret. Onpeut utiliser en guise de borne pour les intervalles les mots-clés HIGH et LOW. Cesmots-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 3sera affichée telle qu’elle car elle n’appartient à aucune tranche du format Fnbenfdé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ésqualitatives s’effectuera de la manière suivante :

Page 52: SAS base Introduction à SAS SQL SAS IML

52

PROC FORMAT ;VALUE $ REGION‘Paris’,‘Hauts-de-Seine’,’Seine-Saint-Denis’,’Val-de-Marne’,’Yvelines’,‘Vald’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 quel’on souhaite visualiser le codage d’un format donné (passage des valeurs initialesaux valeurs formatées). Pour cela, il suffit d’utiliser la procédure FORMAT avecl’instruction SELECT ou EXCLUDE en conjonction de l’option FMTLIB. La fenêtreOutput contient alors des tableaux récapitulatifs des formats créés. Ils sont affichéspar 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 oudans certaines procédures.

Si les formats que l’on souhaite utiliser sont stockés dans une bibliothèque autreque WORK, alors l’instruction OPTION FMTSEARCH = (mabib1 mabib2 WORK) ;est nécessaire pour y accéder. SAS ne recherche des formats que dans lesbibliothèques énumérées : il est indispensable donc de préciser également lalibrairie WORK.

Page 53: SAS base Introduction à SAS SQL SAS IML

53

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 (sitous les âges sont compris sont supérieurs ou égaux à 15).

Si un même format s’applique à plusieurs variables, on indiquera la liste desvariables sur lesquelles il s’applique (séparées par des blancs), suivi du nom duformat (suivi de .). S’il s’agit d’un format pour une variable caractère, il seraprécédé de $, comme par exemple : format dpt $region. ; pour appliquer le formatregion 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 desdonnées informatiques des SGBD relationnels. La procédure SQL permet d’obtenirun 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 leSQL.

Extraction de données

Une table SAS peut être créée par la commande CREATE TABLE. La table SASreçoit ainsi un nom et des variables. La table existe physiquement mais elle est videde 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 FORMATquel est le format de sortie (écriture).

Page 54: SAS base Introduction à SAS SQL SAS IML

54

Exemple : créer la table PARC avec les variables :Zone (ZONE), entierHauteur 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électionselon différents critères : on liste les variables (séparées par des virgules) dansl’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 lesdonné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 courte8 courte9 courte10 courte11 courte12 haute13 courte

Mais elle peut aussi être une table SAS en utilisant la syntaxe suivante :

CREATE TABLE nom_de_tableAS SELECT…

Page 55: SAS base Introduction à SAS SQL SAS IML

55

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 conditionscombinées entre elles par les opérateurs logiques AND, OR ou NOT et desparenthè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’eaucontient 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 BOSQUET EAU HIPPO

1 7 courte non éloignée aucun2 9 courte non éloignée aucun3 10 courte non éloignée aucun4 12 haute oui éloignée aucun

La clause ORDER BY

La clause ORDER BY permet de trier le résultat de la requête d’après la valeurd’une ou plusieurs variables. En ajoutant DESC, on précise l’ordre décroissant. Pardé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 nombred’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 desfichiers très longs. Il suffit alors de choisir un n petit… puis d’ôter cetteoption si la requête donne satisfaction.

OUTOBS=n restreint à n le nombre d’observations en sortie (les n dernières).

Page 56: SAS base Introduction à SAS SQL SAS IML

56

Exemple : trier la table parc3 par la variable ZONE (ordre descendant) et neconserver que les variables ZONE, HIPPO, EAU et la dernière observation pourlaquelle 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 lesdoublons. Il est possible de ne garder qu’un exemplaire de chaque ligne en ajoutantDISTINCT 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éecourte non éloignéecourte oui moyennecourte 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. Cetteclause 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 tableGROUP BY variable1, variable2…

L’expression HAVING permet d’opérer sur un sous-ensemble d’observations de latable. C’est l’équivalent du WHERE appliqué au groupe. La clause GROUP BY doittoujours précéder une expression HAVING et définit le groupe sur lequell’expression HAVING va opérer. On utilise l’expression HAVING lorsque la requêteutilise une fonction de groupe (AVG, COUNT…).

Exemple : HAVING expression sur le résultat d’une fonction somme

SELECT fonction(variable) AS nomvarFROM tableGROUP BY variable1, variable2…HAVING nomvar expression

Page 57: SAS base Introduction à SAS SQL SAS IML

57

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 coefficientsde gini. Sélection des observations pour lesquelles la moyenne (Mgini) estsupérieure à 70.

Les fonctions

Les fonctions de groupe effectuent un calcul sur l’ensemble des observations d’unetable spécifiée après la clause FROM ou sur chaque groupe défini par une clauseGROUP BY.

Ces fonctions sont les suivantes :

MEAN, AVG : moyenneCOUNT, N : compte le nombre de valeurs non manquantesCV : coefficient de variationMAX : donne la plus grande valeur d’une variableMIN : donne la plus petite valeur d’une variableSUM : sommeVAR : variance

Syntaxe :

SELECT fonction1(variable) <AS nomvar1 LABEL=’label’>,fonction2(variable) <AS nomvar2 LABEL=’label’>,

FROM tableGROUP BY variable

AS permet de donner un nom à la variable résultat lorsque l’on crée une table ensortie (CREATE TABLE).LABEL permet d’associer un label à la colonne.

Exemple : calculer la moyenne du coefficient de gini, les coefficients minimal etmaximal 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

Page 58: SAS base Introduction à SAS SQL SAS IML

58

L’expression when

Cette expression permet de changer la représentation des données en donnant uncode chiffré à une chaîne de caractères ou inversement, en donnant à un code unintitulé 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 clauseSELECT, et de préciser dans la clause WHERE (ou ON) la condition d’égalité entreles variables qui réalisent la jointure entre les tables. La clause FROM doit contenirle 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. Ondésigne alors la variable par alias.variable.

1/ La condition de fusion des tables est exprimée dans une clause WHERE. Ellepeut porter sur plusieurs variables.

FROM table1, table2WHERE condition

Cette jointure correspond au cas IF A AND IF B du merge en SAS de base. Onsélectionne uniquement les observations communes.

Page 59: SAS base Introduction à SAS SQL SAS IML

59

PROC SQL ;SELECT a.*, b.*FROM table1 AS a,

table2 AS bWHERE a.var1=b.var1;

QUIT;

2/ Jointure à gauche : la condition de fusion des tables est exprimée dans uneclause ON.

FROM table1 LEFT JOIN table2ON condition

Elle correspond au cas IF A du merge.

On sélectionne toutes les observations de la table A et les observations de latable B qui correspondent (ON).

PROC SQL ;SELECT a.*, b.*FROM table1 AS a

LEFT JOINtable2 AS b

ON a.var1=b.var1;QUIT;

3/ Jointure à droite :

FROM table1 RIGHTJOIN table2ON condition

Elle correspond au cas IF B du merge.

On sélectionne toutes les observations de la table B et les observations de latable A qui correspondent (ON).

PROC SQL ;SELECT a.*, b.*FROM table1 AS a

RIGHT JOINtable2 AS b

ON a.var1=b.var1;QUIT;

4/ Jointure « full »

FROM table1 FULL JOIN table2ON condition

Elle correspond au merge by sans condition.

On sélectionne toutes les observations de la table A et toutes les observationsde la table B en mettant les observations communes en correspondance.

PROC SQL ;SELECT a.*, b.*FROM table1 AS a

FULL JOINtable2 AS b

ON a.var1=b.var1;QUIT;

Cette méthode de jointure pose en fait un problème. Pour les observations detable2 qui n’étaient pas dans table1, var1 n’est pas renseignée dans la table oula sélection résultante. Aussi, la jointure full n’est intéressante que si les deuxtables contiennent les mêmes observations. Sinon, il est préférable d’effectuerla fusion à partir d’une étape data, avec l’instruction merge.

Page 60: SAS base Introduction à SAS SQL SAS IML

60

5/ Produit cartésien

On fusionne chaque observation de la table A avec chaque observation de latable B. Si A contient na observations et B nb observations, le résultat contientnaXnb lignes.

PROC SQL ;SELECT a.*, b.*

FROM table1 AS atable2 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 obtenirdavantage d’informations.

Exemple : Nous avons la table EMPLOI avec les variablesEmpnum (numéro de l’employé)Empnom (nom de l’employé)Emptitre (titre de l’employé)Numsup (numéro du supérieur)

EMPNUM EMPNOM EMPTITRE NUMSUP101 John head man. .201 Betty manager 101213 Joe respvent 201214 Jeff respvent 201401 Sam manager 101412 Nick respvent 401

Construire une table avec pour chaque employé le nom de son supérieurhié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 SUPTITRE101 John head man. .201 Betty manager 101 John head man.213 Joe respvent 201 Betty manager214 Jeff respvent 201 Betty manager401 Sam manager 101 John head man.412 Nick respvent 401 Sam manager

Page 61: SAS base Introduction à SAS SQL SAS IML

61

L’union

L’opérateur UNION est un opérateur ensembliste. Il effectue l’union des résultats dedeux requêtes SELECT, c’est à dire qu’à partir de deux tables résultats, il en créeune 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 lacommande select.

PROC SQL ;SELECT variablesFROM table1UNIONSELECT variablesFROM table2 ;

QUIT ;

Exemple :

PROC SQL ;CREATE TABLE table3 ASSELECT *FROM table1UNIONSELECT *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. Ellenécessite le nom de la table, le nom des variables à initialiser et la valeur à leurassigner.

INSERT INTO tableSET 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 sous-ensemble d’une table dans une autre. La table cible doit exister préalablement, etles types de données doivent correspondre de façon très précise.

Page 62: SAS base Introduction à SAS SQL SAS IML

62

Exemple : insérer des observations de la table parc4 (zone 14 à 20) dans la tableparc3

proc sql; insert into parc3 select * from parc4 where ZONE>13;quit;

On peut également insérer les valeurs de chaque observation avec l’instructionVALUES.

INSERT INTO tableVALUES (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’uneclause SET définissant les modifications à apporter, et d’une clause WHERE avecle critère précisant les observations à modifier.

UPDATE TABLESET variable1=valeur1, variable2=valeur2…WHERE condition

Pour modifier toutes les observations d’une table, il n’est pas nécessaire d’inclureune 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 latable concernée, et d’une clause WHERE avec le critère précisant les observationsà supprimer.

DELETE FROM tableWHERE condition

Exemple : détruire les observations des zones 14 et plus.

proc sql; delete from parc3 where ZONE>13;quit;

Page 63: SAS base Introduction à SAS SQL SAS IML

63

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 suivantest la description de la table chien1.

La première partie recense les grandes caractéristiques de la table. On y retrouveson nom, la version de SAS qui l’a créée, sa date de création et sa date de dernièremodification, 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 partieprésente peu d’intérêt.

Data Set Page Size 8192Number of Data Set Pages 1First Data Page 1Max Obs per Page 101Obs in First Data Page 27Number of Data Set Repairs 0File Name C:\DOCUME~1\WOLBER_O\LOCALS~1\Temp\SAS Temporary Files\_TD1256\chien1.sas7bdatRelease Created 9.0101M3Host Created XP_PRO

La partie suivante présente les caractéristiques des différentes variables.

Alphabetic List of Variables and Attributes

# Variable Type Len Format Informat Label

6 AFFECTION Num 8 AFFECTION 7 AGRESSIVITE Num 8 AGRESSIVITE 8 FONCTION Num 8 FONCTION 5 INTELLIGENCE Num 8 INTELLIGENCE 1 NOM Char 22 $22. $22. NOM 3 POIDS Num 8 POIDS 2 TAILLE Num 8 TAILLE 4 VELOCITE Num 8 VELOCITE

Enfin, une dernière partie, facultative, décrit le tri dont la table fait éventuellementl’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 variablesprésentes dans une librairie.

Il suffit alors de coder PROC CONTENTS DATA=nom_de_librairie._ALL _;

Page 64: SAS base Introduction à SAS SQL SAS IML

64

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 ouplusieurs variables. Les observations, une fois triées, peuvent être stockées dansune 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 Table SAS en entrée à trier.OUT=nom_de_table 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 seraordonné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’instructionen compte plusieurs) servira à les ordonner et ainsi de suite…

Par défaut, le tri selon chacune de ces variables est ascendant. Pour préciser quel’ordre de tri est décroissant selon une des variables, son nom doit être précédé dumot-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 doublonsobservés sur les variables de tris. Ces observations en doublon étant éliminées dela table créée par la procédure SORT, il est recommandé de combinersystématiquement l’emploi des options NODUPKEY et OUT.

Cette option ne recherche que les doublons sur les variables citées dansl’instruction BY. Si on veut éliminer les observations exactement identiques, onutilisera 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émentairedans 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.

Page 65: SAS base Introduction à SAS SQL SAS IML

65

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 tableSAS. Elle permet aussi d’imprimer des totaux et sous totaux pour des variablesnumé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 detable n’est précisé). Ce mot clé se retrouve dans la totalité des procédures. Si latable est temporaire, on précisera uniquement son nom, si elle a été stockée demanière permanente, on la fera précéder du nom logique de la librairie de stockage(défini dans l’instruction LIBNAME).

Instructions :

VAR liste de variables à imprimer. Toutes par défaut.BY des impressions séparées sont effectuées pour chaque modalité des

groupes BY. Le fichier doit avoir été auparavant trié ou indexé selon cesvariables.

ID permet l’identification des observations sur le listing par une variabledéfinie à la place du numéro d’observation.

PAGEBY permet de contrôler les variables indiquées en BY pour lesquelless’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 chaquebloc.

SUMBY s’utilise uniquement avec les instructions SUM et BY. Affiche un sous-total 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, SASimprime toutes les variables et toutes les observations de la table en entrée (ladernière table modifiée dans la session courante si aucune table n’est spécifiée) etles formats d’affichage des variables sont ceux préalablement attribués auxvariables 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;

Page 66: SAS base Introduction à SAS SQL SAS IML

66

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 dulisting.

Quelques options de l’instruction PROC PRINT :

LABEL affiche le label des variables plutôt que leur nom en tête dulisting.

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 : elleajoute 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 depage, le nombre maximum d’observations sera imprimépour une même série de variables sur une page, puis cesmêmes observations seront inscrites pour une autre sériede 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). Parexemple, on ne veut que les démocraties stables :

proc print data=pays.russet (where=(demo=1)) noobs; id pays;run;

Page 67: SAS base Introduction à SAS SQL SAS IML

67

Listing avec totalisation

On veut imprimer le nombre de tués lors de manifestations violentes et les sommeren fonction de l’instabilité politique (démocratie stable, démocratie instable,dictature). On utilise l’instruction SUM (affichage du total d’une variable) et commel’on souhaite simultanément obtenir des sous-totaux selon les modalités d’unevariable en catégories, on utilise simultanément l’instruction BY. L’instruction BYdemande 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é quelquesobservations) :

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 ====

6285Exemple : on veut imprimer les recettes et les dépenses d’une multinationale parrégion et par Etat. On veut les sommes par région, mais pas par Etat.

proc sort data=ventes; by Region Etat;run;

Page 68: SAS base Introduction à SAS SQL SAS IML

68

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 tableCOPY : copier ou déplacer un ensemble de tables d’une librairie à

une autreDELETE : détruire un ensemble de tablesAPPEND : 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.

Page 69: SAS base Introduction à SAS SQL SAS IML

69

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 tablenomn est détruite.

Concaténation de tables

Deux tables ayant la même structure peuvent être mises bout à bout, la tablerésultante ayant un nombre d’observations égal à la somme des observations desdeux tables existantes.

APPEND BASE=table_SAS DATA=table_SAS <FORCE>;

Par défaut, seules les variables présentes dans chacune des deux tables (mêmenom, même type, même longueur) sont prises en compte dans l’opération deconcaté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.

Page 70: SAS base Introduction à SAS SQL SAS IML

70

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éed’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, onutilise généralement l’instruction VAR. Elle est valable dans un grand nombre deprocédures statistiques, en particulier MEANS, UNIVARIATE et CORR. Lesvariables numériques sont les seules autorisées dans une instruction VAR ou lesprocédures statistiques.

VAR variable(s)Numérique(s) ;

En l’absence d’une instruction VAR dans les procédures où cette dernière estvalide, la procédure utilisera toutes les variables numériques de la table SAS enentrée.

5. 1. 3. L’analyse statistique par sous-groupes

Pour mener une analyse sur plusieurs sous-groupes d’observations, on dispose desinstructions CLASS et BY.

BY <DESCENDING> variable(s) ;CLASS variable(s) ;

On obtient des résultats par sous-groupe étudié mais l’affichage des sorties derésultats diffère généralement selon l’emploi des instructions BY ou CLASS.

Page 71: SAS base Introduction à SAS SQL SAS IML

71

Différences entre les instructions BY et CLASSdans les procédures de statistique

Instruction BY Instruction CLASSValable dans toutes les procéduresd’analyse statistique

Valable uniquement dans lesprocédures MEANS, UNIVARIATE etTTEST.

Les valeurs manquantes de chaquevariable du BY constituent un sous-groupe qui est pris en compte dansl’analyse.

Par défaut, les valeurs manquantesdes variables de classe ne sont pasprises en compte dans l’analyse.

Nécessite un tri préalable de la tableen entrée : tri par la même liste devariables que celle de l’instruction BYet dans le même ordre.

Ne nécessite pas de tri préalable de latable en entrée.

Pendant la phase de calcul, SAS negarde en mémoire que lesobservations d’un sous-groupe à lafois.

Toutes les observations de la tablesont conservées pendant la phase decalculs. On évitera CLASS pour lestables 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 valeursdistinctes d’une variable, mais en faisant des regroupements, il est possibled’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 sansavoir à 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 lesobservations de la table en entrée par les valeurs d’une variable numérique. Pourcela, on dispose des instructions WEIGHT ou FREQ. Les deux instructions nepeuvent pas être utilisées simultanément.

WEIGHT|FREQ variableNumérique ;

Avec ces deux instructions, les observations ayant un poids négatif ou nul sontignorées dans les calculs. En outre, avec FREQ, les valeurs non entières sonttronqué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 del’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 nombred’occurrences de l’observation correspondante : le nombre d’observationsrenseignées considéré est égal à la somme des pondérations données dansl’instruction FREQ.

Page 72: SAS base Introduction à SAS SQL SAS IML

72

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 oudes tableaux croisés à plusieurs dimensions.

La procédure TABULATE s’appuie sur trois instructions particulières : CLASS, VAR etTABLE.

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égoriesconstituent des lignes et/ou des colonnes du tableau. Par défaut, les valeursmanquantes de ces variables n’apparaissent pas dans le tableau ;

• VAR identifie une ou plusieurs variables numériques comme étant celles sur lesquellesdes statistiques seront calculées. Les valeurs manquantes de ces variables neparticipent pas aux calculs des statistiques.

En l’absence de statistiques et de variables numériques citées dans VAR, la procédureTABULATE produit des comptages d’observations (N).

• TABLE est une instruction obligatoire. Elle permet de spécifier l’organisation du tableauainsi 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 oule 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 destatistique, des sommes sont calculées par défaut.

Exemple :

Dans le tableau suivant, les variables ANNEE et SEXE sont des variables de l’instructionCLASS : chacune de leurs valeurs constitue une ligne ou une colonne du tableau. Lavariable REVENU_BRUT est citée, elle, dans l’instruction VAR, car on calcule desstatistiques (minimum, moyenne) sur ses valeurs.

ANNEE2003 2004

Revenu brut Revenu brut Revenu brut Revenu brutMINIMUM MOYENNE MINIMUM MOYENNE

FSEXE

HEnsemble

Page 73: SAS base Introduction à SAS SQL SAS IML

73

Structures de tableaux possibles (lignes ou colonnes)

Juxtaposition (A B) Imbrication (A * B)

En lignes A

B

B

BA

B

En colonnes

A B

B B B

La dernière partie de l’instruction TABLE concerne les calculs à effectuer. L’écrituregénérale est de la forme nomVariabledeCalcul*statistique, où la variable de calcul a sonnom cité dans l’instruction VAR et la statistique est l’une des suivantes :

• NNombre total d’observations ;

• PCTN, ROWPCTN, COLPCTNPourcentages d’un nombre d’observations (pourcentage de l’ensemble, pourcentage-ligne et pourcentage-colonne respectivement) ;

• SUM, MEAN STD, MAX, MIN, RANGE, MEDIAN, Q1, Q3, P1, P5, P10, P90, P95, P99Somme, moyenne, écart-type, maximum, minimum, étendue, médiane, quartiles,centiles ;

• NMISSNombre d’observations manquantes de la variable de calcul ;

• PCTSUM, ROWPCTSUM, COLPCTSUMPourcentage de la somme d’une variable de calcul (respectivement pourcentage dutotal, pourcentage du total-ligne et pourcentage du total-colonne).

Il est possible d’effectuer, avec cette instruction TABLE, des factorisations ou mises encommun : par exemple, au lieu d’écrire VAR1*SUM VAR2*SUM, on pourra écrire (VAR1VAR2)*SUM pour un résultat semblable.

Pour changer l’intitulé d’une case du tableau, qu’il corresponde au nom ou au label d’unevariable ou à un mot-clé (ALL ou une statistique), il suffit d’ajouter à côté de l’élémentconcerné="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.

Page 74: SAS base Introduction à SAS SQL SAS IML

74

Pour obtenir le tableau transposé du précédent, on remplace l’instruction TABLEpré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 êtrespécifiées dans une instruction CLASS.

Cet exemple génère, à partir de la table chien, un tableau croisé de la variable affection enlignes avec la variable agressivité en colonnes. Les statistiques sont les effectifs (N) et lespourcentages (PCTN). L’utilisation du mot ALL à la suite des deux variables du tableaudonne 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;

Page 75: SAS base Introduction à SAS SQL SAS IML

75

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 laprocé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 dutableau 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. Ilsuffirait 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 desoptions 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 leseffectifs 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 distributionspeuvent être demandées simultanément, chacune pouvant être unidimensionnelle oumultidimensionnelle.

Dans le cas de demande de plusieurs distributions simultanées, il suffit de séparer chaquedistribution par un espace. Par exemple, TABLES a b correspond à la demande de ladistribution 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.

Page 76: SAS base Introduction à SAS SQL SAS IML

76

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*da - - 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’effectifl’effectif cumuléle pourcentagele pourcentage cumulé.

Pour une table multidimensionnelle, PROC FREQ calcule :le pourcentage lignele pourcentage colonnele pourcentage totall’effectif.

Option ORDER

L’instruction ORDER= permet de spécifier l’ordre dans lequel SAS devra éditer les valeursdes 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 formatd’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 nonformatées. C’est l’ordre utilisé par défaut.

Exemple :

proc freq data=voiture order=internal; table origine*finition;run;

Page 77: SAS base Introduction à SAS SQL SAS IML

77

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 ayantpréalablement regroupé les voitures européennes dans une seule catégorie ‘Europe ‘, etles autres voitures dans la catégorie ‘Autres’ (utiliser une procédure Format, puis uneinstruction 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

Page 78: SAS base Introduction à SAS SQL SAS IML

78

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 colonneNOROW : supprime l’impression des pourcentages ligeNOFREQ : supprime l’impression des fréquences croiséesNOPERCENT : supprime l’impression des pourcentages croisésNOCUM : supprime l’impression des fréquences et des pourcentages

cumulésCUMCOL : 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

statistiquesOUT= : stocke les résultats de la demande dans la table SASMISSING : 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 priseen 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épendanceDEVIATION : édite les écarts entre les effectifs observés et théoriquesLIST : imprime des tables de dimension 2 sous forme de liste plutôt que

de tableauxCELLCHI2 : imprime la contribution de chaque case à la statistique du chi2

totaleCHISQ : 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 »

Page 79: SAS base Introduction à SAS SQL SAS IML

79

L’option LIST édite les tableaux croisés demandés dans l’instruction TABLE sous forme deliste. 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 desvariables, même celles d’effectifs nul dans le cas où l’on demande un affichage du tableausous 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

SyntaxeTABLES 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 sortiecontiendra une observation par croisement des modalités des différentes variables. Lesvariables présentes dans cette table, outre les variables origine de la demande TABLESsont :

COUNT, l’effectifet 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 colonnePCT_ROW : pourcentage lignePCT_TABL : pourcentage par rapport à l’ensemble de la table de dimension 2 (casdes 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 indicateursstatistiques peuvent être sauvegardés dans une autre table SAS, par l’adjonction d’uneautre instruction :OUTPUT OUT=nom_de_table <liste_de_statistiques_à_sauvegarder> ;

Page 80: SAS base Introduction à SAS SQL SAS IML

80

Les test d’indépendance

L’utilisation de l’option CHISQ permet de réaliser des tests d’indépendance. L’hypothèsenulle 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èsfiable. Cette réserve mise à part, le test du Chi-2 montre une probabilité d’accepterl’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 troisderniers coefficients, phi, contingence et V de Cramer : pour ce dernier, par exemple, laliaison observée correspond à 67% à une liaison parfaite entre les deux variables.

5. 4. La procédure MEANS : analyser la distribution de variables quantitatives (calcul destatistiques simples)

PROC MEANS permet d’analyser la distribution d’une variable numérique sur unepopulation 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 dedispersion) ;

• é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.

Page 81: SAS base Introduction à SAS SQL SAS IML

81

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 instructionspé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 calculerla 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;

Page 82: SAS base Introduction à SAS SQL SAS IML

82

---------- 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 groupescorrespondant au croisement de toutes les variables citées dans cette instruction. Avecl’instruction TYPES, on peut préciser les croisements voulus. Les combinaisons sespécifient avec le nom d’une variable de l’instruction CLASS, éventuellement séparée decelle avec laquelle elle est croisée par un astérisque (*). Le niveau le plus agrégé, n’utilisantaucune variable de l’instruction CLASS, se note ().

Exemple : on souhaite obtenir la moyenne des cylindrées et de la puissance de 18 voituressur 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 ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ

Page 83: SAS base Introduction à SAS SQL SAS IML

83

N Origine Tranche_prix Obs Variable Mean ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ D 1 1 Cylindree 1979.00 Puissance 100.0000000

2 2 Cylindree 1790.50 Puissance 91.5000000

F 1 4 Cylindree 1469.25 Puissance 65.2500000

2 2 Cylindree 2053.00 Puissance 104.0000000

GB 2 1 Cylindree 1798.00 Puissance 82.0000000

I 1 1 Cylindree 1350.00 Puissance 79.0000000

2 3 Cylindree 1484.00 Puissance 96.3333333

J 1 2 Cylindree 1467.50 Puissance 69.0000000 2 1 Cylindree 1998.00 Puissance 115.0000000

U 1 1 Cylindree 1294.00 Puissance 68.0000000 ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ

N Origine Finition Obs Variable Mean ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ D B 2 Cylindree 1986.00 Puissance 99.0000000

TB 1 Cylindree 1588.00 Puissance 85.0000000

F B 2 Cylindree 1680.50 Puissance 67.0000000

M 2 Cylindree 1258.00 Puissance 63.5000000

TB 2 Cylindree 2053.00 Puissance 104.0000000

GB B 1 Cylindree 1798.00 Puissance 82.0000000

I B 2 Cylindree 1467.50 Puissance 88.5000000 ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ

Page 84: SAS base Introduction à SAS SQL SAS IML

84

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 sontgardées dans l’analyse si l’on utilise l’instruction BY. Si l’on utilise CLASS, SAS ne prendpas en compte par défaut le groupe constitué des valeurs manquantes de la variable declasse ; l’option MISSING dans l’instruction PROC MEANS permet de considérer que dansune variable de l’instruction CLASS, la valeur manquante définit un groupe à part entière.

Autres instructions

VAR : variables (numériques) pour lesquelles on sollicite la procédureBY : la procédure s’exécute pour chaque groupe d’observationWEIGHT : variable de pondérationOUTPUT : permet de stocker les résultats dans une tableID : 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 : inverse l’ordre des observations dans la table en sortieNOPRINT : empêche PROC MEANS de produire un état dans la fenêtre OUTPUT.IDMIN : pour retenir la valeur minimum de la variable ID au lieu de son maximum.VARDEF : diviseur calculé pour les variances et les covariancesDF : degrés de liberté (n-1)N : nombre d’observationsWDF : somme des poids – 1 (variance corrigée – estimateur non biaisé)WEIGHT : somme des poids.ALPHA : 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 uneplus forte concentration des observations ; un coefficient négatif indiqueune courbe plus « aplatie »).

PRT : probabilité de nullité de la moyenne (test de Student)RANGE : étendueSKEWNESS : coefficient de symétrie (indique sur les observations sont réparties

équitablement autour de la moyenne (le coefficient est alors nul) ou si ellessont plutôt concentrées vers les valeurs les plus faibles (coefficient positif)ou vers les valeurs les plus élevées (coefficient négatif).

SUM : sommeT : valeur de StudentVAR : 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 lesstatistiques 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ééeStatistiques : 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= etdonne les mêmes noms aux variables en sortie que les variables en entrée. Une seulestatistique peut être sauvegardée par ce biais.

Page 85: SAS base Introduction à SAS SQL SAS IML

85

statistique=nom1…nomn calcule les statistiques sur toutes les variables de VAR mais les stocke sous un nomdifférent. Les noms de la liste sont attribués dans l’ordre des variables de VAR.

statistique(var1…varn)=nom1…nomnapplique 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 serviau 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 unevariable est agrégée à ce niveau.

Exemple dans le cas de 3 variables :

CLASS A B C :

A B C _TYPE_niveau agrégé niveau agrégé niveau agrégé 0niveau agrégé niveau agrégé niveau détaillé 1niveau agrégé niveau détaillé niveau agrégé 2niveau agrégé niveau détaillé niveau détaillé 3niveau détaillé niveau agrégé niveau agrégé 4niveau détaillé niveau agrégé niveau détaillé 5niveau détaillé niveau détaillé niveau agrégé 6niveau détaillé niveau détaillé niveau détaillé 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 del’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 automatiquedes noms.

Page 86: SAS base Introduction à SAS SQL SAS IML

86

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. Pluscomplè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 ensortie.

HISTOGRAM trace un histogramme pour les variables spécifiées.

PROBPLOT trace la distribution des variables, en la comparant à une distributionthéorique spécifiée par l’utilisateur.

La procédure UNIVARIATE fournit par défaut une large gamme de statistiques descriptivesclassées par thème.

Exemple :

proc univariate data=demography; var pop_1996; id country;run;

Page 87: SAS base Introduction à SAS SQL SAS IML

87

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 lecoefficient 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, desindicateurs de tendance centrale (moyenne, médiane, mode) ; et à droite, des indicateursde 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 lamoyenne (Student : test de Student et Signed Rank : test des rangs signés de Wilcoxon) etun 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’accepterl’hypothèse de nullité.

Les trois probabilités (p Value) sont inférieures à 0,0001. On en conclut que la moyenne etla médiane des populations sont significativement non nulles (l’intérêt d’une telle informationest limitée), car on peut rejeter l’hypothèse de nullité avec une très forte probabilité (1-pvalue).

Il est possible de remplacer la valeur MuO=0 prise par défaut pour ces tests par une valeurréelle quelconque grâce à l’option Mu0=valeur. On écrirait par exemple :

proc univariate data=demography MU0=38; var pop_1996; id country;run;

Page 88: SAS base Introduction à SAS SQL SAS IML

88

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 Obs Value Country Obs

1.1 Mauritius 134 161.1 Brazil 59 1.1 Guinea-Bissau 126 200.4 Indonesia 100 1.1 Gambia 123 269.4 U.S.A. 80 1.1 Gabon 122 944.6 India 87 1.3 Trinidad 76 1232.1 China 15

Le cinquième tableau fournit une liste qui permet d’identifier les 10 observations extrêmesde la variable étudiée.

Quelques précisions sur le premier tableau

N nombre d’observations

Mean moyenne

Std Deviation écart-type

Skewness coefficient d’asymétrieSi 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 sontconcentrées à gauche (la moyenne est inférieure à la médiane). On a unhistogramme de la forme :

0 50 100 150 200 250 300Pop_1996

0

50

100Frequency

Si le coefficient d’asymétrie est inférieur à 0, les observations sontconcentrées à droite (la moyenne est supérieure à la médiane). On a unhistogramme de la forme :

Page 89: SAS base Introduction à SAS SQL SAS IML

89

33 39 45 51 57 63 69 75 81Life_expect_1995

0

20

40Frequency

Si le coefficient est inférieur à -1 ou supérieure à 1, on a une distributiontrès asymétrique.

Uncorrected SS Somme des carrés non corrigés : Σ xi_

Coeff variation (écart-type) / moyenne

Kurtosis Permet de comparer l’étalement d’une distribution par rapport à la loinormale. Le coefficient est proche de 0 si on a une distribution proche dela 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 estpositif.

Corrected SS Somme des carrés corrigés : Σ (xi – m)_

Std Error Mean (écart-type) / √(n)

Quelques précisions sur le deuxième tableau

Mode Valeur la plus fréquente. Si on ne retrouve pas plusieurs fois la mêmevaleur, on prend la plus petite.

Range Différence entre la plus grande et la plus petite valeur

Interquartile range Différence entre Q3 et Q1 (dans l’exemple ci-dessous, Q3-Q1=41)

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é (normalprobability plot).

Le diagramme stem-and-leaf

Il s’agit d’un histogramme qui fournit certaines informations sur les valeurs numériques desdonné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 8081 82 83 84 87 87 88 89 90 91 93 93 98

Page 90: SAS base Introduction à SAS SQL SAS IML

90

On va obtenir le diagramme suivant :

9 0 1 3 3 8

8 0 0 1 2 3 4 7 7 9 9

7 0 0 1 3 4 5 5 6 6 7 7 9 9

6 0 3 5 6 8

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’exempleprécédent, la première colonne correspond à la dizaine et les valeurs de la deuxièmecolonne à l’unité.

Le diagramme à moustaches

Le diagramme à moustaches fournit des informations sur la variabilité des données et surles 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 limiteinfé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=bluew=1);

run;

Sorties partielles obtenues par l’option PLOT :

Page 91: SAS base Introduction à SAS SQL SAS IML

91

Stem Leaf # Boxplot 7 5 1 0 7 6 6 2 1 0 5 5 334 3 | 4 | 4 044 3 | 3 57 2 | 3 3 1 | 2 6 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 lavariable rent. Pour passer des valeurs du stem-and-leaf plot aux valeurs de l’échantillon, ilsuffit de multiplier les valeurs du diagramme par 10 (101). Ainsi, une seule observation àune valeur de l’ordre de 75. A la 6ème ligne, on lit que 3 observations ont les valeursrespectives 53, 53 et 54.

La boîte à moustache indique que la moyenne est supérieure à la médiane et que ladistribution 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érisquesreprésentent les valeurs observées.

Page 92: SAS base Introduction à SAS SQL SAS IML

92

Les courbes de normalité permettent de vérifier visuellement que les données suivent unedistribution approximativement normale. L’axe vertical représente les données réelles etl’axe horizontal les percentiles attendus d’une distribution normale. Les diagrammessuivants illustrent les courbes types que l’on peut obtenir :

1. les données suivent une distribution normale2. les données sont concentrées à gauche3. les données sont concentrées à droite4. la distribution est plus étalée qu’une distribution normale5. 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 valeursobservées de la variable avec les percentiles d’une distribution théorique spécifiée. Si onspécifie normal, on obtient le tracé d’une ligne de référence correspondant à la distributionnormale (estimée avec les paramètres mu – moyenne - et sigma – écart-type – des valeursobservé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 courbede densité d’une loi normale de mêmes moyenne et variance.

Page 93: SAS base Introduction à SAS SQL SAS IML

93

Test de normalité

SAS permet de réaliser quatre tests de normalité d’une distribution : les tests de Shapiro-Wilk, 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 faibleconduit à rejeter l’hypothèse de normalité. A l’inverse, pour les statistiques des tests deKolmogorov-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 etAnderson-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 NORMALdans 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 (dePEARSON, de SPEARMAN, de KENDALL ou de HOEFFDING) et peut produire desmatrices de produits croisés ainsi que des matrices de variance-covariance. PROC CORRcalcule aussi des statistiques univariées simples et crée de nouveaux tableaux contenantces statistiques univariées et les corrélations. Elle permet enfin de calculer des coefficientsde corrélation partiels entre un couple de variables en éliminant l’influence d’une liste devariables.

De plus, à partir de la version 9 de SAS, cette procédure peut produire des graphiques detype « 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’influencedes 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 lescorrélations avec les variables de VAR.

WEIGHT : variable de pondération. A utiliser uniquement pour le calcul du coefficient dePearson.

FREQ : spécifie la variable numérique dont la valeur représente la fréquence del’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.

Page 94: SAS base Introduction à SAS SQL SAS IML

94

OUTK : idem avec les corrélations de KENDALL.NOMISS : exclusion des observations à valeur manquante de tous les calculs.VARDEF : spécifie le diviseur utilisé pour les variances.COV : impression de la matrice de variances covariances.NOSIMPLE : 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 Std Dev Sum Minimum Maximum Label

Cylindree 18 1632 373.92985 29370 1166 2664 Cylindrée Puissance 18 84.61111 20.37628 1523 55.00000 128.00000 Puissance

Pearson Correlation Coefficients, N = 18 Prob > |r| under H0: Rho=0

Cylindree Puissance

Cylindree 1.00000 0.79663 Cylindrée <.0001

Puissance 0.79663 1.00000 Puissance <.0001

On a d’abord la liste des variables d’analyse, puis des statistiques descriptives usuellespour chaque variable utilisée. Ensuite, SAS édite dans chaque case hors diagonale lecoefficient 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 concluresur 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, onpeut utiliser la procédure TTEST. On peut obtenir des résultats comparables avec laprocédure NPAR1WAY si l’on travaille sur de petits échantillons, en utilisant alors desstatistiques 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 lesgroupes d’observations à comparer. Cette variable ne doit avoir que deux valeurs.

Page 95: SAS base Introduction à SAS SQL SAS IML

95

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 CLpour MEANS) et l’écart-type (STD DEV) avec son intervalle de confiance, ainsi que leminimum, le maximum et l’effectif de chaque groupe.

The TTEST Procedure

Statistics

Lower CL Upper CL Lower CL Upper CLVariable Demo N Mean Mean Mean Std Dev Std Dev Std Dev Std Err Minimum Maximum

Gnpr Democratie 26 606.6 816.08 1025.6 406.74 518.63 715.92 101.71 72 2343Gnpr Dictature 21 171.28 241.29 311.29 117.66 153.79 222.09 33.561 66 762Gnpr Diff (1-2) 338.46 574.79 811.12 331.72 399.93 503.72 117.34

T-Tests

Variable Method Variances DF t Value Pr > |t|

Gnpr Pooled Equal 45 4.90 <.0001 Gnpr Satterthwaite Unequal 30.3 5.37 <.0001

Equality of Variances

Variable Method Num DF Den DF F Value Pr > F

Gnpr Folded F 25 20 11.37 <.0001

La procédure TTEST fournit les résultats d’un test d’égalité des moyennes sous deuxhypothèses : variances égales (equal) et variances différentes (unequal). La lecture dessorties 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’avant-dernier tableau (intitulé T-Tests), la ligne UNEQUAL (c’est notre cas). Si le nombre estsupé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%. Auseuil 1%, les PIB ne sont pas significativement égaux en moyenne.

Page 96: SAS base Introduction à SAS SQL SAS IML

96

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 sontcalculé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 : leslignes 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 lesobservations.

Syntaxe :

PROC TRANSPOSE<liste d’options> ;VAR liste_de_variables ;COPY liste_de_variables ;BY liste_de_variables ;

BY : une observation est créée pour chaque variable transposée et pour chaquegroupe ; la variable de groupe est incluse en sortie mais non transposée. La tabledoit être préalablement triée.

COPY : les variables de la liste sont recopiées dans la table de sortie sans transposition.VAR : 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ééeNAME = 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_).

Page 97: SAS base Introduction à SAS SQL SAS IML

97

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 luedans 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 terminantpar 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) ;

Page 98: SAS base Introduction à SAS SQL SAS IML

98

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 n2colonnes 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 lestermes diagonaux de la matrice argument. Les éléments hors de la diagonale sontnuls.

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 desfonctions EIGVEC et EIGVAL.

La fonction EIGVAL retourne le vecteur colonne des valeurs propres, triéesdans 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**α

Page 99: SAS base Introduction à SAS SQL SAS IML

99

5.10. 4. Inversion des matrices

Les résultats obtenus par la fonction INV ne sont pas toujours très stables. Ils ne lesont 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;

Page 100: SAS base Introduction à SAS SQL SAS IML

100

Annexe 1 : formats disponibles sous SAS

Character $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 systemoption 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

DBCS $KANJIw. Adds shift-code data to DBCS data

$KANJIXw. Removes shift code data from DBCS data

Date andTime

DATEw. Writes date values in the form ddmmmyy or ddmmmyyyy

DATEAMPMw.d Writes datetime values in the form ddmmmyy:hh:mm:ss.ss withAM 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 aspecified 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 ordd.mm.yyyy

EURDFDEw. Writes international date values in the form ddmmmyy orddmmmyyyy

EURDFDNw. Writes international date values as the day of the week

Page 101: SAS base Introduction à SAS SQL SAS IML

101

Date andTime

EURDFDTw.d Writes international datetime values in the formddmmmyy: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 inthe 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 aspecified separator

MMSSw.d Writes time values as the number of minutes and seconds sincemidnight

MMYYxw. Writes date values as the month and the year and separates themwith 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 ormmmyyyy

NENGOw. Writes date values as Japanese dates in the form e.yymmdd

PDJULGw. Writes packed Julian date values in the hexadecimal formatyyyydddF for IBM

PDJULIw. Writes packed Julian date values in the hexadecimal formatccyydddF 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 formhh:mm:ss.ss

TIMEAMPMw.d Writes time values as hours, minutes, and seconds in the formhh:mm:ss.ss with AM or PM

TODw.d Writes the time portion of datetime values in the form hh:mm:ss.ss

Page 102: SAS base Introduction à SAS SQL SAS IML

102

Date andTime

WEEKDATEw. Writes date values as the day of the week and the date in the formday-of-week, month-name dd, yy (or yyyy)

WEEKDATXw. Writes date values as day of week and date in the form day-of-week, 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 yearin the form month-name dd, yyyy

WORDDATXw. Writes date values as the day, the name of the month, and the yearin 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 acharacter

YYMMDDw. Writes date values in the form yymmdd or yyyymmdd

YYMMDDxw. Writes date values in the form yymmdd or yyyymmdd with aspecified separator

YYMONw. Writes date values as the year and the month abbreviation

YYQxw. Writes date values as the year and the quarter and separates themwith a character

YYQRxw. Writes date values as the year and the quarter in Roman numeralsand separates them with characters

Numeric 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 updecimal 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 bymultiplying a number by 10 raised to the dth power

FRACTw. Converts numeric values to fractions

HEXw. Converts real binary (floating-point) values to hexadecimalrepresentation

IBw.d Writes native integer binary (fixed-point) values, including negativevalues

IBRw.d Writes integer binary (fixed-point) values in Intel and DEC formats

Page 103: SAS base Introduction à SAS SQL SAS IML

103

Numeric IEEEw.d Generates an IEEE floating-point value by multiplying a number by10 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 DECformats

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 mainframeformat

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 mainframeformat

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 mainframeformat

S370FZDTw.d Writes zoned decimal separate trailing-sign data in IBM mainframeformat

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 shownnumerically

Page 104: SAS base Introduction à SAS SQL SAS IML

104

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

Page 105: SAS base Introduction à SAS SQL SAS IML

105

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édureVu en

cours / TPRôle

PRINT Cours / TP Liste les données avec des totaux et des sous-totaux.

MEANS /SUMMARY

Cours / TPCalcule des statistiques descriptives (moyenne, somme, min et max, écart-type…) sur un jeu dedonnées, éventuellement par groupe d’observations. SUMMARY est identique à MEANS, saufqu’elle ne produit, par défaut, aucun résultat dans la fenêtre Output.

FREQ Cours / TP Fournit les répartitions d’individus selon une ou deux variables qualitatives.

TABULATE Cours / TPPropose les statistiques des procédures MEANS / SUMMARY et FREQ dans un tableau dont lamise en forme est plus aisément contrôlable.

REPORT / Combine les possibilités des procédures PRINT et TABULATE.

Statistiquedescriptive

UNIVARIATE Cours / TPReprend les sorties fournies par MEANS ou SUMMARY et ajoute d’autres statistiques pluscomplètes, ainsi que des graphiques (histogramme, adéquation à une loi).

FREQ Cours / TPPropose des tests de liaison entre deux variables qualitatives (chi-2, V de Cramer, tests exactsassociés) ainsi que des tests de tendance (Cochran-Armitage).

CORR Cours / TP Calcule des corrélations entre variables quantitatives et teste la nullité du coefficient de corrélation.UNIVARIATE Cours / TP Propose des tests de normalité et de nullité de la moyenne.

TTEST / GLM Cours

Compare avec un test statistique les moyennes de groupes d’observations. La procédure TTESTse limite à l’étude de deux groupes, tandis que GLM permet les études à plusieurs groupes etpropose davantage de tests. Cependant, l’hypothèse statistique pour l’utilisation de la procédureGLM (égalité des variances) est plus contraignante que pour TTEST. Dans les deux procédures,les tests sont paramétriques.

Tests statistiques

NPAR1WAY /Réalise des tests non-paramétriques de comparaison de moyennes à deux groupes oudavantage.

Page 106: SAS base Introduction à SAS SQL SAS IML

106

GLM / ANOVA TP

Permet l’étude de l’impact de facteurs qualitatifs et quantitatifs contrôlés sur une donnéequantitative. 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 plansd’expérience équilibrés.Analyse de la

variance

GLM /MIXED /

Permet l’étude de l’impact de facteurs qualitatifs et quantitatifs contrôlés et non contrôlés sur unedonnés quantitative. La procédure GLM contient une instruction RANDOM dont les fonctionnalitéssont plus étendues dans la procédure MIXED, construite expressément pour ce type d’analyse etplus récente.

GCHART Cours Trace des histogrammes, des diagrammes en bâtons et des diagrammes circulaires.GPLOT Cours / TP Trace des nuages de points, des courbes et des nuages où les points sont de taille variable.GBARLINE / Superpose un histogramme et une courbe (procédure disponible à partir de la version 9).

Graphiques

BOXPLOT / Trace des graphiques « boîtes à moustaches ».

Echantillonnage SURVEYSELECT /Tire des échantillons d’observations à partir d’une table SAS en proposant de nombreux modesd’échantillonnage.

RANK /Remplace les valeurs par leur rang (1 pour le minimum, 2 pour la 2ème plus petite valeur, etc…) cequi permet des analyses non-paramétriques.

STDIZE /Centre (=rend la moyenne nulle) et réduit (=rend la variance égale à 1) une ou plusieurs variablequantitatives.

TRANSREG /GLMMOD

/Construit des indicatrices (variables valant 0 ou 1) à partie de variables qualitatives. La procédureTRANSREG construit des macro-variables contenant la liste des indicatrices créées, et gèremieux labels et formats que la procédure GLMMOD.

Préparation desdonnées

KDE /Complète la répartition des valeurs d’une variable quantitative à l’aide d’un « noyau » non-paramétrique ; cela permet l’édition d’une courbe de densité lissée.

STDIZE /Permet le remplacement de données manquantes par la moyenne, éventuellement par lamoyenne du groupe d’observations si l’on utilise son instruction BY.

Donnéesmanquantes

MI / MIANALYZE /Permettent de remplacer les valeurs manquantes par des valeurs simulées pour l’analysestatistique. Ces deux procédures travaillent de pair (MI en amont de l’analyse statistique,MIANALYZE en aval).

Page 107: SAS base Introduction à SAS SQL SAS IML

107

REG / GLM TPFournit les résultats de l’estimation d’un modèle de régression linéaire. On peut y étudier et ypré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).

ROBUSTREG /Effectue une régression robuste (=qui minimise l’impact d’individus atypiques) par diversesméthodes.

PLS /Effectue une régression PLS (régression sur des facteurs pouvant traiter des donnéesmulticorrélées).

GENMOD /CATMOD

/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 lescas de données qualitatives.

Régression

CALIS / Construit des modèles à équations structurelles (variables latentes).

LIFEREG /Construit un modèle de régression sur des données censurées à droite (appelées égalementdonnées de survie).

LIFETEST /Calcule des indicateurs usuels sur les données « de survie », dont la fonction de survie et leproduit-limite de Kaplan-Meier.

Données « desurvie »

PHREG / TPHREG /Construit un modèle de régression sur des données censurées à droite avec une hypothèse dehasards proportionnels. La procédure TPHREG permet d’intégrer des variables explicativesqualitatives au modèle.

PRINCOMP TPFournit les résultats et les aides à l’interprétation d’une analyse en composantes principales(ACP).

CORRESP TPFournit les résultats et les aides à l’interprétation d’une analyse des correspondances simple(AFC) ou multiple (ACM).

Analysesfactorielles

FACTOR / Fournit les résultats et les aides à l’interprétation de plusieurs méthodes d’analyse factorielle.CLUSTER / Fournit les résultats et les aides à l’interprétation d’une classification ascendante hiérarchique.TREE / Fournit le dendogramme à l’issue d’une classification hiérarchique.TypologiesFASTCLUST /

Fournit les résultats et les aides à l’interprétation d’une classification par centres mobiles (K-moyennes ou nuées dynamiques).

LOGISTIC /CATMOD

/

Fournit les résultats de l’estimation d’un modèle de régression logistique, où une variablequalitative est expliquée par des variables quantitatives ou qualitatives. La procédure LOGISTICreprend toutes les fonctionnalités de la procédure CATMOD, plus ancienne, et les enrichit desorties plus orientées vers les modèles réellement décisionnels ou datamining.

DISCRIM / Fournit les résultats et les aides à l’interprétation d’une analyse discriminante.

Modèlesdécisionnels

STEPDISC / Choisit le modèle le plus approprié pour la constitution d’une analyse discriminante.Plansd’expérience

PLAN / Effectue des ventilations d’individus dans des plans d’expériences.

Page 108: SAS base Introduction à SAS SQL SAS IML

108

ARIMA /Effectue des ajustements de séries chronologiques et des prévisions à l’aide du modèle ARIMA deBox et Jenkins.

HPF / FORECAST /Propose la prévision de données quantitatives suite à l’analyse d’une série chronologique devaleurs par diverses méthodes. La procédure HPF apparaît avec la version 9 en reprenant denombreuses fonctionnalités de la procédure FORECAST.

Sériestemporelles

SPECTRA / Conduit l’analyse spectrale de données temporelles.Autres méthodesstatistiques

IML Cours / TPPropose un langage matriciel très complet sachant traiter les tables SAS et produire desgraphiques et des listings.

D’après : SAS – Maîtriser SAS Base et SAS Macro – Hélène Kontchou Kouomegni et Olivier Decourt – Dunod.