• Aucun résultat trouvé

SAS base Introduction à SAS SQL SAS IML

N/A
N/A
Protected

Academic year: 2022

Partager "SAS base Introduction à SAS SQL SAS IML"

Copied!
108
0
0

Texte intégral

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

(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 pour importer et exporter des fichiers sans passer par la programmation dans l’éditeur.

• nous aborderons le module SAS Insight.

• nous aborderons d’autres procédures graphiques et statistiques couramment utilisées que nous n’évoquerons pas en cours, et notamment :

 PROC PRINCOMP (analyse en composantes principales)

 PROC CORRESP (analyse des correspondances)

 PROC REG (régressions simple ou multiple)

(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ïque verticale) :

la fenêtre de programmation (éditeur) : entrer, éditer, compiler les programmes de SAS.

Deux fenêtres de programmation sont disponibles à partir de la version 8 de SAS : le Program Editor et l’Enhanced Editor.

Dans l’Enhanced Editor, des lignes horizontales marquent les grandes étapes du programme.

Les carrés contenant un signe moins ou plus situés en marge du programme permettent de visualiser uniquement la première ligne de chaque étape, ou l’intégralité du code de cette étape.

Il est possible de condenser l’ensemble d’un programme via le menu Edit > Collapse all, et de le remettre en vue intégrale via Edit > Expand all.

(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 lieu pendant le traitement,

et les erreurs (Error, en rouge) : des erreurs graves de traitement ont eu lieu.

De plus, SAS recopie (en noir) le code qui lui a été soumis, précédé de numéros de lignes incrémentés à chaque nouveau programme exécuté dans la session.

Le message Error signale une erreur qui a stoppé l’exécution de cette étape du programme.

SAS traitant les étapes de manière indépendante, il a pu exécuter l’étape suivante en dépit des erreurs rencontrées. Il en découle souvent des erreurs successives dans la fenêtre Log, dues à une erreur dans une des premières étapes du programme. Il est donc conseillé de reprendre la Log depuis le début de l’exécution du code en question. C’est d’autant moins évident que SAS se positionne à la fin de la Log après exécution d’un programme.

Le message Warning indique une erreur qui n’a pas stoppé l’exécution de l’étape parce que SAS sait gérer lui-même ce type d’erreur (qui consiste souvent à générer des valeurs manquantes).

La fenêtre Log n’est pas purgée automatiquement pas SAS à l’exécution d’un nouveau programme. Les messages sont donc affichés à la suite de ceux concernant l’exécution du code précédent. Il est souvent pratique, pour retrouver le début des messages, d’effacer le contenu de la fenêtre (par le menu Edit > Clear all).

la fenêtre Sortie (ou fenêtre Output) : sorties, listings, résultats après compilation des programmes, rapports générés par les procédures SAS et les étapes DATA. Elle est complétée par deux autres fenêtres pour l’affichage des sorties : la fenêtre Graph pour les graphiques et la fenêtre Résultats (ou Results) qui montre sous forme arborescente les différentes sorties engendrées par le programme.

(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 sorties engendrées par un ou plusieurs programmes. La suppressions des sorties par morceaux est possible (faire un clic droit sur un des éléments de cette fenêtre et choisir Delete dans le menu contextuel),

 la fenêtre Graph qui montre la sortie d’une procédure graphique de SAS.

La fenêtre Output, comme la fenêtre Log, ne se vide pas à l’exécution d’un nouveau programme, mais ajoute de nouvelles sorties à la suite de celles existantes. Il est donc possible de purger cette fenêtre (par le menu Edit > Clear all).

la fenêtre Explorer : emplacements physiques des répertoires, création de raccourcis, voir/ouvrir/déplacer/copier/supprimer des fichiers SAS. Elle permet de naviguer parmi les données SAS et en particulier de visualiser les tables SAS.

(6)

2. Les menus et les barres d’outils

Les menus disponibles sont variables en fonction de la fenêtre active. Les menus disponibles sont FILE, EDIT, VIEW, TOOLS, SOLUTIONS, WINDOWS et HELP. S’y ajoute le menu RUN quand l’éditeur est actif.

• FILE contient les commandes nécessaires à l’ouverture d’un programme, sa sauvegarde, l’importation d’un fichier de données, son exportation, et la commande permettant de fermer la session SAS.

• EDIT regroupe les commande d’édition usuelles (couper/copier/coller, annuler) ainsi que celles pour le repli et le déploiement d’un programme. On y trouve aussi la commande CLEAR ALL pour purger une fenêtre.

• VIEW permet de basculer entre les différentes fenêtres de l’environnement de programmation, et également d’ouvrir à nouveau une fenêtre fermée.

• TOOLS regroupe l’appel à divers assistants SAS (retouches de graphiques, requêtes via une interface etc…). On y trouve également, dans un sous-menu OPTIONS, les réglages de la session SAS (aspect des fenêtres, préférences de l’utilisateur, tableau des options système…).

• RUN permet l’exécution du code tapé dans la fenêtre d’édition active.

• SOLUTIONS permet d’ouvrir diverses interfaces gravitant autour de SAS.

• WINDOW gère le fenêtrage de l’environnement et permet comme VIEW de basculer d’une fenêtre à une autre.

• HELP renvoie aux divers éléments de l’aide en ligne de SAS.

La barre d’outils regroupe les icônes standards (nouveau, ouvrir, enregistrer, couper, copier, coller, annuler, imprimer, aperçu avant impression).

Quand un éditeur est actif, l’icône ci-contre s’ajoute à la barre d’outils : il permet l’exécution du programme écrit dans la fenêtre active ; si une partie du programme est sélectionnée, alors seul ce morceau de code est soumis à SAS.

A gauche de la barre d’outils, une fenêtre rectangulaire, pouvant accueillir une seule ligne, est appelée fenêtre de commande. Elle trouve son intérêt dans les versions dépourvues de menus. Dans ces versions, elle apparaît en première ligne de chaque fenêtre, sous la forme d’une ligne blanche précédée de COMMAND. Elle permet, en y tapant et soumettant des commandes, d’obtenir des manipulations semblables à celles proposées par les icônes de la barre d’outils, et par certains items des menus.

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

3. Modules

SAS est un logiciel organisé en modules qui sont des groupes de fonctionnalités. Ce système sert de base de tarification, mais aussi d’organisation logique. Les procédures sont rattachées à un module et ne sont donc pas toutes disponibles sur toutes les installations de SAS. Par exemple, la proc IML, qui permet d’utiliser le langage IML, n’est disponible que si le module IML a été installé.

Le logiciel SAS est loué à l’année, sous forme de licence. Cette licence autorise l’emploi, pour une durée limitée, de certains modules. Dans la version 9, un fichier SAS Installation Data spécifie les modules contenus dans la licence. Il remplace le programme Setinit des versions antérieures.

Les principaux modules de SAS :

• SAS Base : pierre angulaire de SAS, ce module contient les instructions pour la manipulation de données, les statistiques descriptives élémentaires et l’édition de rapports. Ce module permet de programmer dans le langage SAS de base, ainsi que dans les langages SQL et macro.

(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’autres applications.

• SAS Connect : le module CONNECT permet de faire fonctionner SAS en mode client/serveur.

• SAS ETS : ce module statistique regroupe entre autres les fonctionnalités d’étude des données temporelles (ETS : Econometrics and Time Series).

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

• SAS AF : ce module permet la construction d’interfaces clique-bouton par-dessus SAS, sur un mode de fonctionnement analogue à Visual Basic pour les applications Microsoft (AF = Application Facility).

• SAS EIS : il permet la constitution et la visualisation de tableaux de bords synthétiques regroupant des statistiques et des graphiques (EIS : Execuive Information System).

• SAS Assist : ce module est une interface clique-bouton pour la création de programmes SAS.

Toutes les manipulations sont paramétrées par menus et fenêtres de dialogue.

• SAS IML : ce module permet d’utiliser un langage matriciel (IML : Interactive Matrix Language).

• SAS Insight : analyse statistique interactive.

4. SAS Enterprise Guide

SAS Enterprise Guide (ou SEG) est un logiciel Windows permettant, par un système de menus et de fenêtres de dialogue, de réaliser des extractions, de croiser des sources de données hétérogènes, de produire des tableaux, des graphiques et des statistiques. Il génère des programmes SAS et intègre également un éditeur de programmes, afin d’ajouter ou d’amender du code.

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

Enterprise Guide est un croisement entre SAS et Excel. Il a hérité du premier la puissance de calcul et le langage souple. SEG hérite d’Excel son ergonomie dans la présentation des données, la simplicité de fonctionnement, le rôle prééminent des fenêtres de dialogue.

Il est possible de remplacer toute programmation par l’utilisation intensive de SAS Enterprise Guide, mais toute application constituée de menus et de fenêtres de dialogue trouve sa limite dans une opération non prévue initialement, qu’il faudra à nouveau programmer.

5. Session SAS

Quand on démarre le logiciel SAS, on ouvre une « session SAS ». Cette session se termine par la fermeture du logiciel. Au sein d’une session SAS, de nombreux réglages sont temporaires. Ils durent le plus souvent jusqu’à la fermeture de la session.

(8)

6. Sorties

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

• une ou plusieurs table(s) SAS ;

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

• un ou plusieurs graphique(s) qui font l’objet d’un affichage séparé.

7. Les contraintes du langage SAS

• On ne doit pas couper une instruction par un retour de ligne,

• Les majuscules et minuscules, hormis quelques cas très précis, ne sont pas différenciés par SAS,

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

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

8. Concepts et vocabulaire

Nous allons commencer par survoler les concepts qu’il est essentiel d’avoir intégrés avant de commencer la programmation dans SAS. Tout au long de ce cours, nous parlerons :

• de bibliothèque (ou librairie),

• de table,

• de vue,

• d’observation,

• de variable,

• de label,

• de format,

• d’une étape Data,

• d’une étape Proc.

Les premiers concepts font référence à la manière dont SAS stocke et accède aux données.

Quelques instructions et manipulations sont nécessaires, comme : allouer une bibliothèque, visualiser son contenu, voir une table, voir les variables d’une table. Les concepts suivants traite du décalage qui existe – à travers les labels et les formats – entre les données vues à l’écran et la réalité qu’il faut programmer. Les derniers concepts concernent la programmation, et fait la distinction entre l’étape Data et les procédures, qui sont les deux grandes étapes de programmation de SAS.

(9)

1. Deux étapes : DATA et PROC

Un ensemble d’instructions constitue une étape. Dans SAS, on distingue deux grands types d’étapes de programmation : les étapes Data et les étapes procédures, également appelées

« étapes proc ».

Un programme SAS est un enchaînement d’étapes de gestion des données (étape DATA) et d’appels de procédures (étape PROC).

On repère, dans un programme SAS, le début et la fin d’une étape par les mots-clés DATA ou PROC au début, et les instructions RUN, et/ou QUIT à la fin.

1. 1. Etape DATA : création d’une table SAS et structuration des données

Afin de pouvoir traiter des données avec SAS, il convient d’abord de les mettre sous un certain format, interne à SAS. SAS possède en effet son propre système de gestion de bases de données (étape DATA), bâti sur la notion de table (SAS DATA SET nommé par la suite TABLE SAS selon la terminologie en vigueur en France).

Toute étape DATA débute par l’instruction DATA nom_de_table où nom_de_table est le nom de la table SAS créée. Si aucune table SAS n’est créée (cas par exemple de la recopie d’une table dans un fichier texte), alors l’étape DATA débutera par l’instruction DATA _NULL_. L’étape DATA se termine par l’instruction RUN.

Syntaxe :

DATA tableSAS ;

instructions diverses ; RUN ;

L’étape Data permet de manipuler, observation par observation, un jeu de données. Les données entrantes ou sortantes peuvent être une table SAS ou un fichier externe.

Lors d’une étape DATA, on pourra en outre structurer les données et notamment :

• importer un fichier texte pour créer une table SAS,

• créer de nouvelles variables,

• exporter d’une table SAS vers un fichier texte,

• sélectionner une partie d’une table SAS et la stocker dans une autre table,

• fusionner plusieurs tables SAS

• faire une requête sur une table SAS,

• …

On peut créer des tables SAS permanentes ou temporaires. Les tables temporaires sont effacées lorsqu’on quitte la session.

On appelle table SAS la représentation la plus courante des données utilisées par ce logiciel. Ces données sont organisées en lignes et en colonnes, également appelées observations et variables.

1. 2. Etape PROC : analyse d’une table SAS

Une fois que les données ont été structurées sous la forme d’une table, elles peuvent être analysées au moyen de procédures (étape PROC). Les procédures sont des programmes déjà écrits de SAS, à la syntaxe beaucoup moins libre que celle de l’étape Data, où il faut surtout renseigner un certain nombre de paramètres et faire jouer certaines options. Les procédures, qui sont assez nombreuses (aux alentours de 200 sur l’ensemble des modules de SAS), accomplissent chacune une tâche spécialisée : tri des données, listing d’une table, création de formats, calcul de statistiques descriptives, analyse factorielle, etc.

(10)

Chaque procédure commence par une instruction PROC suivie de son nom, et s’achève sur une instruction RUN ; qui demande l’exécution de cette procédure. Certaines procédures, notamment les procédures graphiques, demandent de surcroît une instruction QUIT ; pour clore réellement leur syntaxe.

Syntaxe :

PROC nomProcédure <option(s)> ; instructions diverses ;

RUN ;<QUIT> ;

Pour la plupart des procédures, SAS propose de nombreuses options.

L’exemple suivant distingue une étape, une instruction et une option. Cet exemple permet l’édition de statistiques sur les ventes.

PROC MEANS DATA=base.ventes 

MEAN 

MEDIAN 

MIN   

MAX ; 

VAR mt_der ;  

RUN; 

 est une étape (la procédure MEANS)

 sont des options

 est une instruction.

2. Différences entre une vue et une table

Les fichiers de données lus et créés par SAS sont d’un type qui est spécifique à ce logiciel : ce sont des tables et des vues.

Dans les deux cas, les données sont organisées sous forme tabulaire, avec des lignes (observations) et des colonnes (variables).

Si on ouvre une vue à partir de la fenêtre Explorer, on constate la similitude d’aspect avec une table. C’est en fait le mode de stockage qui diverge entre vue et table.

• Une table est une photo des données : elle stocke des données qui ne changeront plus jusqu’à la création d’une nouvelle version de la table.

• Une vue est un lien vers un ensemble de données : elle ne contient qu’une requête, qui sera réexécutée à chaque accès à la vue.

L’avantage d’une vue sur une table est double : place réduite pour le stockage et données perpétuellement à jour sans nécessiter d’intervention de l’utilisateur. La table, en revanche, permet un accès plus rapide aux données, et également de figer dans le temps un état : cela s’avère pratique pour conserver un historique à partir de données mouvantes.

Le nom d’une table ou d’une vue SAS doit respecter les contraintes suivantes :

• la longueur maximale du nom est de 32 caractères ;

• le premier caractère est une lettre ou un blanc souligné _ .Les caractères suivants peuvent être des lettres, des blancs soulignés ou des chiffres ;

• dans la plupart des cas, SAS ne distingue pas les minuscules et les majuscules. Ainsi, si par exemple on a défini la variable Gini, on peut la rappeler en écrivant GINI, gini, etc. ;

• certains noms correspondent à des variables automatiques de SAS (exemple : _N_, qui correspond 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…

(11)

(exemple : data _NULL_) et ne peuvent pas être utilisés pour nommer des variables ou des tables créées par l’utilisateur.

3. Eléments d’une table

3. 1. Les observations

On désigne par ce nom les lignes d’une table ou d’une vue SAS. Chaque observation correspond à une unité de comptage ; en statistique, on parle d’ « individu statistique ».

Chaque observation porte un numéro. Il est séquentiel et recalculé à chaque création de la table.

3. 2. Les variables

Les variables sont les colonnes d’une table ou d’une vue SAS. Chaque variable correspond à une information connue sur les observations.

Toutes les variables requièrent obligatoirement trois attributs :

• nom

• type (numérique ou caractères)

• longueur.

Une variable peut également posséder un label, un format et un informat.

Le nom d’une variable doit respecter les contraintes suivantes :

• la longueur maximale du nom est de 32 caractères ;

• le premier caractère est une lettre ou un blanc souligné _ .Les caractères suivants peuvent être des lettres, des blancs soulignés ou des chiffres ;

• dans la plupart des cas, SAS ne distingue pas les minuscules et les majuscules. Ainsi, si par exemple on a défini la variable Gini, on peut la rappeler en écrivant GINI, gini, etc. ;

• certains noms correspondent à des variables automatiques de SAS (exemple : _N_, qui correspond au numéro d’observation dans la table SAS2) et ne peuvent pas être utilisés pour nommer des variables ou créées par l’utilisateur.

Variables caractères :

On peut définir des variables caractères d’une longueur de 1 à 32 767 caractères. On leur affecte une valeur de la manière suivante :

var1 = ‘Paris’ ; /*entre ‘*/

var2 = "1990-1991" ; /*entre "*/

var3 = ‘Ile de France’ ; var4 = ‘Côte d"Armor’ ;

2 _N_=1 pour la première observation de la table, 2 pour la deuxième observation, etc…

(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. SAS stocke 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écrire le contenu de la variable, de donner sa définition, de décrire éventuellement ses valeurs, de manière plus complète et plus lisible que ne peut le faire le nom.

Le format

Le format est un masque d’affichage des données. Il permet d’assurer une transition entre les valeurs telles qu’elles sont stockées (de manière parfois peu lisible : les dates sont stockées comme un nombre de jours depuis le 1er janvier 1960) et les valeurs telles qu’elles sont affichées. On trouvera en annexe 1 les formats les plus courants fournis par SAS. En complément de ces formats, SAS propose, avec un programme (la procédure FORMAT que l’on étudiera ultérieurement), de définir des formats personnalisés correspondant aux différents besoins (tranches de revenus, libellés des départements français, etc…).

La longueur

La longueur (length) d’une variable est la place prévue pour le stockage de chacune de ses valeurs. SAS prévoit par défaut d’utiliser 8 octets pour chaque valeur. Les longueurs autorisées sont :

• de 1 à 32767 octets pour une variable caractères,

• de 2 à 8 octets pour une variable de type numérique. Sous Windows, les longueurs possibles sont comprises en 3 et 8 octets seulement.

L’informat

Un informat est un masque de saisie d’une variable. C’est le symétrique du format ; il s’applique aux données telles qu’elles sont lues lors de la création de la table SAS à partir d’un fichier externe.

Ainsi, pour reprendre l’exemple d’une date, on peut avoir une donnée stockée sous la forme 20010125 qui désignerait le 25/01/2001. SAS doit comprendre que c’est une date et stocker le 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 du mois, et enfin ceux du jour.

(13)

4. Manipulations de tables SAS

Le but premier de SAS est la manipulation de données, avant même de commencer les traitements statistiques proprement dits. Ce chapitre est consacré à la création d’une table SAS à partir d’une ou de plusieurs sources de données, principalement à travers l’étape Data.

L’étape Data permet entre autres :

• la création de tables SAS,

• la création de nouvelles variables,

• la modification de variables existantes,

• la fusion et la jointure de plusieurs tables,

• l’importation et l’exportation de données.

L’étape Data regroupe une série d’instructions permettant la manipulation ligne à ligne d’un jeu de données. L’étape Data n’affiche rien dans la fenêtre Output, sauf cas exceptionnels.

4. 1. Structure et stockage des tables

Une table se présente sous forme d’une matrice croisant en ligne les observations en en colonne les variables.

Exemple :

Les données de cet exemple (fichier PAYS), avec lequel nous travaillerons également en TP, proviennent d’un article de Russet (1964). Russet cherche à montrer que l’inégalité économique entraîne l’instabilité politique. Pour mesure l’inégalité économique, Russet utilise des variables décrivant la répartition des terres agricoles, le produit national brut par tête et le pourcentage de personnes actives travaillant dans l’agriculture :

• la variable GINI représente l’indice de concentration de Gini qui mesure l’écart entre la courbe de Lorenz et la droite d’égalité,

la variable FARM correspond au pourcentage de fermiers possédant la moitié des terres, en commençant par les plus petites surfaces. Si FARM vaut 90%, alors la moitié des terres est possédée par 10% des fermiers,

la variable RENT mesure le pourcentage de fermiers locataires de leurs terres,

la variable GNPR (gross national product per capita) est la produit national brut par tête en dollars U.S. en 1955,

la variable LABO est égale au pourcentage de personnes actives travaillant dans l’agriculture.

Il y a quatre mesures de l’instabilité politique :

la variable INST est une fonction du nombre de responsables du pouvoir exécutif et du nombre d’années pendant lesquelles le pays a été indépendant entre 1945 et 1961. Cet indice varie entre 0 (très stable) et 17 (très instable),

la variable ECKS est l’indice d’Eckstein calculé sur la période 1946-1961. Il mesure le nombre de conflits violents entre communautés sur cette période,

la variable DEAT est le nombre de personnes tuées lors de manifestations violentes sur la période 1950-1962,

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

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

(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 est détruite à la fin de la session SAS en cours.

4. 1. 1. Les librairies, les tables permanentes et temporaires

Une table temporaire sera représentée par un simple nom_de_table.

Une table permanente se présentera de la manière suivante : nom_de_librairie.nom_de_table où nom_de_librairie représentera la librairie (c’est à dire le répertoire) où la table est stockée. La librairie est définie lors d’une instruction LIBNAME assurant la correspondance entre le nom_de_librairie et le nom physique (« réel ») de la librairie.

(15)

Ainsi, là où d’autres logiciels comme Excel se contentent de demander à l’utilisateur où aller chercher les données, SAS demande de lui définir au préalable le ou les emplacements où aller lire et écrire des données avec le système des bibliothèques (ou librairies).

Une fois définie, la librairie n’est allouée que pour la durée de la session.

Il est préférable d’utiliser cette instruction en tête de programme, de manière à la retrouver facilement.

Exemple :

On tape l’instruction suivante dans la fenêtre Editeur : libname pays 'c:\Cours SAS';

Le message suivant s’inscrit dans la fenêtre Journal :

NOTE: Libref PAYS attribué comme suit : Moteur : V8

Nom physique : c:\Cours SAS 48 libname pays 'c:\Cours SAS';

Le nom d’une librairie doit satisfaire à plusieurs contraintes :

• ne pas reprendre le nom d’une bibliothèque allouée automatiquement par SAS (WORK, SASUSER, SASHELP et MAPS),

• ne pas dépasser 8 caractères ;

• 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 la session SAS. Pour définir une table SAS temporaire, on peut ainsi écrire nom_de_table ou work.nom_de_table.

 SASHELP héberge des données fournies par SAS à des fins d’exercices (comme CLASS, AIR, SHOES, etc…).

 SASUSER est une bibliothèque personnelle (chaque utilisateur a sa propre SASUSER) permanente (au contraire de WORK). Son contenu n’est donc pas effacé à la fermeture de SAS. Cette bibliothèque contient entre autres les informations de personnalisation de la session SAS (barres d’outils par exemple). Il est possible d’y écrire ses données, même si, en général, il est préférable d’allouer une bibliothèque séparée pour le stockage des données.

 MAPS contient les fonds de cartes fournis par SAS, dont une carte départementale de la France.

(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, à partir des instructions INFILE et INPUT :

Syntaxe :

DATA nom_de_table ;

INFILE fichier_en_entrée ; INPUT format_de_lecture ; RUN ;

L’instruction DATA permet de nommer la table SAS à créer.

L’instruction INFILE indique le nom ou la référence du fichier à lire en entrée.

L’instruction INPUT précise comment lire les données : en quelle position figure chaque variable, son type (caractère ou numérique), sa longueur, le nom à lui donner et le format de lecture (informat) des informations à importer.

Instruction INFILE

Principales options de l’instruction INFILE : FIRSTOBS=numéro_d’observation

Numéro de la première observation du fichier en entrée à prendre en compte pour le déroulement de l’étape DATA. Cette instruction est utile lorsque la première ligne comporte les noms des variables (surtout si les variables excèdent 8 caractères).

Exemple : INFILE ‘c:\fichier.txt’ FIRSTOBS=2 ; OBS=numéro_d’observation

Numéro de la dernière observation du fichier en entrée à prendre en compte pour le déroulement de l’étape DATA.

MISSOVER

En cas d’enregistrements de longueur variable, si toutes les variables de l’ordre INPUT n’ont pas été lues, les variables non renseignées sont mises à valeur manquante.

En l’absence de cette option, SAS lit les valeurs restantes au début de l’enregistrement suivant.

DLM=

Caractère séparateur (espace par défaut).

La tabulation est notée ‘09’x

On peut avoir à lire un fichier de données brutes délimitées (sans passer par le menu Import Data de SAS). Un des intérêts de ce type de fichier réside dans le fait que les données ne doivent pas obligatoirement être organisées en colonnes fixes. Les délimiteurs les plus fréquents sont les blancs, les virgules, et les tabulations.

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

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

En fin de compte, si aucun délimiteur n’est spécifié avec l’option DLM=, le délimiteur par défaut est un blanc.

On peut spécifier plus d’un délimiteur dans l’option DLM=. Dans ce cas, n’importe quel de ces caractères et non une combinaison de ceux-ci, agit

(17)

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

DSD

Indique que si deux séparateurs sont consécutifs, ils correspondent à une valeur manquante.

LRECL=

Nombre maximum de caractères par ligne de données (par défaut, 256) Exemple : INFILE ‘c:\fichier.txt’ LRECL=500 ;

Exemple :

data pays.russet;

infile 'c:\Cours SAS\Pays.txt' firstobs=2 obs=4;

run;

Seules les lignes 2, 3 et 4 sont recopiées dans la tables SAS pays.russet :

Obs Pays 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 dans lequel les champs sont présents dans le fichier importé. Pour jouer sur cet ordre dans la table SAS créée, on utilisera les déclarations d’attributs (instruction ATTRIB) dans l’ordre voulu.

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

Si on précise &, la variable à lire peut contenir un espace : la variable sera lue jusqu’à ce que soient rencontrés deux espaces consécutifs.

Au fur et à mesure de l’exécution de l’instruction INPUT, un élément virtuel, appelé pointeur de colonne est positionné afin de lire la variable suivante. Ce pointeur de colonne peut être déplacé, avancé, positionné à la ligne suivante :

• INPUT @n déplace le pointeur à la colonne n de l’enregistrement en cours.

• INPUT +n déplace le pointeur de n colonnes vers la droite,

• INPUT / déplace le pointeur de colonne à la ligne suivante.

On peut aussi préciser la colonne de début et la colonne de fin d’une variable.

L’instruction est alors la suivante :

INPUT nom_de_variable <$> <colonne_de_début> <colonne_de_fin> ; Si la variable n’occupe qu’une colonne, la colonne de fin peut être omise.

Avantages :

• les valeurs caractères peuvent contenir des espaces,

• les valeurs manquantes ne posent pas de problèmes. Un champ à blanc est considéré comme valeur manquante,

• les champs peuvent être lus dans n’importe quel ordre.

Les différentes variables sont séparées par des espaces.

(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ées standard se rapporte aux données de type numérique et caractère qui n’ont pas de qualités de données inhabituelles. Le terme données non standard se rapporte plutôt aux données de type caractère ou numérique inhabituelles.

Exemple de données non standard : dates (12/12/2012, 29FEB2000)

chiffres avec des milliers repérés par des virgules (4,242, $89,000).

Par défaut, on ne peut lire que les données standard de type caractère ou numérique si on utilise l’entrée sous forme de liste. A la suite de chaque variable, les instructions permettent à SAS de lire correctement les valeurs :

• pour une variable numérique stockée avec une virgule comme séparateur décimal, faire suivre le nom de la variable de l’informat : NUMX. ;

• pour une variable date, faire suivre le nom de l’informat adéquat ( :DDMMYY.

Ou YYMMDD.) ;

• pour une variable caractère, faire suivre le nom de : $x., où x est le nombre de caractères (blancs compris) de la plus longue valeur lue.

Informats les plus courants

Exemple Informat

Type de données

lues

Type de données créées

Données lues

Informat utilisé

Données créées

x. Entiers Numériques 123 3. 123

x.d

Nombres décimaux (séparateur point)

Numériques 123.45 6.2 123.45

NUMXx.d

Nombres décimaux (séparateur virgule)

Numériques 123,45 NUMX6.2 123.45

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

$UPCASEx. Texte

Caractère (texte en majuscules)

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-25 01/25/2001 ANYDTDTEx.

Date (tous formats)

Numérique (date)

25.01.2001

ANYDTDTE10. 15000

(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. Par exemple, si on donne un informat $10. à une variable, 10 caractères seront lus, même si un séparateur en fait partie. Dans la lecture d’un fichier à séparateur, ce comportement est préjudiciable. L’informat :$10. permet de lire au maximum 10 caractères et s’arrête au séparateur.

Exercice 1 : on a un fichier de données brutes, séparées par des virgules, avec les variables vol (identificateur du vol), cargo (capacité totale de l’avion), date (dernière date d’utilisation de l’avion), nb_passagers (nombre total de passagers).

Voici les deux premières lignes d’enregistrement des données : I001,213,09/12/2001,110

I002,89,09/12/2001,45

3 champs correspondent à des données standards (vol, cargo et nb_passagers), un champ contient des données non standards (date). Ecrire une étape data permettant de lire ces données et de créer la table temporaire avions.

Attributs des variables

Toutes les variables présentent un certain nombre de caractéristiques – nom, label, type, format, informat et longueur -. L’instruction ATTRIB a pour but de centraliser ces caractéristiques.

ATTRIB nomVariable LABEL='mon label' FORMAT=fmt.

LENGTH=longueur

;

• Le label est un texte libre de 256 caractères maximum,

• Le format est choisi parmi ceux présentés en annexe 1 ou parmi des formats créés par l’utilisateur,

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

(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’une variable est de 8, aussi bien pour les données de type caractère que numérique.

Pour modifier la longueur d’une donnée de type caractère. Pour modifier la longueur d’une donnée de type caractère, on peut définir la longueur avec une instruction LENGTH ou ATTRIB.

Exemple :

On a le fichier texte suivant (voitures.txt, dans le répertoire c:\Cours SAS) : nom cylindree puissance longueur largeur poids vitesse origine finition prix ALFASUD-TI-1350 1350 79 393 161 870 165 I B 30570

AUDI-100-L 1588 85 468 177 1110 160 D TB 39990 SIMCA-1307-GLS 1294 68 424 168 1050 152 F M 29600 CITROEN-GS-CLUB 1222 59 412 161 930 151 F M 28250 FIAT-132-1600GLS 1585 98 439 164 1105 165 I B 34900 LANCIA-BETA-1300 1297 82 429 169 1080 160 I TB 35480 PEUGEOT-504 1796 79 449 169 1160 154 F B 32300 RENAULT-16-TL 1565 55 424 163 1010 140 F B 32000 RENAULT-30-TS 2664 128 452 173 1320 180 F TB 47700 TOYOTA-COROLLA 1166 55 399 157 815 140 J M 26540 ALFETTA-1.66 1570 109 428 162 1060 175 I TB 42395 PRINCESS-1800-HL 1798 82 445 172 1160 158 GB B 33990 DATSUN-200L 1998 115 469 169 1370 160 J TB 43980 TAUNUS-2000-GL 1993 98 438 170 1080 167 D B 35010 RANCHO 1442 80 431 166 1129 144 F TB 39450

MAZDA-9295 1769 83 440 165 1095 165 J M 27900 OPEL-REKORD-L 1979 100 459 173 1120 173 D B 32700 LADA-1300 1294 68 404 161 955 140 U M 22100

On importe sous SAS ces données et on crée la table SAS temporaire voitures : data voitures;

infile 'd:\CoursSAS\voitures.txt' firstobs=2;

length nom $ 16;

input nom $ cylindree puissance longueur largeur poids vitesse origine $ finition $ prix;

run;

Remarque : on a précisé la longueur de la variable nom, sinon la longueur était tronquée à 8 caractères (alors que certains noms de voiture comportent 16 caractères). L’instruction length doit précéder l’instruction input.

(21)

Exercice 2 :

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

1/ la division de l’employé : DIV

2/ la date d’entrée en service de l’employé : DESE 3/ le salaire de l’employé : SE

4/ le nom de famille de l’employé : NFE 5/ le prénom de l’employé : PE

6/ le pays de l’employé : PAYS 7/ la localisation de l’employé : LE

8/ le numéro d’identification de l’employé : NIE 9/ le code d’emploi : CODE

Les premiers enregistrements de données se lisent comme suit :

FLIGHT OPTS,03/11/1992,25000,MILLS,DOROTHY E,USA,CARY,E0001,FLTAT3 FINANCE,12/19/1983,27000,BOWER,EILEEN A,USA,CARY,E0002,FINCLK Questions :

quel délimiteur sera utilisé ?

______________________________________

quels champs sont lus sous forme de caractères ? ______________________________________

quelle est la longueur de chacun des champs de type caractère ? ______________________________________

Y a-t-il des champs qui contiennent des données non standard ? Dans l’affirmative, de quels champs s’agit-il ?

______________________________________

Pour chaque champ identifié comme non standard, quel type d’informat le champ requiert-il ?

______________________________________

Ecrire une étape DATA pour créer une table EMPLOYES qui contient toutes les variables du fichier d’entrée.

NB : il faut spécifier par une instruction length la longueur de toutes les données qui dépassent 8 caractères.

Exercice 3 :

Importez sous SAS le fichier ‘c:\temp\clients_sep.csv’

PRENOM ;NOM ;DAT_NAI ;VILLE ;DEPT ;NB_ACHATS ;ANNEES_ANCIENNETE Anne Sophie ;Martineau ;14/08/1955 ;PARIS ;75 ;8 ;0,3

Marie-Anne ;Dupont ;01/12/1977 ;ORLEANS ; Roger ;Martin du Gard ;18/01/1988 ; ;29 ;17 ;1,8 ; Exercice 4 :

Importez sous SAS le fichier ‘c:\temp\clients_col.txt’

1 14 29 40 48 53 65

NOM PRENOM DAT_NAI VILLE DEPT NB_ACHATS AN_ANCIEN Martineau Anne Sophie 14/08/1955 PARIS 75 8 0,3

Dupont Marie-Anne 01/12/1977 ORLEANS

Martin du Gard Roger 18/01/1988 29 17 1,8

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

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

(22)

Format

On peut également préciser le format des données avec l’instruction format. Les formats SAS ont la forme suivante :

<$> <w>.<d>

• $ réservé aux variables caractères. Si on omet $, la variable est numérique.

• w longueur de la variable. Si w=7, la variable prend 7 colonnes.

• . nombre de décimales. Si d=1, on a 1 chiffre après la virgule.

Il n’est pas nécessaire que l’instruction format précède l’instruction input.

Exemple :

Dans le précédent exemple, on rajoute l’instruction suivante pour que le prix soit codé avec deux décimales :

data voitures;

infile 'd:\CoursSAS\voitures.txt';

input nom $ cylindree puissance longueur largeur poids vitesse origine $ finition $ prix;

length nom $ 16;

format prix 8.2;

run;

L’instruction format aurait pu précéder l’instruction input. Dans le fichier d’origine, le prix était codé sur 5 colonnes. On ajoute deux chiffres après la virgule, et une colonne pour la virgule, soit un total de 8 colonnes.

Lecture conditionnelle de données On se place maintenant dans le cas où :

• on souhaite lire seulement une partie de l’enregistrement,

• tester une valeur de données,

• continuer la lecture de l’enregistrement si les données testées respectent certains critères.

Exemple :

On reprend le fichier avion (cf. Exercice 1). Lorsque la capacité maximale de l’avion est inférieure à 100, on ne veut lire que les deux premières variables (vol et cargo).

On lira également les variables date et nb_passagers uniquement lorsque la capacité maximale de l’avion est supérieure à 100.

data avion;

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

length vol $ 4;

input vol : $4. cargo : 3. @;

if cargo gt 100 then input data : mmddyy10. nb_passagers : 3.;

run;

Si on n’utilise pas @, SAS passe directement à la deuxième ligne d’enregistrement lorsqu’il rencontre le 2ème input. On utilise donc l’indicateur de retenue @ pour garder :

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

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

(23)

Exercice 5 :

On dispose d’un fichier aircraft.csv délimité par des virgules, décrivant les avions dont dispose une compagnie aérienne, et avec les variables suivantes :

identificateur de l’avion : ID (variable caractère de longueur 6), modèle de l’avion : MODEL (variable caractère de longueur 20),

date de mise en service : IN_SERVICE_DATE (date de format MM/JJ/AAAA, par exemple 12/31/1999),

date de dernière utilisation : LAST_SERVICE_DATE (date de format MM/JJ/AAAA), capacité en première classe : CAPACITY_FIRSTCLASS

capacité en classe affaire : CAPACITY_BUSINESS capacité en classe économique : CAPACITY_ECONOMY

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

4. 2. 2. La procédure Import

La procédure IMPORT correspond au programme le plus souvent rédigé par l’assistant d’importation. Elle permet de traiter toute une gamme d’imports courants, dans les fichiers de formats réglementés : feuille Excel, tables Access, fichiers à séparateurs virgules, point-virgule ou tabulation.

Pour l’import de certains types de fichiers, des classeurs Excel par exemple, la procédure IMPORT nécessite d’avoir une licence pour le module SAS/ACCESS TO PC FILES.

Syntaxe :

PROC IMPORT DATAFILE=’chemin et nom du fichier importé’

OUT=tableSAScréée DBCS=typeFichierLu REPLACE ;

<instructions optionnelles>

RUN ;

La table SAS créée est désignée par sa librairie et son nom. Le fichier importé est donné sous forme de chemin complet, avec le nom du fichier et son extension.

L’option REPLACE permet à SAS d’écraser une table SAS existante par la version importée. En son absence, SAS renvoie un message d’erreur si l’on essaye de créer une table qui existe déjà.

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

(24)

Principales valeurs possibles pour le type de fichier lu

Mot-clé Type de fichier

Nécessité ACCESS TO PC

FILES DLM Fichier à caractère délimiteur (blanc

par défaut) Non

CSV Fichier à séparateur virgule Non

TAB Fichier à séparateur tabulation Non

EXCEL2002 Classeur excel 2002 Oui

EXCEL2000 Classeur excel 2000 Oui

EXCEL97 Classeur excel 97 Oui

EXCEL5 Classeur excel 5 Oui

EXCEL4 Classeur excel 4 Oui

ACCESS2002 Table Access 2002 Oui

ACCESS2000 Table Access 2000 Oui

ACCESS97 Table Access 97 Oui

WK1 Classeur Lotus 1-2-3 version 2 Oui

DBF Fichier Dbase Oui

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

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

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

Exemple :

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

PROC IMPORT DATAFILE=’c:\perso\tdb\TableaudeBord.xls’

OUT=base.ventes03 REPLACE

DCBS=EXCEL2002 ; GETNAMES=YES ; SHEET=’Ventes2003’ ; RUN ;

Ces deux dernières méthodes sont plus simples que l’utilisation de l’étape Data pour importer des fichiers. Mais l’intérêt de l’importation par l’étape Data est de permettre d’importer exactement les données de la manière voulue (par exemple, sans erreur sur le type de variable : un numéro de département défini sous Excel sera importé comme variable numérique par la PROC IMPORT). L’étape Data permet également de ne pas commencer la lecture des données avant la nième ligne, et de donner aux variables créées toutes les caractéristiques voulues (nom, label, format) avec une instruction ATTRIB.

4. 2. 3. Utilisation de l’assistant d’importation

En TP, on utilisera également l’assistant d’importation (menu Fichier > Importer des données) pour créer une table SAS à partir d’un fichier externe. Le choix des types de fichiers importés est plus ou moins riche selon que le module SAS/ACCESS TO PC FILES est sous licence ou non. Dans le cas où ce module n’est pas sous licence, la liste se réduit à :

(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 ou Lotus.

4. 3. Saisie des données sous SAS

Si les données sont saisies sous SAS, elles doivent : suivre directement l’étape DATA,

être précédées du mot clé CARDS,

être suivies d’un caractère ; placé en début de ligne.

Exemple :

Dans la fenêtre Editeur de SAS, on saisit des données relatives aux caractéristiques physiques d’un parc national. Il s’agira, au cours du TP, d’étudier la relation entre la présence d’herbivores et l’environnement dans le parc. Dans la table SAS suivante, on trouve les caractéristiques des 10 zones étudiées.

• la variable ZONE identifie la zone étudiée,

• la variable HERB correspond au niveau de l’herbe,

• la variable BOSQUET indique la présence de bosquets,

• la variable EAU renseigne sur la proximité de l’eau,

• la variable HIPPO renseigne sur l’existence d’un programme de contrôle du nombre des hippopotames du site.

Dans la fenêtre Editeur de SAS, on tape les instructions suivantes : data parc;

input ZONE HERB $ BOSQUET $ EAU $ HIPPO $;

cards;

1 courte oui proche moyen 2 haute oui éloignée aucun 3 courte oui proche aucun 4 courte oui proche important 5 courte oui moyenne aucun 6 courte oui proche aucun 7 courte non éloignée aucun 8 courte oui moyenne important 9 courte non éloignée aucun 10 courte non éloignée aucun ;

run;

4. 4. L’export de tables SAS

L’export peut se faire à travers trois types de manipulations :

• avec l’assistant d’export (disponible dans le menu FILE>EXPORT), identique dans son principe et son ergonomie à l’assistant d’import. Nous aborderons cette possibilité en TP.

• avec la procédure EXPORT qui est le pendant de la procédure IMPORT.

• Avec une étape Data et deux instructions FILE et PUT qui sont le pendant des instructions INFILE et INPUT vues précédemment.

(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 au cours de l’étape DATA. Puisque la sortie attendue est un fichier externe et non table SAS, il est inutile d’indiquer un nom de série de données dans l’instruction DATA.

On emploie alors une instruction DATA _NULL_;

Pour créer un fichier texte à partir d’une table SAS, il faut :

• assigner un fichier de sortie par une instruction FILENAME,

• créer une étape DATA _NULL_ (puisque l’objectif n’est pas de construire une table SAS, mais de se servir d’éléments existants, afin de les présenter dans un fichier externe),

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

Chaque observation soumise à une instruction PUT sera ainsi copiée dans le fichier texte identifié par l’instruction FILE.

La syntaxe de l’instruction FILE est la suivante : FILE ‘nom_de_fichier’ ;

ou

FILE nom_logique ;

où le nom logique représente un fichier précédemment défini par une instruction FILENAME.

Options de l’instruction FILE

Pour créer un fichier dont les champs sont séparés par un délimiteur, on utilise l’option DLM= dans l’instruction FILE.

Syntaxe : DATA _NULL_ ; SET nom_de_table ;

FILE ‘nom_de_fichier’ DLM=’délimiteur’ ; Option DSD

Supposons qu’on exporte le fichier comportant des données sur les salaires, où les milliers sont séparés par une virgule.

Par exemple, une ligne de données serait la suivante : IA00100,04JUL2001,124, 000

Certains logiciels liront ces données comme quatre champs et non trois. Pour indiquer que les valeurs de données contenant des virgules doivent être présentées entre guillemets, on utilise l’option DSD dans l’instruction FILE.

data _null_;

set table_SAS;

file 'c:\Cours SAS\myfile' dlm=',' dsd;

put flight data : date9.

revenue : comma7.;

run ;

On obtiendra le résultat suivant :

IA00100,04JUL2001, “124, 000”

(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 une spécification est envoyée au pointeur d’écriture pour écrire au delà de cette limite, le système cherchera à écrire la valeur correspondante au début de la ligne suivante.

Ce peut être le cas d’une variable dont la longueur dépasse le nombre de caractères séparant la position courante de la fin de la ligne.

Cependant, ce mécanisme peut être géré par une option de l’instruction FILE :

• DROPOVER : la variable correspondante n’est pas écrite

• STOPOVER : l’étape DATA est arrêtée, et un message d’erreur envoyé dans le fichier LOG

• FLOWOVER : la variable est écrite au début de la ligne suivante (défaut).

Pour contrôler la taille d’une page (en nombre de lignes) : Syntaxe : FILE nom_logique PAGESIZE=nombre_de_lignes ; Utilisation de l’instruction PUT

L’instruction PUT s’utilise avec la même logique que l’instruction INPUT.

Cependant, au lieu de lire les données, elle permettra d’écrire les données en utilisant un FORMAT d’écriture. Ce format pourra aussi bien être un format SAS prédéfini qu’un format utilisateur préalablement défini par une PROC FORMAT, ou lu dans une librairie de formats utilisateur. La valeur exportée sera lors la valeur formatée, au lieu du comportement par défaut de SAS qui exporte la valeur stockée.

Par rapport à INPUT, il n’est pas nécessaire de signaler le type des variables caractère par un $. En effet, lors de l’export, le type des variables SAS est déjà connu.

La syntaxe de l’instruction PUT est la suivante : PUT

<contrôle du pointeur d’écriture> <nom_de_variable1> <format_d’écriture>

<contrôle du pointeur d’écriture> <nom_de_variableN> <format_d’écriture>

Il est possible de :

• se déplacer de n colonnes par rapport à la position actuelle : Opérateur + Exemple : PUT +n var1 2. ;

• se déplacer au début de la ligne suivante : Opérateur / Exemple : PUT / var 1 2. ;

• se déplacer à une colonne en position absolue sur la ligne courante : Opérateur @ Exemple : PUT @n var1 2. ;

• écrire une variable à un emplacement déterminé en indiquant la colonne de début et la colonne de fin. On ne peut pas dans ce cas indiquer de format d’écriture :

Exemple : PUT var1 5-7 ; Exemple :

filename russet 'c:\Cours SAS\Russet.txt';

data _NULL_;

set pays.russet;

file russet;

put pays @15 Gini @20 Farm @25 Rent @30 Gnpr @35 Labo @38 Inst @43 Ecks @47 Deat @52 Demo;

run;

ou de façon équivalente :

(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 la valeur formatée, au lieu du comportement par défaut de SAS qui exporte la valeur stockée.

Exemple :

PUT date DDMMYY10. ; Exercice 6 :

On dispose d’une table SAS qui décrit 27 chiens selon des variables de taille, poids, vélocité, intelligence, affection, agressivité et fonction (1 : compagnie, 2 : chasse, 3 : garde).

Exportez ces données dans un fichier texte chien.txt, dans le répertoire c:/cours SAS. La variable nom sera codée sur les colonnes 1 à 23, la variable taille sera codée à partir de la colonne 24 (de sorte que dans le fichier texte, toutes les variables seront alignées).

4. 4. 2. La procédure EXPORT

Cette procédure reprend le principe et la syntaxe de la procédure IMPORT déjà citée. Comme pour celle-ci, l’export de certains types de fichiers comme les classeurs Excel nécessite d’avoir une licence pour le module SAS/ACCESS correspondant. Si aucun module SAS/ACCESS n’est disponible, alors la procédure EXPORT ne saura produire que des fichiers textes.

Syntaxe :

PROC EXPORT DATA=tableSASlue

OUTFILE=’chemin et nom du fichier exporté’

DCBS=typeFichierCréé DELIMITER=délimiteur ;

<SHEET<nomFeuilleExcel ;>

RUN ;

Références

Documents relatifs

Cette organisation a pour but de récolter des fonds grâce à la communauté du badminton dans le monde, des stars aux joueurs loisirs, et de les reverser à des petits projets

Le sas de décontamination doit être installé à l'extérieur de la zone contaminée. Le sas de décontamination ne doit être installé en aucun cas à l'intérieur de cette zone.

La commande create table nomtable as permet la création ou la modification de tables ou de vues. 3.1 Création

Elles sont largement déficitaires pour le territoire de Cœur de Garonne au profit des EPCI voisins où ils trouvent des logements locatifs en plus grand nombre. Personnes

Les communes les plus anciennement urbanisées disposent d’un parc de logement plus diversifié : Cazères, Rieumes, Martres-Tolosane, Le Fousseret disposent ainsi de logements

Conformément aux dispositions de l’article 231-6 du Règlement Général de l’AMF, l’Offre porte, à la connaissance de l’Initiateur, sur la totalité des Actions en circulation

D= Nom de la table contenant les moyennes dans les classes et d’autres statistiques pour chaque classe : FREQ_ : effectif de la classe ; _RMSSTD_ : inertie intra-classe ; _NEAR_

B = Nom de la table SAS, créée automatiquement par SAS contenant, entre autre, les composantes principales et les variables quantitatives étudiées (cette table est nécessaire