Département de Sociologie Université Paris Nanterre INITIATION AU LOGICIEL SAS Année 2017-2018 Fascicule n°1 Département de Sociologie Fanny Bugeja-Bloch - Leïla Frouillou - Julien Gros - Alina Toader Fanny Bugeja-Bloch, [email protected], Second semestre. Leïla Frouillou, [email protected], Premier semestre : Groupe jeudi 13h30 DD408 Julien Gros, [email protected], Premier semestre : Groupe jeudi 15h30 DD408 Alina Toader, [email protected], Premier semestre : Groupe vendredi 10h30, DD407 Université Paris Nanterre 200 avenue de la République, Nanterre 92001 Cedex Descriptif du cours Initiation au logiciel SAS Ce cours consiste en l’apprentissage de la démarche d’analyse de bases de données quantitatives à partir du logiciel statistique SAS. Il permet d’une part de proposer les outils nécessaires à l’étude d’enquêtes quantitatives en Sociologie et en Démographie, et d’autre part d'acquérir la maitrise du logiciel SAS utilisé dans le monde de la recherche et de l’entreprise. Le contenu de ce cours porte ainsi sur l’apprentissage des principales commandes, procédures et syntaxes utilisées afin d’analyser enquêtes quantitatives et bases de données. Il offre ainsi la possibilité d’acquérir les notions nécessaires au maniement et à l’analyse de bases de données quantitatives (lecture, sauvegarde, construction, restructuration de bases, analyses descriptives et explicatives). Cet apprentissage s’appuie sur des exemples d’applications à partir d’enquêtes socio-démographiques. Le cours permet aux étudiants de se former à la recherche de données, notamment via le site du réseau Quételet. Organisation du cours Les étudiants peuvent être munis d’une clé USB afin de sauvegarder leurs fichiers et leurs documents. L’apprentissage progressif du logiciel au cours du semestre engage les étudiants à être assidus. Bibliographie - Decourt, O., SAS l’essentiel, Coll. « Applications & métiers », Dunod, Paris, 2011 - Duguet E., Introduction à SAS, Coll. « Economie et statistiques avancées », Economica, 2004. - Howell D.C., Méthodes statistiques en sciences humaines, Paris, Deboeck Université, 1998. - Kontchou Kouomegni, H., SAS : maîtriser SAS Base et SAS Macro, Dunod, Paris, 2007. - Sautory O., La statistique descriptive avec le système SAS, Paris, Insee Guides, n° 1 et 2, 1995. Téléchargement des bases de données, fichiers et documents Toutes les bases de données, les fichiers et les documents de cours sont sauvegardés sur la plateforme cours en ligne (http://coursenligne.u-paris10.fr/). Vous pouvez vous rendre dans la rubrique du cours pour télécharger l’ensemble des documents et les sauvegarder. Accès au logiciel SAS Tous les étudiants de l’université Paris Nanterre peuvent avoir accès gratuitement au logiciel SAS et l’installer sur leur ordinateur. Pour cela, il est nécessaire de disposer d’une adresse mail u-paris10.fr active. Les étudiants doivent se connecter à la plateforme située à l’adresse suivante : https://lad.education-recherche.fr/liste_des_offres Ensuite, il convient de télécharger les différents fichiers d’installation, puis installer le programme après avoir décompressé les fichiers téléchargés. Les détails de la procédure sont présents sur la plateforme de téléchargement. Pour plus d’information, vous pouvez contacter la Direction des Ressources Informatiques de l’Université. Contact : Secrétariat de la DRI - Bâtiment BSL – Bureau 307 Lundi, Mardi, Jeudi, Vendredi : 9h30 – 12h30 13h30 – 17h30) Tél: 01 40 97 49 01 - Email: [email protected] Sommaire Fascicule n°1 Introduction : Du questionnaire à l’analyse de données __________ 7 1. Objectifs________________________________________________________ 7 2. Les sources de données __________________________________________ 11 3. L'enquête ERFI _________________________________________________ 12 4. Des questions… à la base de données _______________________________ 14 I. L’environnement SAS - Les données SAS___________________ 17 1. L'environnement SAS ____________________________________________ 17 2. Les fenêtres SAS________________________________________________ 17 3. Les fichiers SAS ________________________________________________ 18 4. Les Tables SAS _________________________________________________ 19 5. Le libname _____________________________________________________ 20 6. Importation de données en Table SAS _______________________________ 22 7. Edition d’une Table SAS __________________________________________ 26 II. Les premiers pas avec SAS ______________________________ 28 1. Les procédures SAS – PROC ______________________________________ 28 2. Les Tables de données – DATA ____________________________________ 28 3. Les programmes SAS ____________________________________________ 29 4. La syntaxe SAS _________________________________________________ 30 5. PROC CONTENTS – Edition de Tables SAS __________________________ 31 6. PROC SORT – Tri des données ____________________________________ 33 7. PROC PRINT– Edition des données SAS_____________________________ 35 8. Opérateurs de conditions _________________________________________ 40 III. Traitements des Tables SAS _____________________________ 43 1. L’étape DATA __________________________________________________ 43 2. Création d’une Table SAS _________________________________________ 43 3. Extraction d’une Table SAS : KEEP – DROP – WHERE – IF ______________ 44 4. Suppression d’observations : IF… THEN DELETE ______________________ 46 5. Renommer et libeller les variables : RENAME – LABEL __________________ 48 6. Création de variables_____________________________________________ 51 7. PROC FORMAT – Format de variables ______________________________ 55 8. Supports de variables ____________________________________________ 61 5 IV. Appariement de Tables SAS _____________________________ 64 1. Fusion de Tables : MERGE – ajout de variables________________________ 64 2. Empilement de Tables : MERGE – ajout d’observations__________________ 65 3. Variable origine des Tables ________________________________________ 67 Suite dans le fascicule n°2. 6 Introduction : Du questionnaire à l’analyse de données 1. Objectifs Ce cours d’initiation à SAS a trois principaux objectifs : - l’apprentissage du logiciel SAS ; - l’apprentissage de la recherche de bases de données sur une thématique sociologique ou démographique ; - l’apprentissage de la démarche d’analyse d’une base de données quantitatives. Ce cours permet d’acquérir le maniement de bases de données et les démarches d’analyse de ces données à partir du logiciel SAS. Ces apprentissages nécessitent d’avoir des notions de ce qu’est une base de données quantitatives. Ainsi, la maitrise des principaux rudiments du logiciel, la syntaxe, les commandes et les procédures sont autant d’éléments à acquérir. Pour cela, nous travaillerons en articulant deux supports : - une partie des séances est construite en commun, à partir d’une enquête sociodémographique « Etude des Relations familiales et intergénérationnelles » (ERFI) issue des enquêtes internationales « Générations et Genre » (GGS) - l’autre partie des séances permet de travailler sur des bases choisies par les étudiants, en adéquation avec un projet de recherche individuel (mémoire par exemple). Les thématiques Les thématiques développées lors de ce cours sont : - Les données initiales (enquêtes et questionnaires) - Le maniement de SAS (commandes, procédures et syntaxe) - Les bases de données (Tables) - La manipulation des Tables (modification, création des données) - Traitements statistiques des données - L’interprétation des résultats 7 L’utilisation du logiciel SAS et le traitement de données quantitatives, notamment en sciences sociales, s’inscrivent dans un processus d’analyse. Si le traitement des données est considéré dans l’analyse comme l’étape de constatation, elle n’en demeure pas moins dépendante des étapes antérieures qui sont à l’origine de l’élaboration des données quantitatives. Figure 1 : Les étapes de la démarche 8 L’utilisation du logiciel SAS peut alors être mobilisée à des moments différents de la chaîne statistique : - dans la saisie des données (ce qui se fait rarement, SAS n’étant pas en soit un logiciel de capture de données), - dans le nettoyage des bases de données ou le recodage de données (des tris croisés peuvent permettre de vérifier la cohérence des données et de leur saisie), - dans l’analyse statistique des données (à partir de Tableaux statistiques complets) Figure 2 : De la conception d’une enquête à son traitement Source : Les six phases d’une enquête statistique, Alain Desrosières, "La portée sociologique des diverses phases du travail statistique", in Des mesures, J-L Besson, M Comte (dir.), PUL, 1986, p 249. 9 Figure 3 : Le schéma de la chaîne statistique 10 2. Les sources de données Qu’est-ce qu’une base de données quantitatives ? Une base de données est un fichier dans lequel un ensemble de données sont rassemblées. Ces données peuvent être sous formes différentes : chiffres, codes, mots, texte… Les informations présentes dans une base de données peuvent être issues de sources différentes : des enregistrements administratifs ou de population (fichiers des impôts, fichiers du personnel d’une entreprise, fichiers d’état-civil…), des recensements ou des enquêtes (recensement de la population, enquête emploi de l’INSEE, enquêtes sociologiques ou démographiques…). On distinguera : - les sources de données de type qualitatif : entretiens, observations… - les sources de données de type quantitatif : fichiers, enregistrements, recensements, enquêtes par questionnaires… Attention toutefois à ne pas faire d’amalgames entre sources de données et méthodes d’analyses. Si les sources de données quantitatives sont analysées grâce à une méthode quantitative (les statistiques), les sources de données qualitatives peuvent, elles, être exploitées tant par les outils du « qualitativiste » que ceux du « quantitativiste ». Il est par exemple possible de constituer une base de données à partir d’occurrences tirées d’entretiens. Nous travaillerons à partir de sources de données quantitatives et dans le cas présent à partir d’une enquête socio-démographique réalisée à partir de questionnaires auprès d’un échantillon de population (plus de 10 000 personnes). Du questionnaire des enquêtes à l’analyse des données Les enquêtes socio-démographiques sont un bon exemple pour comprendre ce qu’est une base de données. L’objectif d’une enquête est d’étudier les comportements d’une population définie à partir d’un échantillon et de rapprocher ces comportements des caractéristiques des individus. Dans la très grande majorité des cas, les enquêtes s’appuient sur des questionnaires. Les questions permettent de recueillir des informations. Ces questions peuvent être de types différents : questions ouvertes, fermées, à choix multiples… En fonction du type de réponse et de la nature de l’information que l’on cherche, mais aussi de l’utilisation que l’on fera lors de l’analyse, on choisira quelles formes devront prendre les questions et les réponses attendues (étude de proportion, calcul d’indicateur synthétique…). 11 Qu’est-ce qu’une base de données ? Une base de données est une matrice (un tableau) dans lequel les données sont ordonnées : - les questions correspondent à des variables, - les réponses aux questions sont des modalités (de réponse). Pour chaque répondant (numéro de questionnaire), on dispose des réponses (modalités) aux questions (variables). Les réponses de l’ensemble des personnes enquêtées sont intégrées à la base de données : - chaque colonne représente une question (variable), - chaque ligne correspond à un individu (répondant, observation), - les modalités de réponse sont ajoutées dans les cellules de cette matrice. Attention, une variable ne correspond pas toujours à une question. Des variables peuvent avoir été créées lors de la création de la base de données (création de variables synthétiques ou de variables de contrôle). De même, si une question offre au répondant la possibilité de donner plusieurs réponses (exemple : choix 1 puis choix 2), alors plusieurs variables pourront être créées (variable choix 1, variable choix 2). 3. L'enquête ERFI L'enquête « Etude des relations familiales et intergénérationnelles » (ERFI) est une enquête réalisée par l’Ined (Institut national des études démographiques) et l’Insee (Institut national de la statistique et des études économiques). Elle correspond à la version française d’une enquête internationale comparative, « GGS » (Generations and Gender Surveys), initié par la Commission économique de l’ONU pour l’Europe et aujourd'hui coordonnée par le Nidi (Netherlands Interdisciplinary Demographic Institute). Il s’agit d’une enquête socio-démographique à passages répétés1. C’est une enquête longitudinale, le même échantillon de population a été enquêté en 2005, 2008, 2011 pour voir les changements de comportements au sein de la population, voir si les intentions déclarées lors d'une vague de l'enquête se sont réalisées. Nous travaillerons dans ce cours à partir de la première vague de l'enquête (ERFI-2005). 1 Voir https://erfi.web.ined.fr/ 12 Les thèmes développés dans l'enquête ERFI? L'enquête ERFI cherche principalement à étudier les situations familiales, l'organisation des familles et leur situation socio-économique, les relations familiales et intergénérationnelles. Pourquoi vit-on en couple ? (question d’âge, situation professionnelle, de santé) Qu’est-ce explique le fait d’avoir ou d’adopter des enfants ? Comment s’organise la vie de couple et la vie de famille ? Qu’est-ce qui explique le partage des activités au sein de la famille ? Comment évolue l’entraide familiale ? (Qui aide qui ?) De plus, elle identifie pour chaque personne interrogée ses caractéristiques sociodémographiques. Le recueil et la saisie des données L'enquête est dite représentative à l'échelle de la France métropolitaine. Un échantillon de 10000 hommes et femmes de 18 à 79 ans a été sélectionné. Les personnes ont été interrogées en face à face avec un enquêteur à partir d'un questionnaire informatisé (CAPI). Exemple : 13 Chaque question donne lieu à une variable et les réponses sont automatiquement codées sont la forme de modalités de réponse qui seront présentes dans la base de données. Souvent les réponses aux questionnaires sont codées à partir de modalités numériques : on parle alors de variables numériques. Mais les réponses peuvent aussi donner lieu à des modalités codées en texte, en lettre : il s'agit alors de variables alphanumériques. 4. Des questions… à la base de données A chaque question est attachée une variable qui sera présente dans la base et qui représentera le contenu de la question (ex : CA_MARIE). Les modalités de réponses qui sont proposées dans le questionnaire peuvent être saisies directement dans la base (ex : pour la question de la variable CA_MARIE, on saisit directement 1 ou 2 selon le résultat de la réponse). Elles pourraient aussi être saisies sous la forme de codes créés pour représenter les modalités de réponses du questionnaire. Exemple de question : (Extrait du questionnaire ERFI) 14 Exemple de codage de réponse : (Extrait du dictionnaire des odes) Les modalités de réponses codées sont ensuite inscrites dans chaque colonne se référant à la variable (colonne) dont elle dépend et pour chaque individu de l'enquête (ligne). Ainsi, toutes les réponses de l'enquête à une même question se trouveront dans la même colonne, alors qu'une même ligne dans la base représentera l'ensemble des réponses aux questions pour un seul et même répondant (même identifiant). 15 Vocabulaire et notions Une base de données (fichier de données) est appelée Table SAS. On parle donc de Table SAS pour un fichier de données, quelle qu'en soit la source initiale (fichier administratif, recensement, enquête...). Chaque ligne de la Table SAS représente une observation, repérée dans la Table par un identifiant. Une observation peut représenter, une personne enquêtée ou toute autre entité d'étude (une entreprise, un pays...). On parle d’unité statistique. L'ensemble de ces observations est appelé population. Si l'étude est réalisée sur l'ensemble de la Table, elle porte sur l'ensemble de la population présente dans la Table, si l'analyse n'est réalisée que sur une partie des observations, on parle de sous-population, sélectionnée à partir de l'ensemble de la Table. 16 I. L’environnement SAS - Les données SAS 1. L'environnement SAS SAS est un programme d'analyse de données. Il permet de mettre en forme les bases de données (variables, modalités et observations) : − classer et mettre au format les données, − codifier et renommer les données. Mais SAS est avant tout un logiciel de traitement statistique de données : − analyses univariées (fréquences...) − analyses de distribution, indicateurs synthétiques (moyennes...) − analyses multivariées (Tableaux croisés, de contingence, régressions...) SAS est un logiciel de programmation. Pour effectuer des opérations avec SAS, il est nécessaire d'écrire dans une fenêtre dédiée des lignes de commande soumises à une syntaxe. Ces lignes de commande sont ensuite lancées afin que SAS les exécute. L'icône permet d'entrer dans le logiciel SAS (ouvrir SAS) et d'accéder aux différentes fenêtres d'accueil. 2. Les fenêtres SAS SAS comprend 3 principales fenêtres : − le program editor : l'éditeur de programme, c'est la fenêtre où les commandes sont écrites. On peut lancer l'ensemble des commandes comprises dans le programme ou seulement quelques lignes de commandes sélectionnées au préalable. − le log : le journal, c'est la fenêtre qui contient les commentaires SAS (compterendu des commandes lancées par l'éditeur de programme). S'il y a lieu, elle répertorie aussi les erreurs lors de l'exécution des commandes. − l'output : la sortie, c'est la fenêtre où apparaissent les résultats obtenus lors de l'exécution des commandes. Toutes les commandes ne donnent pas lieu à des sorties SAS. Deux autres fenêtres sont aussi accessibles : − l'explorateur : il permet de naviguer dans l'organisation des fichiers SAS. − les résultats : cette fenêtre permet de retrouver la liste des précédents résultats et de les appeler directement à l'écran dans le fichier d'output (sortie). Cela représente un raccourci vers les sorties réalisées antérieurement. 17 Les fenêtres peuvent être appelées par le menu, par les onglets en bas de page et certaines fenêtres par des touches de raccourci : F5 : program editor, éditeur de programme F6 : log, journal F7 : output, sortie 3. Les fichiers SAS Les fenêtres d'éditeur de programme, du journal et de sortie, génèrent des fichiers spécifiques. On peut : − créer de nouveaux fichiers, − sauvegarder des fichiers en cours, − ouvrir des fichiers déjà existants. La création, l'enregistrement ou l'ouverture de ces fichiers s'effectuent grâce aux icônes traditionnelles utilisées pour ces opérations ou par le menu. Les extensions des fichiers sont : − « .sas » : pour les fichiers de l'éditeur de programme (commandes), − « .log » : pour les fichiers du journal (log, historique des commandes), − « .list » : pour les fichiers de résultats. En plus d'enregistrer des fichiers avec l'extension spécifique à SAS (que seul SAS peut lire), on peut sauvegarder ces fichiers sous des formats texte lisibles avec un 18 logiciel de traitement de texte (OpenOffice, word...). Les types de formats d'enregistrement disponibles sont « .rtf » et « .dat ». Pour cela, après avoir vérifié que la fenêtre adéquate est bien activée, il convient de sélectionner dans le menu : Fichier / Enregistrer sous, puis de choisir le « type » de fichier souhaité. 4. Les Tables SAS Les Tables SAS ont pour extension « nom_table.sas7bdat ». Elles ne sont lisibles que par SAS. Pour lire une Table SAS ou réaliser un traitement sur les données d'une Table, une commande permet à chaque opération d'identifier la Table SAS par son nom et par son emplacement (à l'aide du libname). La particularité de SAS est qu'il fonctionne par des emplacements dédiés sur l'ordinateur, qu'on appelle bibliothèques ou libname. Ce sont des dossiers de stockage de fichiers SAS. Ces bibliothèques sont identifiées par un nom (libname) qu'il faut leur attribuer en même temps que leur emplacement dans le disque dur. Le libname peut être considéré comme un accès direct virtuel à la bibliothèque SAS dans laquelle se trouvent les Tables SAS. Dans certains logiciels, l'accès à une base de données se fait en identifiant le chemin à parcourir dans le disque dur pour accéder à la base de données. Dans SAS, le libname (défini au préalable) représente l'équivalent raccourci du chemin d'accès à la Table SAS. 19 Exemple : - Accès traditionnel à une base de données (autre logiciel) : « c:\Utilisateurs\nom_utilisateur\nom_base.xlsx » - Accès avec SAS à une Table : nom_libname.nom_table Remarque : Pour travailler à partir d’une Table SAS, il faut au préalable que celle-ci soit présente (donc copiée) sur le disque dur à l’emplacement défini par le libname. Dans l’exemple précédent, la Table SAS aura été copiée sur le disque « C » dans le répertoire « nom_utilisateur » dont le chemin sera «c:\Utilisateurs\nom_utilisateur\». 5. Le libname Le libname est donc une bibliothèque virtuelle SAS (identique à un répertoire) qui n'apparait pas dans le disque dur mais dont seul SAS en reconnait l’existence et le chemin d'accès. On peut créer plusieurs libname (bibliothèques SAS). On peut les visualiser dans la fenêtre de l'explorateur SAS (seul moyen de les visualiser : « Bibliothèques ») et d'observer leur contenu (tables sauvegardées dans ces bibliothèques). Exemple : Dans la bibliothèque que l’on aura nommée par exemple TABLESAS (nom de libname choisi), on trouvera les tables SAS : Répondant2, Base_etudiants1… Remarque : Par défaut, les Tables SAS sont enregistrées dans la bibliothèque « WORK ». C'est une bibliothèque temporaire dont le contenu n'est conservé que pendant une même session SAS. Lorsque SAS est fermé, les tables de données qui s'y trouvent sont effacées. On parle alors de tables temporaires. Création d'un libname On a deux moyens de créer un libname : Par une ligne de commande de l'éditeur de programme : Dans la fenêtre de l'éditeur, écrire la ligne de commande suivante : libname nom_libname « chemin d’accès » ; 20 Ex1 : libname nom_libname1 «c:\Utilisateurs\nom_utilisateur\» ; - les tables auront été copiées au préalable dans le répertoire «c:\Utilisateurs\nom_utilisateur\» du disque dur) Ex2 : libname nom_libname2 «h:\SAS\rep_tables\ » ; - les tables auront été copiées dans le disque « h » et dans le répertoire «h:\SAS\rep_tables\ » - le disque « h » peut être un disque dur externe (clé USB) ou un espace réservé sur un serveur. Puis exécuter à l'aide de la touche F8 ou l'icône Par le menu : Créer le libname en choisissant dans le menu l'icône (nouvelle bibliothèque) Choisir l'option Activer au démarrage (ouverture par défaut de la bibliothèque en début de session). Remarque : Le nom du libname doit respecter certains critères : − il ne doit pas dépasser 8 caractères − il ne doit pas commencer par un chiffre − il peut comprendre « _ » Pour lire une Table SAS, il faut bien évidemment que la Table ait été copiée (sauvegardée) à l'endroit identifié dans le chemin de la bibliothèque (lors de la 21 création du libname). Puis lorsqu’on appelle la Table, on la désigne par le libname qui identifie le lieu de sa sauvegarde et par son nom propre. Exemple : data=nom_libname.nom_table; Nous verrons plus loin la commande data=… qui permet de désigner la Table SAS à partir de laquelle l’opération souhaitée sera exécutée. Exemples : proc contents data=nom_libname.nom_table; proc contents data=TABLESAS.repondant2; Remarque : On peut créer plusieurs bibliothèques (libname) de suite dans le début d’un programme. Ces bibliothèques pourront « pointer » vers plusieurs lieux où des tables SAS différentes sont sauvegardées. On utilisera ensuite ces bibliothèques au fur et à mesure des procédures. Attention, comme chaque fois, lorsque les bibliothèques sont créées par l’éditeur de programme, vous devrez vérifier lors d’une nouvelle session si les bibliothèques existent toujours (avec l’explorateur). Dans le cas contraire vous devrez les recréer. On peut alors exécuter cette tâche répétitive à chaque début de session lorsqu’il s’agit de quelques lignes présentes au début d’un programme. Exemple : libname test1 « h:\SAS\rep_tables\enquete1\ »; (tables SAS enregistrées dans le répertoire enquete1) libname test2 « h:\SAS\rep_tables\enquete2\ »; (tables SAS enregistrées dans le répertoire enquete2) 6. Importation de données en Table SAS Les fichiers de données peuvent être par défaut au format SAS. C’est le cas pour de nombreux fichiers d’enquêtes, notamment ceux proposés par l’INSEE. Cependant, vous pouvez disposer de bases de données sous un autre format. Par exemple, si vous réalisez votre propre enquête et que vous saisissez vos données sous Excel, vous pouvez transformer votre fichier (base de données) Excel en fichier SAS. Les données sont alors directement mises au format SAS et peuvent ainsi être lues par SAS. Par le menu : Cette procédure utilise l’outil d’importation de Table proposé dans le menu de SAS. • A partir du menu principal de SAS: - Fichier / Importation de données 22 - Choisir le format de la Table importée (Microsoft Excel…) puis « Suivant ». - Identifier la base Excel (le chemin dans votre disque dur) avec l’icône « Browse » et ouvrir le fichier Excel correspondant. - Identifier la feuille Excel à importer dans le menu déroulant (« Suivant »). Dans un fichier Excel plusieurs feuilles peuvent être présentes. A vous de sélectionner la feuille de votre matrice de données. Si le fichier Excel ne comprend qu’une seule 23 feuille, par défaut apparaît « $Données ». SI votre fichier Excel comprend plusieurs feuilles, choisissez alors celle qui correspond à votre matrice de base de données à importer. • Définir la bibliothèque dans laquelle la base sera importée. Attention, par défaut apparaît la bibliothèque WORK. Dans ce cas, la Table SAS sera générée temporairement. A la fin de la session, elle sera supprimée. Si vous souhaitez générer une table permanente (sauvegarde sur le disque dur ou sur un autre disque), il convient de remplacer WORK par le nom de la bibliothèque où l’on veut voir figurer la Table importée. - Nommer la nouvelle Table SAS importée (« Suivant »). - Puis « Terminer » (sauter l’étape de création du protocole d’importation). Note : Le protocole d’importation permet de créer un fichier « type » d’importation qui pourra être réutilisé. Il synthétise la démarche suivie pour l’importation de bases de données externes. Cette étape est facultative. 24 Par des lignes de commande – procédure PROC IMPORT : On peut aussi importer en SAS une base d’un autre format à l’aide d’une procédure PROC IMPORT (voir plus loin l’explication des procédures PROC). Dans l'éditeur de programme, écrire les lignes de commande suivante : Proc import datafile = "h:\SAS\rep_tables\base_etudiants1.xls" out = tablesas.Base_etudiants1 dbms=xls replace; sheet ="Données"; getnames = yes; mixed = yes; Run ; Descriptif des commandes: - Out = définit le libname et le nom de la table SAS créée Dbms = détermine le type de fichier importé Replace : remplace le fichier importé si un autre fichier du même nom a déjà été importé Sheet = commande appliquée pour un fichier source Excel, détermine le nom de la feuille Excel importée Getnames = indique la première ligne du fichier source comme ligne de noms de variables Mixed = permet d’importer sous la forme de variables « caractère » des variables codées alternativement par des chiffres et des caractères selon les observations 25 7. Edition d’une Table SAS Avec SAS, il est possible d’observer à l’écran le contenu d’une base de données enregistrée sous le format SAS (« .sas7bdat »). Pour cela on peut utiliser l’éditeur de Table SAS. • A partir du menu principal de SAS: - Outils / Editeur de Tables SAS • Dans le menu de l’éditeur de Table SAS : - Icône Ouvrir : - Choisir la Bibliothèque SAS dans laquelle se trouve la Table SAS à éditer - Sélectionner la Table SAS dans la liste proposée, puis ouvrir. 26 Attention : Pour pouvoir être modifiée ou pour en analyser le contenu, une Table SAS ne doit pas être ouverte avec l’éditeur de table SAS. Il est nécessaire de fermer la fenêtre de l’éditeur de table avant tout travail sur la Table. Note : Si la Table SAS n’apparaît pas : - soit la Bibliothèque recherchée n’a pas été créée (où elle l’a été temporairement) ; il faut donc la recréer en vérifiant qu’elle représente bien le chemin d’accès à la Table SAS copiée sur le disque dur. - soit la Table SAS n’a pas été copiée sur le disque dur à l’endroit correspondant à la bibliothèque identifiée dans SAS. Rappel : Les Tables SAS doivent être copiées dans le disque dur à l’endroit qui sera ensuite identifié lors de la création du libname (bibliothèque). Si les Tables ont été importées, copiées ou générées temporairement dans la bibliothèque WORK, pour les éditer il faudra aller les chercher dans la bibliothèque WORK. Astuce : Pour visualiser le contenu d’une Table SAS à l’aide de l’éditeur de Table, une autre méthode consiste, à partir de la fenêtre de l’explorateur, à identifier la Table dans la bibliothèque adéquate et à double-cliquer sur le nom de la Table. Ne pas oublier de fermer la fenêtre de l’éditeur après visualisation. 27 II. Les premiers pas avec SAS Il existe deux types de commandes avec SAS : Les procédures (PROC) et les étapes DATA. Les PROC permettent de créer des résultats visibles dans la fenêtre output (sortie) alors que les étapes DATA permettent, elles, de modifier les Tables SAS (leur contenu ou leur forme). 1. Les procédures SAS – PROC Les PROC sont des commandes générales de traitement. Elles permettent de décrire ou d’éditer une Table, d’effectuer des traitements statistiques… Les PROC génèrent (presque) toujours des résultats, des sorties dans la fenêtre output. Elles débutent par la commande PROC et se terminent pas la consigne d’exécution RUN. Elles s’effectuent à partir d’un fichier de données, une Table que l’on identifie par une commande DATA qui nomme la table de travail et la bibliothèque où elle se trouve. proc contents data=nom_libname.nom_table; Exemple : proc contents data=TABLESAS.repondant2; Il existe plusieurs types de procédures (PROC), en voici quelques exemples : - PROC CONTENTS : pour connaître le contenu d’une Table - PROC PRINT : pour éditer à l’écran le contenu d’une Table - PROC FREQ : pour réaliser des tableaux de distribution, tableaux croisés… - PROC MEANS : pour calculer des moyennes… - PROC IMPORT : pour importer des données en format SAS 2. Les Tables de données – DATA Les Tables SAS peuvent être temporaires (elles sont supprimées lorsqu’on ferme la session SAS) ou permanentes (sauvegardées dans une bibliothèque SAS). - Les TABLES permanentes doivent figurées dans une bibliothèque SAS créée (répertoire de travail identifié par un Libname). - Les TABLES temporaires figurent par défaut dans la bibliothèque temporaire de travail « WORK » (libname: work). Exemples : - On peut créer une Table temporaire (par défaut dans la bibliothèque work). data test; ou data work.test; L’absence de libname indique qu’une Table temporaire est générée dans work. 28 - On peut créer une Table permanente (dans la bibliothèque choisie). data TABLESAS.test; Une Table permanente est générée dans la bibliothèque TABLESAS. 3. Les programmes SAS Les programmes de commande SAS est un logiciel de programmation. Il est nécessaire d’écrire des lignes de commande à partir d’une syntaxe spécifique puis de les lancer. Ces lignes de commandes sont écrites dans l’éditeur de programme (fenêtre de l’éditeur). Elles peuvent être sauvegardées sous la forme d’un programme à lancer intégralement ou partiellement. - pour écrire dans l’éditeur, cliquer sur la fenêtre de l’éditeur - par défaut le nom du programme est « sans titre1 » - pour sauvegarder, le programme de commande : Menu : Fichier / Enregistrer ou Enregistrer sous Définir le chemin d’accès où vous souhaitez sauvegarder votre fichier programme. - dans la barre de la fenêtre Editeur apparaît le nom du fichier. - pour sauvegarder, vous pouvez aussi utiliser l’icône de la barre de menu. Remarque : L’extension des fichiers de programme SAS est : « nom_fichier.sas ». Lorsque vous apportez des changements au programme (écriture de nouvelles lignes de commande) et que le fichier de programme n’a pas été sauvegardé, un astérisque (*) apparaît à droite du nom du fichier. Il vous faut alors sauvegarder votre fichier programme sous peine de perdre les changements que vous avez réalisés. Vous pouvez « appeler » ou accéder directement à la fenêtre de l’éditeur grâce à la touche de raccourci [F5]. Lancement de commandes ou d’un programme On peut choisir de « lancer » l’ensemble d’un programme (tout le contenu du fichier programme) ou seulement quelques lignes de commande d’un programme. 29 Pour lancer l’ensemble d’un programme, activer la fenêtre de l’éditeur (en cliquant dessus) : - presser la touche [F8] - ou cliquer sur l’icône « soumettre » : Pour lancer quelques lignes de commande, sélectionner en sur-brillant à l’aide de la souris les lignes de commande : - presser la touche [F8] - ou cliquer sur l’icône « soumettre » : 4. La syntaxe SAS Un programme SAS se compose de sections de programmation délimitées par des lignes horizontales (cohérence d’une procédure). libname TABLESAS "z:\SAS\rep_tables\"; proc contents data=TABLESAS.repondant2; run; data TABLESAS.test; set TABLESAS.repondant2; run; Chaque ligne de commande, associée à une instruction, se termine par un pointvirgule « ; ». Chaque groupe de commandes (ou procédure) se termine par l’expression « run ; ». On peut alors exécuter l’ensemble du programme ou une partie seulement du programme (séparée par des lignes horizontales). L’ajout de commentaires dans un programme SAS L’ensemble des caractères d’un programme ne constitue pas forcément des lignes de commande. On peut écrire des commentaires dans un programme SAS (Editeur). Il est même recommandé de toujours indiquer ce qui est réalisé au fur et à mesure du programme, pour se souvenir de ce qui a été fait. Les commentaires doivent être encadrés par un astérisque et un point-virgule (* ;) * Texte du commentaire ; Lorsque le commentaire contient un point-virgule ( ; ) ou plusieurs lignes, on encadre le bloc de lignes de commentaire par deux slash et astérisques (/* */) /* début du commentaire ; fin du commentaire */ 30 Exemples : * Description du contenu de la base ; ou /* Description du contenu de la base ; Tableau de présentation des données */ 5. PROC CONTENTS – Edition de Tables SAS Visualisation du contenu d’une Table La procédure PROC CONTENTS permet de visualiser le contenu d’une Table SAS. On peut ainsi connaître le contenu de la Table, le nombre d’observations qu’elle comprend, les variables qui y sont présentes ainsi que le format de celles-ci. Lorsque cette procédure est lancée, une sortie écran permet de voir le contenu des informations de la Table. Par défaut, la liste des variables apparaît par ordre alphabétique. proc contents data=TABLESAS.repondant2; run ; 31 Visualisation du contenu d’une bibliothèque On peut réaliser cette opération sur l’ensemble des Tables d’une bibliothèque (_all_). On observe alors dans la sortie écran, l’ensemble des informations pour toutes les Tables présentes dans une même bibliothèque (Libname). proc contents data=tablesas._all_; run; Les options La procédure PROC CONTENTS peut s’accompagner d’options. L’option « short » On peut choisir de ne visualiser que le nom des variables. proc contents data=TABLESAS.repondant2 short ; run ; L’option « position » On peut faire apparaître les variables dans l’ordre d’apparition dans la Table (positionnement). proc contents data=TABLESAS.repondant2 position ; run ; Astuce : Si on souhaite rapidement retrouver une variable dans la liste alphabétique affichée en Sortie, on peut exécuter une recherche avec CTRL F. 32 6. PROC SORT – Tri des données Lors de la création d’une base de données, les observations sont le plus souvent présentées dans l’ordre de leur saisie, souvent dans l’ordre croissant de l’identifiant des observations : par exemple par le numéro de questionnaire (du questionnaire n°1 ou dernier saisi). Les observations peuvent cependant être triées selon d’autres critères que l’ordre croissant du numéro d’identifiant. Ainsi, on peut choisir de présenter les observations d’une Table d’enquêtés en distinguant en début de base les répondants femmes, puis les répondants hommes. De même, on peut classer ensuite par ordre les femmes et les hommes en fonction de leur âge : la Table se présentera alors avec successivement les femmes les plus jeunes, jusqu’aux plus âgées, puis en fin de Table, les hommes les plus jeunes, jusqu’aux plus âgés. Lors de la visualisation des données, on verra alors les observations classées selon l’ordre du tri effectué par la procédure PROC SORT. Tri croissant On peut trier les observations d’une Table selon les valeurs croissantes ou décroissantes d’une ou plusieurs variables. La syntaxe « by nom_var1 nom_var2 ; » définit l’ordre de tri : d’abord en fonction de la variable1 puis de la variable2 (dans l’exemple qui suit par le sexe du répondant, puis par son âge). proc sort data=TABLESAS.repondant2 ; by ma_sexe ma_ager ; run ; Note : Par défaut, le classement se fait par ordre croissant (alphabétique ou numérique). Cette procédure (PROC SORT) est indispensable pour réaliser d’autres procédures selon certains critères. Si vous souhaitez afficher à l’écran (voit plus loi : PROC PRINT) les données en fonction d’un critère (en fonction du sexe du répondant par exemple), alors il faudra au préalable trier la Table par ce critère (sexe du répondant). Attention : Il n’y a aucune sortie écran du tri effectué (on ne voit donc pas le résultat du tri). Pour vérifier, il faut observer le Journal. 33 Tri décroissant On peut trier les observations d’une Table selon les valeurs décroissantes d’une ou plusieurs variables. La syntaxe utilisera alors la commande (descending) placée avant la variable triée de manière décroissante : by variable1 descending varariable2 ; Les observations seront d’abord classées selon la variable 1 de manière croissante, puis selon la variable 2 de manière décroissante. proc sort data=TABLESAS.repondant2 ; by ma_sexe descending ma_ager ; run ; Vérification du tri des données On peut vérifier le classement des observations suite au tri réalisé avec : - l’éditeur de Table (ou avec la procédure PROC PRINT) - la procédure de vérification du contenu (PROC CONTENTS) Exemple de vérification avec une PROC CONTENTS : proc contents data=TABLESAS.repondant2 ; run ; En fin de liste (Sortie SAS), apparaissent les informations sur le tri de la Table. 34 Création d’une table triée On peut souhaiter générer une nouvelle Table à partir du tri de la Table source. On disposera alors en plus de la Table initiale non triée d’une nouvelle Table triée selon les critères spécifiés lors de la PROC SORT à laquelle on ajoutera l’option : out = nom_libname.nom_nouvelleTable proc sort data=TABLESAS.repondant2 out = work.repondant2_tri; by ma_sexe descending ma_ager ; run ; 7. PROC PRINT– Edition des données SAS Pour connaître le contenu d’une Table SAS, vérifier la codification des variables (les modalités), on peut éditer la Table à l’aide d’une Procédure SAS (PROC PRINT). C’est une des manières d’explorer la Table. Edition complète de Table SAS La procédure PROC PRINT permet de faire apparaître à l’écran (fenêtre de sortie) les valeurs des variables d’une Table. Elle permet notamment de vérifier la codification et la cohérence des données. proc print data=TABLESAS.repondant2 ; run ; Attention : La procédure s’exécute pour l’ensemble des variables de la Table. Il est donc déconseillé de procéder comme cela pour des Tables disposant de nombreuses variables (comme la Table « repondant2 »). On procède alors à une édition partielle de la Table, on sélectionne alors les variables sur lesquelles on souhaite appliquer la procédure. Interrompre l’exécution : Si toutefois vous avez lancé l’instruction print sans préciser les variables à faire apparaître et que SAS « mouline » sans succès, vous pouvez interrompre l’exécution de la commande en ouvrant le Gestionnaire de tâches de SAS grâce à l’icône Interrompre dans le menu principal ou les touches du clavier [Ctrl+Pause]. Les menus suivants apparaitront. Choisissez successivement les options de réponse 1 et Y. 35 Edition partielle de Table SAS Il est rare de devoir observer l’intégralité du contenu d’une Table SAS, mais plutôt une partie seulement de la Table en ne choisissant que quelques variables à faire figurer dans l’édition. Cette procédure est souvent utilisée après la construction de variables. Elle permet de vérifier ce qui a été réalisé. On définit les variables à faire figurer à l’aide d’une ligne de commande : var nom_var1 nom_var2 nom_var3…; Exemple : proc print data=TABLESAS.repondant2 ; var ident ma_anais ma_ager ma_sexe mc_diplome ca_mdebcoh ca_adebcoh ca_marie ca_pacs ; run ; Remarque : Une même ligne de commande peut être écrite sur deux lignes successives de programme (ex : liste de variables) sans conséquence ; la syntaxe de la ligne de commande étant définie par le point-virgule ( ; ). 36 Les options La procédure PROC PRINT peut être accompagnée d’options. L’option (obs=nombre) On peut choisir de ne montrer qu’un certain nombre d’observations. Ainsi, les n premières observations seront éditées : (obs=nombre_observations). Cette option est intéressante dès lors que l’échantillon est important. Exemple : proc print data=TABLESAS.repondant2 (obs=8); var ident ma_anais ma_ager ma_sexe mc_diplome; run ; L’option noobs On peut choisir de ne pas faire apparaître le rang d’observation désignant la ligne dans la Table SAS (obs : ligne des observations de la Table) : noobs Exemple : proc print data=TABLESAS.repondant2 (obs=8) noobs ; var ident ma_anais ma_ager ma_sexe mc_diplome; run ; L’option Label On peut choisir de faire apparaître les labels (« étiquettes ») des variables au lieu de ne faire juste apparaître que les noms des variables : label Exemple : proc print data=TABLESAS.repondant2 (obs=8) label ; var ident ma_anais ma_ager ma_sexe mc_diplome; run ; 37 Avec label Sans Label Edition d’observations triées On peut afficher les données d’une Table SAS en ne faisant apparaître que quelques variables comme précédemment (sélection de variables avec la commande « var … ;»), mais aussi en classant les observations selon une variable de tri. Pour cela, on peut utiliser la commande « id » ou « by ». Les sorties (édition) diffèrent un peu : avec « id » les observations se suivent dans le listing classées selon la modalité de tri, avec « by » les observations sont présentées dans autant de listing séparés que de modalités de la variable de tri. Note: Il faut pour cela avoir trié la Table selon la(es) variable(s) de tri choisie(s). 38 Exemples : Avec « id ma_sexe ; » proc print data=TABLESAS.repondant2 ; var ident ma_sexe ma_act; id ma_sexe; run; à affichage ordonné selon la variable ma_sexe Avec « by … ; » proc print data=TABLESAS.repondant2 ; var ident ma_sexe ma_act; by ma_sexe; run; à tableaux séparés selon « sexe » (nécessité avant d’une PROC SORT) Ajouter un titre On peut ajouter un titre au listing généré avec l’instruction : = title «texte » ; Cette instruction pourra être utilisée dans d’autres procédures, la PROC FREQ notamment. proc print data=TABLESAS.repondant2 ; var ident ma_sexe ma_act; title « liste du contenu des variables sélectionnées »; run; 39 Synthèse de variables numériques Pour les variables numériques, on peut choisir de faire la somme des valeurs d’une variable spécifique qui apparaît dans la liste : sum var_num; Exemple : proc print data=TABLESAS.repondant2 ; var ident ma_sexe ma_act nbenftot; sum nbenftot; run; Ainsi, à la fin du listing apparait le total (somme) de la variable numérique sélectionnée pour l’ensemble des observations, ici le nombre total d’enfants pour tous les répondants apparaissant dans le listing. ………………………………………………….. 8. Opérateurs de conditions On peut choisir de n’éditer (ne faire apparaître) que les données (observations) répondant à certaines conditions (observations = ou ≠ à certaines valeurs). On procède alors à une sélection des observations en fonction de conditions définies à partir des valeurs de variables choisies. Ainsi, on peut n’éditer que les observations d’une sous-population. Par exemple : les femmes, on sélectionne alors toutes les observations qui répondent à la modalité « femme » pour la variable « sexe ». 40 2 syntaxes possibles : (where=(sexe = « F » and age = 20)) where sexe=« F » and age = 20; à à la suite de « PROC… » à sur une nouvelle ligne Exemple de la syntaxe 1: proc print data=Table (where=(sexe="F" and age = 20)); var var1 var2 var3 var4; run; Exemple de la syntaxe 2: proc print data=Table; var var1 var2 var3 var4; where (sexe ="F" and age = 20); à les () sont facultatives run ; Les minuscules et les majuscules sont importantes pour les valeurs des variables alphanumériques. Il faut donc bien les respecter. Opérateurs de conditions avec « WHERE » et « IF » Dans l’écriture des lignes de commande comprenant des conditions « WHERE », « IF », il existe une syntaxe permettant de préciser les termes des conditions choisies. Remarque : Pour l’écriture des conditions des variables alphanumériques (texte), il convient de mettre entre guillemets « » les valeurs des variables. Pour l’écriture des conditions des variables numériques, les valeurs ne sont pas encadrées de guillemets « ». Tableau des opérateurs : = NE ; ^= ; != égal (age = 30 ; age = « <30 ») différent (ville NE « Paris » ; ville NE 75) > ; >= ; < ; <= supérieur (ou égal) ; inférieur (ou égal) (age>=45) BETWEEN entre deux bornes numériques incluses (age BETWEEN 10 and 30) IN correspond aux valeurs (=) 41 (dept IN (« 22 » « 29 » « 35 ») (dept IN (« 22 » ; « 29 » ; « 35 ») (dept IN ( 22 29 35 ) à var. num. LIKE identifie, pour une variable donnée, toutes les observations ayant une modalité contenant certains critères (prenom LIKE ‘AN_E’ (ex: anne, ange) (prenom LIKE ‘AN%E’ (ex: anne, annie) (prenom LIKE ‘%AN%’ (ex: bertrand, ange) _ : remplace un caractère %: remplace plusieurs caractères =: identifie les modalités commençant par une chaîne de caractères (num_secu = : « 2 ») IS MISSING NOT identifie les valeurs manquantes (pcs IS MISSING) contraire de la condition définie (not (pcs IS MISSING) (pcs IS NOT MISSING) AND associe deux conditions (sexe = « F » AND age = age<20) OR une condition ou une autre (pcs = « 2 » OR pcs = « 4 ») Ces opérateurs s’utilisent tant dans les PROC que dans les étapes DATA. La syntaxe est spécifiée systématiquement. Certains s’utilisent seulement avec l’instruction where et non if. 42 III. Traitements des Tables SAS 1. L’étape DATA L’étape DATA est une étape fondamentale puisqu’elle permet de modifier le contenu des Tables SAS (structure, contenu, format…). Contrairement aux procédures PROC, l’étape DATA ne génère pas de résultats mais modifie le contenu ou la forme des Tables SAS. Au sein d’étapes DATA, on peut : - créer de nouvelles Tables SAS, - modifier des données (leur contenu ou leur format), - supprimer, ajouter des observations ou des variables, - recoder, renommer des variables, - jonction, fusion de Tables SAS. Une étape DATA débute et se termine par les instructions : data …; run ; L’instruction DATA doit automatiquement être suivie d’un nom de Table car l’étape DATA génère une Table de sortie. data TABLESAS.Table1; à Table d’écriture, Table de sortie, Nouvelle Table run; Dans le cas présent, la Table créée est vide (aucun intérêt). Remarque : Si vous utilisez le nom d’une Table existante, la précédente sera écrasée. 2. Création d’une Table SAS Création d’une Table à partir d’une autre Table C’est l’opération la plus fréquente. On réalise une étape DATA pour créer une nouvelle Table (écriture ou sortie) à partir d’une Table déjà existante (lecture ou entrée). On créé donc la nouvelle Table, avec l’instruction « data… ; » et on nomme la Table existante à partir de laquelle la nouvelle Table sera créée, avec l’instruction « set… ; ». 43 On peut alors créer une nouvelle Table permanente en spécifiant la bibliothèque dans laquelle la Table sera créée, ou une Table temporaire qui sera créée par défaut dans la bibliothèque temporaire WORK. Création d’une Table permanente : data TABLESAS.Table2; set TABLESAS.repondant2; run; à création d’une Table permanente à à partir d’une Table permanente Création d’une Table temporaire: data Table2; set TABLESAS.repondant2; run; à création d’une Table temporaire à à partir d’une Table permanente 3. Extraction d’une Table SAS : KEEP – DROP – WHERE – IF La création d’une nouvelle Table SAS à partir d’une Table existante s’appelle une extraction. On peut : - ne sélectionner que quelques variables pour travailler sur l’ensemble des observations, - ne sélectionner qu’une sous-population et alors ne travailler que sur quelques observations de la Table, - coupler les deux conditions pour ne travailler que sur quelques variables d’une partie des observations. Sélection de variables : KEEP – DROP On souhaite créer une nouvelle Table avec seulement quelques variables de la Table existante. On utilise les instructions KEEP (garder) / DROP (supprimer) avec le nom des variables data TABLESAS.Table2; set TABLESAS.repondant2; keep ident ma_sexe; run ; data TABLESAS.Table2; set TABLESAS.repondant2; drop dep rg; run 44 à garde ces variables à supprime ces variables Autres syntaxes possibles D’autres syntaxes peuvent être utilisées. Sélection en lecture : data TABLESAS.Table2; set TABLESAS.repondant2 (keep=ident ma_sexe); run ; Sélection en écriture : data TABLESAS.Table2 (keep=ident ma_sexe); set TABLESAS.repondant2; run ; NB: La sélection en lecture représente moins de travail pour le logiciel. Options pour les instructions KEEP / DROP Il existe des options aux instructions KEEP et DROP qui permettent de ne pas avoir à écrire l’ensemble des noms de variables, surtout lorsque celles-ci ont des caractéristiques communes (nom, type/format…). On peut identifier un ensemble de variables à conserver ou à supprimer grâce à ces options. KEEP var1 - - var10 ; à garde les variables entre var1 et var10 (en fonction de leur ordre – tri dans la Table) KEEP var1 - var10 ; à garde les variables dont les noms sont entre var1 et var10 (numérotation) KEEP var : ; à garde toutes les variables dont les noms commencent par var DROP _ALL_ ; à supprime toutes les variables de la Table DROP _NUMERIC_ ; à supprime toutes les variables numériques DROP _CHARACTER_ ; à supprime toutes les variables alphanumériques Sélection des observations (filtre) : WHERE – IF On souhaite créer une nouvelle Table à partir d’une Table existante avec seulement les observations qui répondent à certaines conditions (sélection d’une souspopulation). On utilise l’instruction WHERE (où, quand). 45 2 syntaxes : è Filtre dans la Table d’écriture data TABLESAS.Table2; set TABLESAS.repondant2; where ma_sexe="1" and ma_ager=20; run ; è Filtre dans la Table de lecture data TABLESAS.Table2; set TABLESAS.repondant2 (where=(ma_sexe="1" and ma_ager=20)); run ; On peut placer l’instruction « where… » lors de la création de la nouvelle Table dans l’étape DATA proprement dite (1er cas). Le filtre opère une fois les données lues. Si l’instruction « where… » est placée lors de la lecture de la Table initiale (2e cas), le filtre opère en amont, avant l’importation des données. 4. Suppression d’observations: IF… THEN DELETE On peut modifier le contenu d’une nouvelle Table SAS au cours de l’étape DATA de sa création en supprimant des observations pour ne retenir qu’une partie d’entre elles. On peut aussi souhaitez simplement à partir d’une Table ne conserver que certaines observations. Cette opération nécessite de passer par une étape DATA dans laquelle une Table est générée. Rappel : Si la nouvelle Table créée porte le même nom que celle à partir de laquelle est réalisée l’extraction, alors la version antérieure sera « écrasée ». L’instruction IF… THEN DELETE On utilise dans l’étape DATA l’instruction « IF… THEN DELETE » pour supprimer les observations qui répondent aux critères mentionnés. Exemple 1: On supprime les observations lorsque des variables ne sont pas codées (missing value = « . » (num); « espace » (alphanum.), Table3 = temporaire) Data Table3; set TABLESAS.base_etudiants2; if age=. or niv_dip="" or ufr="" then delete; run ; 46 Table base_etudiants2 : Table Table3 : (vérifications faites avec une PROC PRINT) Exemple 2: On supprime toutes les observations qui correspondent à des répondants « femmes » (variable sexe codée 2, Table4 = temporaire). Data Table4; set TABLESAS.base_etudiants2; if sexe=2 then delete; run ; 47 5. Renommer et libeller les variables : RENAME – LABEL Comme précédemment pour l’extraction d’observations, pour renommer ou libeller les variables d’une Table SAS, il est nécessaire de passer par une étape DATA. Renommer – Modifier le nom des variables : RENAME On souhaite renommer les variables d’une Table (changer le nom des variables). On utilise l’instruction RENAME rename ancien_nom_var=nouveau_nom_var ; Exemple 1: (table5 = temporaire) data Table5; set TABLESAS.repondant2; rename ma_sexe=sexe ma_ager=age; run ; L’instruction RENAME peut être combinée à d’autres instructions de l’étape DATA, comme la sélection de variables et d’observations. Exemple 2: (table6 = temporaire) data Table6; set TABLESAS.repondant2 (where=(ma_sexe="1")); keep ident ma_sexe ma_ager; rename ma_sexe=sexe ma_ager=age; run ; Libeller – attribuer une étiquette : LABEL Au sein des Tables SAS, les variables sont représentées par leurs noms (des abréviations, un code ou un numéro de question…). On peut choisir d’attacher un libellé, une étiquette à chacune (ou à certaines) des variables afin que lors de la réalisation d’un listing ou d’un tableau de distribution, un intitulé intelligible apparaisse à la place du nom de la variable. Créer un libellé ne modifie pas le nom de la variable. Celui-ci reste le même dans la Table SAS. On utilise l’instruction : ou LABEL nom_var= libellé ; ATTRIB nom_var LABEL=« libellé »; Attention : Pour cette seconde écriture les « » qui encadrent le nouveau libellé sont nécessaires. 48 Exemple syntaxe 1 : data Table7; set TABLESAS.repondant2; label ma_sexe= SEXE DU REPONDANT ma_ager=AGE DU REPONDANT; run ; Exemple syntaxe 2 : data Table8; set TABLESAS.repondant2; attrib ma_sexe label="SEXE DU REPONDANT" ma_ager label="AGE DU REPONDANT"; run ; Renommer et libeller conjointement les variables On peut souhaiter renommer des variables et en même temps leur affecter des étiquettes. Attention : Lorsqu’on souhaite attribuer un nouveau libellé à une variable que l’on renomme dans la même étape data, il est nécessaire de conserver l’ancien nom de variable de la variable. Exemple : data Table9; set TABLESAS.repondant2; rename ma_sexe=SEXE; label ma_sexe=SEXE DU REPONDANT; à ma_sexe = ancien nom run ; On peut bien sûr renommer et libeller plusieurs variables dans la même étape data. Une autre solution consiste à procéder en deux étapes data, mais cette option n’est pas recommandée. Exemple en deux étapes DATA : Etape1 : renommer la variable Etape 2 : attribution du label data Table9; set TABLESAS.repondant2; rename ma_sexe=SEXE; run ; data Table9; set Table9; label SEXE=SEXE REPONDANT; run ; à on renomme la variable. à utilisation du nouveau nom de la variable. 49 On remarque que lors de la seconde étape, le nom de Table en lecture (Table initiale) et celui de la Table en écriture (nouvelle Table) sont les mêmes. La nouvelle Table générée « écrasera » donc la précédente. Utilisation de l’instruction LABEL L’instruction LABEL est ensuite utilisée dans certaines procédures pour faire apparaître les libellés des variables. On peut l’utiliser dans la procédure PROC PRINT. Exemple : proc print data=tablesas.repondant2 (obs=5) label; var ident ma_sexe ma_ager; run; Exemple avec l’instruction Label : Exemple sans l’instruction Label : 50 6. Création de variables On peut souhaiter créer une ou plusieurs variables dans une Table SAS. Cette opération se réalise une fois de plus dans une étape DATA. On nomme ainsi la nouvelle variable créée en lui attribuant les modalités désirées. On peut aussi dans cette même étape data lui donner un libellé (label…). Exemple « simpliste »: data Table10; set tablesas.repondant2; NEW_VAR=.; label new_var=NOUVELLE VARIABLE; run; Dans la Table temporaire Table10, on crée la variable new_var. Cette opération n’a aucun intérêt puisqu’elle génère une nouvelle variable numérique dont toutes les modalités ont été codées « . » (missing: données manquantes) pour l’ensemble des observations de la table. Remarque : En attribuant la valeur « . » à la variable new_var créée, cette variable est automatiquement générée comme étant une variable numérique. Si lors de la création de la variable, la modalité attribuée avait été « » (sans aucun caractère, ou avec un espace entre les « »), la variable aurait été générée comme une variable alphanumérique (texte). Création de variables sous conditions : If … then / Else if / Else En général, on crée une nouvelle variable selon certaines conditions en attribuant les modalités voulues pour les observations répondant à ces conditions. Pour définir ces conditions, on utilise les instructions : if … then / else if / else On associe ces instructions aux opérateurs WHERE / IF. NB: l’instruction else signifie “dans tous les autres cas”, autres que ceux énoncés précédemment. 51 Exemple 1 : Si la variable ne comprend que deux modalités (homme / femme), on crée la variable SEXE_REP à partir de la variable ma_sexe (codée: 1 ou 2). En indiquant entre « » les modalités de la nouvelle variable sexe_rep, on suggère qu’elle sera automatiquement créée comme une variable alphanumérique. data table11; set tablesas.repondant2; if ma_sexe=1 then sexe_rep="h"; else sexe_rep="f"; label ma_sexe=SEXE DU REPONDANT; run; Exemple 2 : Si la variable initiale peut avoir plusieurs modalités de réponse, on peut générer la nouvelle variable alphanumérique sexe_conj en attribuant une modalité « h » lorsque la variable numérique initiale ca_sexec est codée 1, une modalité « f » lorsque la variable ca_sexec est codée 2, et une autre modalité « n » (non renseigné) pour toutes les autres observations pour lesquelles la variable ca_sexec est codée par autre chose que 1 ou 2 (notamment par un point, comme valeur manquante). data table11; set tablesas.repondant2; if ca_sexec =1 then SEXE_CONJ="h"; else if ca_sexec =2 then SEXE_CONJ="f"; else SEXE_CONJ="n"; label sexe_conj=SEXE DU CONJOINT COHABITANT; run; Dans cet exemple, pour les répondants qui n’auront pas de conjoint cohabitant ou pour ceux dont on ne connait pas le sexe du conjoint cohabitant, la nouvelle variable sexe_conj sera codée « n » (non renseigné). Autres exemples: Les lignes de programme qui suivent ne représentent qu’un même bloc d’une étape data. On peut ainsi générer et libeller plusieurs variables en une seule étape data. data table12; set tablesas.repondant2; if ma_sexe=2 and 14<ma_ager<=49 then FEM_AG_PROC=1; else fem_ag_proc=0; label fem_ag_proc=FEMMES EN AGE DE PROCREER; if ma_sexe ne 2 then homme="oui"; else homme="non"; label homme=repondant homme; if ma_sexe=1 and ma_ager<20 then AGE_HOM="hom–40"; else if ma_sexe=1 and ma_ager>=20 then AGE_HOM="hom40+"; else AGE_HOM="fem"; label AGE_HOM=CLASSE AGE HOMMES; run; 52 Création de variables par une opération On peut créer une nouvelle variable numérique à partir d’une opération faisant intervenir d’autres variables numériques existantes. Cette création s’effectue dans une étape data. Pour illustrer la création de telles variables numériques, nous nous appuierons sur les variables de revenus de l’enquête ERFI (variables : aj_mreve_1…, rj_mreve_1…). Attention : Pour la création de variables numériques à partir d’une opération, il faut avant tout vérifier que les variables initiales utilisées pour les calculs sont bien de type « numérique ». De même, il est important d’avoir connaissance du contenu des valeurs des variables utilisées. Par exemple, dans l’enquête ERFi les variables de revenus aj_mreve_1… et rj_mreve_1… sont pour certaines observations codées 999999 ou 9999999, ou sont parfois manquantes, codées par un point. Dans les deux premiers cas, il se peut que le répondant n’ait pas souhaité répondre à la question (refus) ou qu’il n’ait pas connaissance de la somme. La variable peut alors avoir été codée avec une série de 9 (pas de réponse à la question). De même, la question peut ne pas avoir été posée à certains répondants parce qu’ils ont déclaré avant de pas avoir de revenu. Dans ce cas, la variable peut avoir été codée par un point, signifiant ainsi « donnée manquante ». Si une telle vérification n’est pas réalisée en amont, alors la nouvelle variable créée sera erronée. Exemple 1: Variable numérique « Somme » Dans l’exemple qui suit une variable représentant le total des revenus déclarés est construite à partir des quatre variables de revenus présentent dans l’enquête. L’enquêté pouvait en effet déclarer jusqu’à quatre revenus différents (aj_mreve_1 à aj_mreve_4). Étape 1 : création de variables intégralement codées en numérique La première étape consiste à mettre « au bon format » les modalités de réponse de l’ensemble des observations et ainsi recoder les variables pour les observations où des non-réponses, des refus ou des données manquantes seraient observées. Pour cela, le plus simple revient à générer de nouvelles variables (rev1 à rev4), corrigeant les variables de revenus initiales aj_mreve_1 à aj_mreve_2. Dans cet exemple, nous avons choisi de coder les non-réponses, les refus et les données manquantes par la valeur 0 (aucun revenu). Un tel choix doit être justifié car il peut avoir ensuite une incidence forte sur l’analyse future des résultats. 53 Étape 2 : création d’une variable par addition Une fois les quatre variables de revenus créées (rev1 à rev4), la deuxième étape consiste à créer une nouvelle variable « tot_rev » qui représente la somme des valeurs des quatre précédentes variables. Ces deux étapes peuvent être rassemblées en une même étape data comme suit : data table13; set tablesas.repondant2; if aj_mreve_1>=999999 or aj_mreve_1=. then rev1=0; else rev1=aj_mreve_1; if aj_mreve_2>=999999 or aj_mreve_2=. then rev2=0; else rev2=aj_mreve_2; if aj_mreve_3>=999999 or aj_mreve_3=. then rev3=0; else rev3=aj_mreve_3; if aj_mreve_4>=999999 or aj_mreve_4=. then rev4=0; else rev4=aj_mreve_4; TOT_REV=rev1+rev2+rev3+rev4; label TOT_REV=SOMME DES REVENUS DU REPONDANT; run; Pour vérifier la création des variables générées, il faut regarder le contenu du journal car aucune sortie SAS n’est proposée. On peut aussi réaliser une PROC PRINT. Exemple 2: Variable numérique « Rapport » Dans l’exemple qui suit, une variable représentant la proportion (rapport) du nombre des enfants actuellement vivants du répondant par rapport au nombre total d’enfants eu par le répondant est créée. Une nouvelle fois, il convient avant tout de vérifier la construction et codification des deux variables initiales (nbenfvie et nbenftot). data table14; set tablesas.repondant2; rap_enf_vie=nbenfvie/nbenftot; run; Ce rapport est exprimé en unité. Il est possible de construire cette même variable en l’exprimant en pourcentage. Pour cela, il convient d’ajouter *100. data table14; set tablesas.repondant2; rap_enf_vie=nbenfvie/nbenftot*100; run; 54 Création de variables dichotomiques L’action de dichotomiser s’applique seulement aux variables qualitatives. Par convention, la variable créée sera codée automatiquement 1 lorsque les observations rempliront la condition définie (une modalité de la variable adoptée). Pour les autres observations, la variable sera codée 0 par défaut. Cette opération est très utile dans l’utilisation des modèles de régression. Exemple : data table15; set tablesas.repondant2; homme=(ma_sexe=1); femme=(ma_sexe=2); run; Dans ce cas, l’étape DATA permet de créer simultanément deux variables : à la variable: homme = 1 lorsque sexe =1 (sinon homme = 0). à la variable: femme = 1 lorsque sexe =2 (sinon femme = 0). 7. PROC FORMAT – Format de variables Avec SAS, on peut créer des formats de variables que l’on peut appliquer sur des Tables. Les formats SAS sont indépendants des Tables SAS mais peuvent être mobilisés pour l’exploitation des Tables. Un même format SAS peut être utilisé pour deux Tables SAS différentes lorsque les variables des Tables sont codées selon des modalités similaires. Si une enquête a permis de créer une base de données dans laquelle la caractéristique sociodémographique du sexe de l’enquêté est codée 1 (homme) et 2 (femme) et dans une autre enquête la caractéristique d’une variable « sexe du chef d’entreprise » est codée de la même manière, 1 (homme) et 2 (femme), alors le même format (« Sexe ») pourra être utilisé dans l’exploitation des deux Tables SAS. Ainsi par exemple, lors de la présentation de tableaux de données, si on choisit d’appliquer le format « Sexe » aux traitements des deux variables citées plus haut, alors dans les tableaux apparaitront les mêmes intitulés « homme » et « femme », plutôt que « 1 » et « 2 ». Créer un format pour les modalités des variables On peut créer un intitulé pour une modalité (1 = homme) ou un même intitulé pour plusieurs modalités alphanumériques (cadre, employé… = actif / au foyer, étudiant…= inactif) ou numériques (0, 1, 2, 3…= « moins de 5 ans » ; 5, 6, 7… = « de 5 à 9 ans » …). 55 Attention : Une variable peut être codée par un chiffre (1 ; 2) mais correspondre à une variable de type numérique. Il est alors nécessaire de créer un format pour une variable de type alphanumérique (ex : ma_sexe). Démarche : Pour créer ces formats, on utilise la procédure PROC FORMAT … et l’instruction VALUE. Cette instruction est suivie directement du nom du format si le format créé s’applique à une/des variable(s) numérique(s) (les modalités codées numériquement). L’instruction VALUE est suivi d’un dollar ($), si le format s’applique à une/des variable(s) alphanumérique(s) (les modalités codées en texte). Dans les deux cas, l’intitulé suit la modalité de la variable avec un = suivi entre guillemets « » du contenu de l’intitulé. Plusieurs formats peuvent être créés dans une même procédure PROC FORMAT. Cependant, la définition de chaque format débute par « VALUE » et se termine par un point virgule « ; ». Exemple : proc format ; value nb_enf low-<1="aucun enfant" 1="1 enfant" 2="2 enfants" 3-high="3 enfants et +"; value $sexe "1"="homme" "2"="femme" ; value $region "11"="région parisienne" other="autres régions" ; run ; à variable numérique à variable alphanumérique à variable alphanumérique Options Il existe des options à utiliser dans les PROC FORMAT pour simplifier la définition du champ des modalités : modalités comprises entre X et Y, modalités commençant par « X »… 56 à Variables numériques proc format ; value nom_var mod1 =« catégorie1 » mod2, mod3, mod4 =« catégorie2 » mod5-mod10 = « catégorie3 » ; run; à 1 modalité à plusieurs modalités à intervalle de modalités (bornes incluses) à Variables alphanumériques proc format ; value $nom_var « mod1 » =« catégorie1 » « mod2 », « mod3 » =« catégorie2 » ; run; à 1 modalité à plusieurs modalités Opérateurs : Certains opérateurs peuvent être utilisés dans la définition du champ des modalités (LOW, HIGH, OTHER). low : la plus petite valeur (ou manquantes) high : la plus grande valeur other : autres valeurs (num. et alpha.) - : entre deux bornes incluses < : exclut la borne (inf. ou sup.) Formats temporaires Par défaut, les formats sont enregistrés dans un fichier formats.sas7bcat de la bibliothèque temporaire WORK. Ils sont effacés à la fin de la session. Les formats peuvent être visualisés à partir de l’explorateur SAS dans le répertoire Bibliothèque (SAS) au sein de la bibliothèque où ils sont créés, ici WORK / Formats. 57 Exemple : Remarque : Si les formats sont créés temporairement par des lignes de commande dans un programme, il est nécessaire de relancer à chaque fois ces mêmes lignes de commande de PROC FORMAT lors d’une nouvelle session pour que les formats souhaités puissent être à nouveau créés et utilisés. On voit tout l’intérêt de l’écriture de lignes de commande au sein d’un programme enregistré, dont certaines lignes de commande peuvent être relancées indépendamment du reste du programme lors d’une nouvelle session SAS. Utilisation des Formats temporaires Lors de l’utilisation des formats dans des procédures (PROC PRINT ou PROC FREQ), il faut ajouter : format nom_var nom_format. ; Attention : Le nom de format est suivi d’un point. C’est ainsi que SAS reconnait qu’il s’agit du nom d’un format. Pour les variables et les formats alphanumériques, il convient de ne pas oublier le $ au début du nom du format. Exemple : proc print data=TABLESAS.repondant2; var ident ma_sexe nbenftot RG; format ma_sexe $sexe. nbenftot nb_enf. RG $region.; run; 58 NB : On peut appliquer un même format à plusieurs variables dans une procédure. Exemple : proc print data=TABLESAS.repondant2; var ident ma_sexe ca_sexec cb_sexec; format ma_sexe ca_sexec cb_sexec sexe.; run; Formats permanents Les formats peuvent être créés de manière permanente. Ils seront alors enregistrés pour les réutiliser dans une autre session ou pour être copiés. Lors de l’écriture de la PROC FORMAT, il convient d’ajouter l’option : LIBRARY=nom_libname Exemple pour la bibliothèque TABLESAS : proc format library=TABLESAS; (ou) proc format library=TABLESAS.formats; Dans l’explorateur SAS, les formats permanents apparaitront dans la Bibliothèque qui aura été identifiée lors de leur création. proc format library=tablesas; value $sexe "1"="homme" "2"="femme" ; run ; 59 Exemple pour la bibliothèque TABLESAS : Utilisation des Formats permanents Si on a choisi de sauvegarder les formats dans une bibliothèque, lors de l’utilisation des formats dans des procédures (PROC PRINT ou PROC FREQ), il faut préciser la bibliothèque au sein de laquelle SAS doit chercher les formats car par défaut il va les chercher dans WORK. Avant l’écriture de la procédure, il faut ajouter l’option : options FMTSEARCH=(libname.formats) : Exemple : options fmtsearch=(TABLESAS.formats) ; proc print data=TABLESAS.repondant2; var ident ma_sexe ca_sexec cb_sexec; format ma_sexe ca_sexec cb_sexec $sexe.; run; NB : Une fois que la commande fmtsearch a été exécutée, il n’y a pas besoin de la relancer lors de la session à moins d’avoir créé un nouveau format. 60 8. Supports de variables Il existe deux types de supports de variables dans SAS: – les supports caractères – les supports numériques Remarque: une variable quantitative n’est pas forcément stockée dans un support numérique, ni une variable qualitative dans un support caractère. Voici des exemples tirés du dictionnaire des codes de l’enquête ERFI : - Une variable quantitative codée par des nombres dans un support (ou format) numérique. - Une variable qualitative codée par des nombres dans un support (ou format) caractère - Une variable qualitative codée par du texte dans un support (ou format) caractère Les enquêtes de l’INSEE n’ont pas l’habitude de coder les modalités de variables avec du texte, aucune variable de ce type ne figure dans l’enquête ERFI. Toutefois, avec les instructions suivantes, on crée ce type de variable : data table16; set tablesas.repondant2; if ca_sexec =1 then SEXE_CONJ="h"; else if ca_sexec =2 then SEXE_CONJ="f"; else SEXE_CONJ="n"; label sexe_conj=SEXE DU CONJOINT COHABITANT; run; 61 Finalement, pour connaître le type de support, il est nécessaire d’explorer la Table SAS et chacune des variables. Le support ne détermine pas le type de la variable. Définir la longueur des supports Les supports (ou format) sont indispensables pour créer de nouvelles variables. Leur longueur est définie par l’option lenght : Lorsque l’on crée une variable, et donc un support, il peut être judicieux de spécifier la longueur du support par l’instruction lenght. Length Nom_variable_caractere $8. ; Lenght Nom_variable_numérique 8. ; Le $ indique que la variable est de type caractère, son absence que la variable est numérique. Le nombre définit la longueur du support de la variable. Par défaut, un support numérique comporte 8 cases. Lorsqu’une variable est créée dans un support caractère, la longueur de celui-ci est définie, par défaut, par le nombre de case du premier support créé lors de la lecture de la table. Si le nombre de caractère varie d’une modalité à l’autre, certaines risquent alors d’être tronquées et induire des erreurs. Exemple : data table17; set tablesas.repondant2; Length aget5 $2.; if ma_ager<25 then aget5="1"; if 25<=ma_ager<30 then aget5="2"; if 30<=ma_ager<35 then aget5="3"; if 35<=ma_ager<40 then aget5="4"; if 40<=ma_ager<45 then aget5="5"; if 45<=ma_ager<50 then aget5="6"; if 50<=ma_ager<55 then aget5="7"; if 55<=ma_ager<60 then aget5="8"; if 60<=ma_ager<65 then aget5="9"; if 65<=ma_ager<70 then aget5="10"; if 70<=ma_ager<75 then aget5="11"; if 75<=ma_ager<80 then aget5="12"; if ma_ager>=80 then aget5="13"; run; Modifier les supports de variables Une variable est définie dès le départ avec un certain support : caractère ou numérique. Bien que cet attribut ne soit pas destiné à être modifié, si l’on souhaite le faire, il faut créer une nouvelle variable. 62 Transformation de caractère à numérique Supposons que la table d’entrée (repondant2) contienne une variable ma_sexe, de support caractère et de longueur de stockage 2. On souhaite transformer cette variable en une variable numérique de longueur de stockage 1. On écrit le programme suivant : data table18; set tablesas.repondant2; format NEW_SEXE 1.; NEW_SEXE = input (ma_sexe,1.); label new_sexe=NLE VAR SEXE; run; à étape 1 à étape 2 Étape 1 : Avant de créer la variable NEW_SEXE, on définit son support : une variable numérique de longueur 1. Étape 2 : Les valeurs prises par NEW_SEXE résultent de la conversion en numérique (et de longueur 1) de la variable MA_SEXE. Pour les variables numériques, la longueur par défaut reste de 8. Transformation de numérique à caractère De manière symétrique, la fonction put (varnum,format_caractère) permet de convertir des données numériques en caractères. data table19; set tablesas.repondant2; format NEW_IDENT $5.; NEW_IDENT = put (ident,$5.); label new_ident=NLE VAR IDENT; run; à étape 1 à étape 2 Étape 1 : Avant de créer la variable NEW_IDENT, on définit son support : une variable alphanumérique de longueur 5. Étape 2 : Les valeurs prises par NEW_IDENT résultent de la conversion en alphanumérique (et de longueur 5) de la variable IDENT. 63 IV. Appariement de Tables SAS Avec SAS, il est possible de joindre des Tables les unes aux autres. On peut ainsi ajouter soit des observations, soit des variables à une Table existante, fusionner ou empiler deux ou plusieurs Tables SAS pour n’en faire qu’une. On parle d’appariement ou de concaténation de Tables SAS. Lorsque l’on ajoute des variables et que les observations sont les mêmes, on parle de fusion de Tables. A l’inverse, lorsque l’on ajoute des observations et que les variables sont identiques, on empile les tables. 1. Fusion de Tables : MERGE – ajout de variables Ajout de variables L’appariement de Tables SAS se déroule dans une étape DATA. Démarche : On créé une nouvelle Table qui joint les deux précédentes Tables dans lesquelles figurent les mêmes numéros d’observations (individus) mais des variables différentes. Variable d’identification : Une seule variable est identique aux deux Tables, la variable d’identification des observations (individus) qui sera utilisée pour joindre les Tables. Elle permet de distinguer les observations les unes des autres (comme un numéro de questionnaire dans une enquête). Objectif : On constitue une nouvelle Table comprenant les variables des deux précédentes Tables en agrégeant à chaque identifiant (observation) les variables des deux Tables. L’identifiant constitue alors la clé d’appariement. Les instructions MERGE / BY 64 Pour joindre les Tables selon l’identifiant, il faut qu’elles soient triées selon la(es) variable(s) d’identification des observations (PROC SORT… BY ident ;) Puis, l’appariement se fait dans une étape DATA comprenant les instructions MERGE et BY (BY précise la variable d’identification, ici ident). 1. Tri des Tables proc sort data=TABLESAS.base_etudiants1 ; by ident; run; proc sort data=TABLESAS.base_etudiants4 ; by ident; run; 2. Appariement des Tables data base_etudiants14 ; merge TABLESAS.base_etudiants1 TABLESAS.base_etudiants4 ; by ident ; run ; 3. Edition de la nouvelle Table (voir sortie de l’édition plus loin) proc print data=base_etudiants14; run; Synthèse de la fusion des Tables Fusion des Tables : base_etudiants1 base_etudiants4 en 1 base : base_etudiants14 Remarques : 1. Si certaines modalités de la variable identifiant se répètent dans les deux tables, SAS ne pourra fusionner correctement les observations (mélange d’observations). 2. Si certaines variables, autres que la clé d’appariement, se répètent dans les tables que l’on souhaite fusionner, les valeurs de la table de sortie seront celles de la dernière table de la liste suivant l’instruction merge. 2. Empilement de Tables : MERGE – ajout d’observations Ajout d’observations On peut aussi joindre les observations de deux Tables identiques (mêmes variables). On ajoute ainsi des observations d’une autre Table à la Table initiale. Cette opération s’apparente à rajouter des questionnaires passés ultérieurement dans une enquête. On empile alors deux tables l’une sur l’autre. Cette procédure se déroule toujours dans une étape DATA. 65 Démarche : On crée une nouvelle Table en joignant ensemble deux Tables ou plus. Dans ces Tables figurent des numéros d’observations différents (individus) mais les mêmes variables. Cela suppose une même structure pour les Tables fusionnées. Comme précédemment, les Tables doivent au préalable avoir été triées en fonction de la variable d’identification. Tri des Tables proc sort data=TABLESAS.base_etudiants1 ; by ident; run; proc sort data=TABLESAS.base_etudiants3 ; by ident; run; Deux méthodes 1. Avec l’instruction merge Variable d’identification : La variable d’identifiant demeure la variable de référence pour l’empilement. Les observations – ident – s’ajoutent les unes aux autres. Objectif : Pour joindre les Tables, on constitue dans une étape DATA une nouvelle Table comprenant les observations des Tables empilées. Empilement des Tables avec les instructions MERGE / BY Comme pour l’ajout de variables, l’appariement de Tables par ajout d’observations s’effectue à partir des instructions MERGE et BY. data base_etudiants13 ; merge TABLESAS.base_etudiants1 TABLESAS.base_etudiants3 ; by ident ; run ; 2. Avec l’instruction set Les observations de la Tables base_etudiants3 se placent sous celles de la Table base_etudiants1 pour constituer la nouvelle Table base_etudiants13. data base_etudiants13 ; set TABLESAS.base_etudiants1 TABLESAS.base_etudiants3 ; run ; 66 Remarque: Si une variable n’existe que dans la table TABLESAS.base_etudiants3, alors elle apparaitra dans la table finale mais sera composée de valeurs manquantes pour les observations de la TABLES.base_etudiants3. Edition de la nouvelle Table (voir sortie de l’édition plus loin) proc print data=base_etudiants13; run; Synthèse de l’empilement des Tables Fusion des Tables : base_etudiants1 base_etudiants3 en 1 base : base_etudiants13 Selon l’identifiant : ident 3. Variable origine des Tables Création de variables d’origine de TABLES Lorsqu’on fusionne ou empile deux Tables, il est utile de vérifier dans la nouvelle Table si les données ont été appariées correctement en regardant de quelle Table proviennent les observations. Pour cela, on peut créer une variable identifiant l’origine des observations. On ajoute dans la ligne de commande MERGE pour chaque Table l’instruction (in=a) ou (in=b)… et on crée ensuite une variable pour chaque Table (Table1 ; Table2) qui aura la modalité (a ; b) définie dans l’instruction MERGE. 1. Lors de l’ajout de variables data base_etudiants14 ; merge TABLESAS.base_etudiants1 (in=a) TABLESAS.base_etudiants4 (in=b); by ident; tab1=a; tab4=b; run; 67 Exemple de sorties : (PROC PRINT) Tableau 1 : Lors de l’ajout de variables 2. Lors d’ajout d’observations data base_etudiants13 ; merge TABLESAS.base_etudiants1 (in=a) TABLESAS.base_etudiants3 (in=b); by ident; tab1=a; tab3=b; Lecture : Pour chaque observation, on connait la provenance des informations : - Tableau 1 : depuis les deux tables simultanément si tab1=1 et tab2=1 (pour les 10 observations) - Tableau 2 : uniquement depuis la table1 si tab1=1 et tab3=0 (pour les 10 premières observations) 68 Exemple de sorties : (PROC PRINT) Tableau 2 : Lors de l’ajout d’observations Remarque : Les Tables fusionnées n’ont pas toujours exactement la même structure (variables manquantes). Dans ce cas, après la fusion, les données manquantes sont représentées par des points ou des espaces laissés vides, si les variables sont respectivement numériques ou alphanumériques. 69