Le programmeur SAS pourra recueillir des informations d’un non spécialiste en créer un fichier Excel. Il importe ensuite les données sous SAS.
Dans un précédent sujet « Mes 1ers pas avec ODS TAGSET.EXCELXP« , nous avons vu comment créer un fichier Excel, ou plutôt un fichier XML lisible sous Excel, à partir de la syntaxe d’ODS TAGSET.EXCELXP.
Maintenant, il s’agit de voir les limites de l’importation d’un fichier XML avec la procédure PROC IMPORT.
Exemple : Nous aurons un fichier LST_STUDY.XLS avec plusieurs feuillets, dont un nommé ‘2000’, comme exemple. Ce feuillet a deux colonnes : le numéro de l’étude (STUDY) et la variable à compléter manuellement (FLAG_EXTERNAL). La première ligne contient le nom de la colonne. La variable STUDY peut contenir des nombres et du texte.
1. PROC IMPORT a besoin de données Excel
Même si le fichier créé par ODS TAGSET.EXCELXP a une extension .xls, ce fichier est en fait un fichier en langage XML. Comment observer cette information ? Voici deux propositions :
- Ouvrez un fichier de ce type sous Excel et regarder le type lors que la fenêtre OUVRIR apparaît.
- Ouvrez le fichier dans un éditeur de texte
Afin d’utiliser la procédure PROC IMPORT, il faudra donc convertir le fichier en « enregistrant sous » et là choisir le standard Excel.
2. Les options de l’instruction PROC IMPORT
Préciser le nom du fichier d’entrée et celui de sortie : Dans l’instruction PROC IMPORT, le nom du fichier Excel est donné avec l’option DATAFILE=; celui du data set SAS est introduit par l’option OUT=. Pour rendre ce data set permanent, le nom de la bibliothèque précédera le nom du data set comme d’habitude.
Indiquer à SAS le type de fichier à lire : Selon l’environnement et la version Excel utilisée, l’option DBMS= variera. DBMS=XLS est l’option que j’utilise sous Unix et Windows pour Excel2003. Reportez-vous à la documentation en ligne PROC IMPORT Statement) pour connaître toutes les valeurs possibles de cette option.
Remplacer un fichier SAS existant : Si le data set SAS existe déjà, il ne sera pas remplacé, à moins d’ajouter l’option REPLACE.
%let resultats = C:/sasref;
proc import datafile = « &resultats./lst_study.xls »
out = lst_study
dbms = xls
replace;
run;
3. Les Instructions sur les données sources
Après avoir vu les options de l’instruction PROC IMPORT, je vous propose trois instructions supplémentaires de la procédure (SAS Online Doc. : Data Source Statements)
Des noms de variables personnalisés avec GETNAMES=YES : SAS se sert de la première ligne du fichier Excel pour définir le nom des variables SAS à moins que l’instruction GETNAMES=NO soit ajoutée.
SAS considère les premières lignes du fichier pour identifier le type des variables sauf si MIXED=YES : Si on a une combinaison de caractères et chiffres, on peut se retrouver avec des valeurs manquantes. Par exemple, si vous avez une variable année contenant les valeurs 2008, 2007, <2007, il faudra importer les variables sous forme de caractère. L’instruction MIXED=YES fera le travail pour vous.
Importer une feuille de calcul en particulier grâce à SHEET=: Par défaut, SAS importera la première feuille de calcul disponible dans le fichier Excel. Pour choisir un autre feuillet, son nom est donné entre guillemets dans l’instruction SHEET=.
%let resultats = C:/sasref;
proc import datafile = « &resultats./lst_study.xls »
out = lst_study
dbms = xls
replace;
*getnames = yes;
mixed = yes;
sheet = ‘2000’;
run;
Vous trouverez plus d’informations sur la procédure PROC IMPORT dans l’aide en ligne : SAS Online Doc, The IMPORT Procedure.
4. Une spécificité de l’ODS TAGSET.EXCELXP à gérer
Lors de la création du fichier avec ODS TAGSET.EXCELXP, une ligne est parfois ajoutée après la dernière ligne de saisie. Cette ligne est incluse dans le data set SAS à l’importation. La raison pour laquelle cette ligne est saisie m’est inconnue.
Par contre, je vous propose un data step pour vous en débarrasser une fois le data set SAS créé.
- L’option END= de l’instruction SET sert à repérer la dernière ligne d’observations.
- La fonction MISSING permet de ne supprimer la ligne que si notre variable STUDY est vide.
data lst_study;
set lst_study end=eof;
if eof and missing(study) then delete;
run;