1 Université Pierre et Marie Curie, Paris 6 Master 2 de Statistique Année 2014-2015 T.P. 2 Gestion des tables SAS 1 Librairies et tables SAS SAS eectue des calculs uniquement sur des chiers de données de type SAS. Ces - chiers spéciques, appelés Tables SAS, peuvent être visualisés uniquement à partir d'un programme SAS ou en utilisant SAS Explorer. Il existe un très large éventail de fonctions pour traiter les tables SAS. L'objectif de ce TP est d'apprendre à manipuler les exemples les plus standards. Les traitements des tables SAS sont en particulier pris en compte lors des étapes DATA ou en options des procédures. SAS utilise son propre système de gestion de données. Toute table SAS a un nom de la forme libref.tab où libref est le nom d'une librairie SAS (chaîne de moins de 8 caractères) qui correspond à un répertoire sur votre ordinateur (e.g. C:\votrelogin\SAS\tablesas). Le chier Unix qui correspond à la table SAS tab se nomme tab.sas7bdat, et se trouve dans le répertoire associé à libref. Tout chier de données SAS est donc automatiquement stocké sous forme d'un chier Unix, et il n'est donc pas besoin de le sauvegarder. Il existe deux bibliothèques prédénies work (temporaire) et sasuser (permanente). Lors d'une étape data, une table SAS est stockée par défaut dans work si l'on ne précise pas la libraire de référence libref (cf. le programme tp1.sas). La libraire work est temporaire ce qui signie que les tables SAS stockées dans work sont eacées à la n d'une session SAS, à l'inverse de sasuser. Il est possible de créer sa propre bibliothèque à l'aide de la commande : libname malib `repertoire'; où malib peut être n'importe quelle chaîne de moins de 8 caractères et où `repertoire' désigne le chemin d'un répertoire sur votre compte. Par convention les commandes (ou mots-clés) SAS seront notées en gras. Q. 1 Modier le programme tp1.sas pour créer une table tailpoid dans un de vos répertoires. Vérier que tout s'est bien passé dans LOG et qu'un nouveau chier.sas7bdat a bien été créé sur votre compte Unix. A l'aide de SAS Explorer, visualiser la table, la modier, la sauvegarder sous un autre nom. 2 Création de chiers de données SAS 2.1 Données incluses dans un programme SAS Lors du TP1, nous avons vu que l'instruction cards permet la saisie de données directement dans le programme SAS. La syntaxe (simpliée) d'une étape DATA utilisant cards est la suivante :
2 data libref.tab; input var1 type1 var2 type2... varn typen; instructions supplémentaires; cards ; données ; o var1, var2... sont les noms des variables de la table tab et type1, type2... sont les types de chaque variable : $ : variable de type texte (moins de 8 caractères) $n. : variable de type texte (au plus n caractères) date9. : variable de type date au format 15SEP2004 si on ne spécie pas type, alors la variable est de type numérique.... il en existe d'autres bien sûr Pour visualiser le contenu d'une table dans la fenêtre Output, on peut utiliser les instructions suivantes : proc print data=libref.tab; Q. 2 Ajouter deux variables de type texte nom et dat_entr dans la table tailpoid. Acher la table dans la fenêtre Output. Que remarquez vous? Utiliser l'instruction format dat_entr date9.; à la suite de input pour y remédier. Les individus restent 300 jours. Créer une variable dat_sort qui contient la date de sortie des individus sachant que les variables de type date sont codées sous forme de nombre. Visualiser la table dans la fenêtre Output. 2.2 Importation de chiers texte (ASCII) Il peut être fastidieux de rentrer toutes les observations d'une variable dans un programme SAS. Si l'on dispose de données correctement organisées dans un chier texte, il est possible de les importer dans une table SAS à l'aide des instructions suivantes (lorsque chaque observation est décrite par une ligne du chier) : data libref.tab; inle 'nom_fichier'; input var1 type1 var2 type2... varn typen; instructions supplémentaires; o nom_fichier est le nom d'un chier texte Unix. Dans ce TP, on propose d'étudier le chier ~jbigot/sas/salinite.txt qui contient les données d'une campagne océanographique menée par un laboratoire de chimie marine. Pour chaque station (CFC01, CFC02,...) de collecte des données, les variables suivantes sont répertoriées dans le chier : station : nom de la station salinité CTD : salinité mesurée à bord du bateau par une sonde température : température de l'eau mesurée par la sonde
3 salinité labo : salinité mesurée en labo à partir d'échantillons 02 : concentration en oxyg ne dissous dans l'eau F11 : concentration en fréon 11 dissous dans l'eau Q. 3 Copier le chier salinite.txt sur votre compte. Créer une table SAS sal contenant les variables indiquées ci-dessus. Visualiser la table avec SAS Explorer. Acher la table dans la fenêtre Output. 3 Manipulation des tables SAS Il est possible de créer de nouvelles tables SAS à partir de celles déjà existantes à l'aide de la syntaxe suivante : data libref.tab_out; set libref.tab_in; instructions; Par défaut, toutes les variables de tab_in sont recopiées dans tab_out ainsi que celles éventuellement créées par les instructions. Il est possible de ne pas garder certaines variables (drop) d'en garder uniquement certaines (keep), ou bien encore de sélectionner seulement certaines observations (where, select, when, if, then,else, do...). Les commandes pour traiter les variables de tab_in peuvent être passées en options des instructions data, set : data libref.tab_out (keep= var1 var2); set libref.tab_in (drop= var4 var6 where (var3 = 2 and var4 = 'Texte') ); instructions; Supposons que la table sal contienne les données du chier salinite.txt. Pour créer une table sal2 qui contienne les variables de la table sal sauf les variables 02 et F11, et qui contienne une variable qui prend la valeur 1 pour les observations réalisées par les stations 'CFC01', 'CFC02' et 'CFC03', la valeur 2 pour les observations réalisées par les stations 'CFC04', 'CFC05' et la valeur 3 sinon, on pourra utiliser les instructions du chier ~jbigot/sas/tp2.sas. Q. 4 Créer la table sal2 dénie ci-dessus. Acher la table dans la fenêtre Output. Les instructions suivantes sont une liste (non exhaustive) de commandes qui permettent de manipuler les variables des tables SAS. Ces instructions peuvent également être utilisées en options d'une procédure pour spécier les variables sur lesquelles les calculs seront eectués. Q. 5 Pour chaque instruction, eectuer les opérations demandées. drop = var1, var2... : acher la table sal en supprimant la variable station keep = var1, var2... : acher la table sal en gardant uniquement les variables oxygène et fréon
4 rstobs= n obs= p : acher les observations de la table sal comprises entre le 10 me et le 20 me individu. where= condition : pour la table sal, acher les observations de la station 'CFC01' pour lesquelles la température est négative. select (var); when(val3,val4,...) instructions; otherwise instructions; end; Cette série d'instructions est utilisée dans le chier tp2.sas pour créer la table sal2. Utiliser les commmandes IF condition THEN instructions; ELSE instructions; pour créer la table sal2. rename var=newname : modier le nom de quelques variables de la table sal label var='label de la variable' : donner un label à chaque variable de la table sal. Visualiser le résultat avec SAS Explorer.... il existe bien d'autres instructions et mots-clés. Nous en verrons encore quelquesuns au fur et à mesure de l'avancement des TP. Q. 6 Acher dans la fenêtre Output la moyenne et la variance des variables 02 et F11 (uniquement) pour les stations 'CFC01', 'CFC02' et 'CFC03'. Q. 7 Dans la table sal, ajouter une variable sal_max qui contienne le maximum de la salinité mesurée sur le bateau et de la salinité mesurée en laboratoire (utiliser Max(var1,var2)). 4 Quelques procédures pour transformer des tables SAS Tri de variables : la procédure sort permet de trier les variables d'une table selon plusieurs crit res. Sa syntaxe (simpliée) est la suivante : proc sort data=libref.tab_in out=libref.tab_out ; by <descending> var1 descending> var2>; Q. 8 Trier les observations de la table sal par ordre croissant de température, puis par ordre décroissant de concentration en oxygène. Standardisation de variables : la réduction ou standardisation de variables quantitative s'obtient à l'aide de la procédure standard (syntaxe simpliée) : proc standard data=libref.tab_in out=libref.tab_out mean=val1 std=val2 ; var var1 var2...; Q. 9 Pour la table sal, réduire les variables température et concentration en oxygène. Concaténation de tables : la concaténation verticale (ou fusion) consiste à compléter une table SAS par une table contenant les mêmes variables mesurées pour d'autres observations (syntaxe simpliée) :
5 data data=libref.tab_fusion; set libref.tab1 libref.tab2; Q. 10 Créer deux tables SAS contenant respectivement les observations des stations 'CFCO1', 'CFCO2', 'CFCO3' et les observations des autres stations. Fusionner ces deux tables pour retrouver la table sal. La concaténation horizontale consiste à regrouper les variables contenues dans deux tables distinctes. Cette opération peut être eectuée à l'aide de l'instruction merge qui permet de contrôler la bonne correspondance des lignes de chaque table selon une variable clé qui doit être triée (syntaxe simpliée) : data data=libref.tab_hori; merge libref.tab1 libref.tab2; by varcle; Q. 11 Créer deux tables SAS contenant respectivement les observations station, salinité CTD, température, salinité labo, et les observations salinité labo, 02, F11. Fusionner ces deux tables en utilisant la variable clé salinité labo pour retrouver la table sal. Nous avons vu quelques exemples de manipulation de tables, en utilisant une syntaxe simpliée pour la plupart des commandes. Une description précise de chaque commande peut être trouvée dans l'aide de SAS (menu Help) ou bien dans les références citées dans l'introduction SAS du TP 1. Q. 12 Reprendre les questions du TP en vous aidant de l'aide de SAS pour enrichir vos programmes de diérentes options. Essayer d'utiliser d'autres commandes pour manipuler des données (e.g. contains, like, rank, transpose, _N_...). 5 Compléments - Contrôle des sorties SAS avec l'environnement ODS Par défaut, SAS présente les résultats d'un programme sous forme de chier texte. Le système O.D.S. (Output Delivery System ) est un outil permettant de sélectionner des sorties SAS et de les récupérer en choisissant des présentations appropriées à certains logiciels tels que des éditeurs de texte (Word, par exemple) ou des éditeurs de graphiques (Adobe Illustrator, par exemple), etc. Le système O.D.S. ore entre autres les présentations suivantes : LISTING : présentation par défaut avec des caractères de type mono-espace (Monaco, Courier) ; PDF : chiers en format pdf ; RTF : chiers utilisables dans un éditeur de texte (Word, par exemple) ; HTML : chiers en langage html pour les pages Internet ;
6 PRINTER : chiers de type postscript pour les imprimantes du même type. Voici un exemple de programme SAS dans lequel la même sortie est produite en trois formats de chiers : data note; input nom $ note @@; cards ; Pierre 11 Paul 14 Carole 13 Jacques 7 ; ods rtf le = 'C:\... \note_examen.rtf'; proc print data= note ; ods rtf close ; ods pdf le = 'C:\... \note_examen.pdf'; proc print data= note ; ods pdf close ; ods printer le = 'C:\... \note_examen.ps'; proc print data= note ; ods printer close ; Commentaires : Dans ce programme, on commande d'abord la production d'un chier ".rtf" (Rich Text File) en écrivant ODS RTF ; suivi du chemin contenant le nom du chier à créer entre apostrophes. Ce chier contient la sortie de la procédure PRINT sous la forme d'un tableau. On sort ensuite de l'environnement O.D.S. avec l'instruction ODS RTF CLOSE ;. Les sorties en formats ".pdf"(portable Document Format) ou ".ps" (postscript) s'obtiennent de la même manière. Les chiers pdf peuvent être insérés dans un éditeur de texte mais pas les chiers postscript. Enn, notons aussi qu'il est possible d'interrompre l'achage des sorties dans la fenêtre Output via l'instruction : ODS LISTING CLOSE; L'instruction contraire : ODS LISTING; permet ensuite de rétablir l'achage. L'intérêt de cette instruction est évident lorsqu'une même procédure est exécutée un grand nombre de fois dans une boucle, notamment pour ne pas encombrer inutilement la fenêtre Output.