Archives pour août 2008

h1

Une licence SAS pour 160 euros

août 28, 2008

L’édition Learning du logiciel SAS (SAS Learning Edition) est la solution pour les personnes voulant s’entraîner en SAS mais ne disposant pas de licence. Il s’agit d’une édition dont l’utilisation doit impérativement être à but non commercial. Les personnes ayant fini leurs études ou évoluant sur d’autres logiciels y trouveront les principaux outils pour se former, le tout pour un investissement minime de 160 euros.

1. Les produits disponibles

Les modules : La version actuelle est la version 4.1. Elle contient la version SAS 9.1.3. Elle est composée de six modules :

  • SAS/Base®
  • SAS/STAT®
  • SAS/GRAPH®
  • SAS/QC®
  • SAS/ETS®
  • SAS Enterprise Guide 4.1®

La période de validité : La version est valable jusqu’au 31 décembre 2011.

Le volume des bases de données : Un peu plus de 1000 records par data set sont possibles.

Les autres limitations : Pour 160 euros, la licence est logiquement pour une seule personne à la fois. Les réalisations faites avec le produit doivent être à but non commercial. Et enfin le support client reste limité dans ce cas particulier.

Les plus : Le livre “The Little SAS Book for Enterprise Guide 4.1” est joint gratuitement à la commande. Les frais de port sont inclus dans le prix quand l’édition est achetée via le site de SAS.

3. Les pré-requis techniques

Voici une traduction des pré-requis de votre ordinateur :

  • Microsoft Windows 2000 ou XP Professionnel
  • Fonctionne sur le système d’exploitation Microsoft Windows seulement, et non sur un système d’exploitation Windows Server
  • 1,080 MB de disque dur pour le stockage
  • 256 MB RAM minimum, 512 MB RAM recommandé

On retiendra donc qu’il faut 1,080 de disque dur et idéalement 512 MB de RAM. Windows 2000 ou XP Professionnel fonctionne mais pas Microsoft Vista.

L’accès est prohibé par les Etats-Unis avec les pays que sont Cuba, l’Iran, le Soudan et la Syrie à la date d’écriture de cet article. Cette liste peut changer dans le temps.

4. Commander en ligne

Vous pouvez commander le produit sur le site de SAS, sur Amazon, via Google Book ou encore en librairie. Voici quelques précisions concernant la commande via le site de SAS.

  • Tout d’abord, il faut se connecter au site de SAS en anglais, rubrique Learning Center.
  • Après, il faut choisir Bringing the power of data analytics to individuals.
  • Ensuite, vous avez le choix entre plusieurs langues. Je vous conseille de prendre English (International). La version française n’est pas disponible mais, même si c’était le cas, je vous conseillerais la version anglaise. Ainsi nous parlerons le même langage que dans le blog.
  • Le catalogue complet de SAS apparaît alors. On retrouve le lien intitulé SAS Learning Edition.
  • Trois produits sont affichés. Le produit SAS Learning Edition 4.1 ayant l’ISBN 978-1-59047-917-9 sera choisi. Cliquez sur “Add to Cart” pour ajouter ce produit dans votre panier.
  • Pour continuez le processus, choisissez le bouton ”Checkout” et créez un profil si vous n’en avez pas.

Je pense que vous recevrez le logiciel sous forme de CD d’installation et par poste. Mais n’ayant pas expérimenté personnellement, je ne peux pas vous le confirmer. Peut-être que d’autres lecteurs le pourront. Je ne connais pas non plus la durée de livraison.

Faites-nous partagez votre expérience sur le sujet.

h1

Je garde ou je jette? les variables

août 25, 2008

Pour garder ou supprimer sous SAS des variables, il y a les mots-clés KEEP (garder) et DROP (enlever). Sélectionner les variables nécessaires par la suite et seulement celles-ci est très important. Cela fait partie des outils pour améliorer la performance d’un programme tant en terme de temps d’exécution que le volume demandé pour stocker les data sets. Voici plus en détails, et avec des exemples, l’utilisation de ce vocabulaire qui s’applique au data step, aux procédures et à la syntaxe de l’ODS OUTPUT.

1. L’option dans un data step

Les mots KEEP et DROP servent principalement en tant qu’option appliquée à un data set donné. Elles sont alors listées juste après le nom du data set entre parenthèses et sont suivies du signe égal :

Exemple 1 : une instruction SET

data class (drop=weight: height:);
   set sashelp.class (keep=name weight height);
   weight_kg = weight*0.45359237;
   height_m  = height*0.0254;
   bmi       = weight_kg/height_m**2;
run;

Dans le cas présent, les variables NAME (nom), WEIGHT (poids) et HEIGHT (taille) sont lues dans le fichier d’origine SASHELP.CLASS et gardées. De nouvelles variables sont calculées pour avoir un poids en kilogramme (WIEGHT_KG) et une taille en mètres (HEIGHT_M). A partir du poids et de la taille, l’indicateur de masse corporelle (BMI) est calculé. Les variables, dont le nom commence par WEIGHT et HEIGHT, ne sont plus nécessaires par la suite. Elles sont donc supprimée dans le data set final appelé CLASS.

Soit le mot KEEP, soit le mot DROP est donné en option mais pas les deux afin d’éviter les confusions. Le choix entre KEEP et DROP dépend souvent du nombre de variables à lister par la suite. C’est donc un choix purement pratique.

Note, Indice de masse corporelle : L’indice de masse corporel (Body Mass Index, BMI) est égal au poids divisé par la taille au carré (poids/taille2). Le site de l’Organisation Mondiale de la Santé (World Health Organisation, WHO) donne des précisions sur le sujet.

Note, Conversion des unités de mesures (source Wikipedia) : je suppose que la taille donnée dans le fichier SASHELP.CLASS est exprimée en pouces (inches) et que le poids est exprimé en livres (pounds). Sachant qu’un pouce est égal à 2,54 cm et qu’une livre est égale à 0,45359237 kg, les tailles et poids du premier exemple ont pu être convertis en mètres et kilos.

Exemple 2 : une instruction MERGE

data age_ae;
   merge ae      (in=ref keep=name ae_id ae_sev)
         patient (keep=name age);
   by name;
   if ref;
run;

Dans ce second exemple, les patients ayant eu un effet secondaire (adverse event, AE) sont enregistrés dans le data set AE. Chaque effet secondaire est identifié de manière unique par les variables NAME et AE_ID. La sévérité de l’effet secondaire nous intéresse dans le data set AE.

A cette information, est ajouté l’âge du patient disponible dans la variable AGE du data set PATIENT.

La variable commune aux deux data sets est NAME. Il faut donc qu’elle reste dans les deux data sets. Seuls les patients ayant eu un effet secondaire sont sélectionnés grâce à l’option IN.

Pour tester l’exemple, vous trouverez en fin d’article un code créant les fichiers PATIENT et AE.

NOTE : Une variable utilisée par une autre option du data set comme RENAME ou WHERE ne pourra pas être supprimée au même moment.

2. Quelques exemples de procédures

Dans une procédure, elles suivent le nom du data set d’entrée et/ou du data set de sortie. Aucun autre mot ne doit être inséré entre le nom du data set et les options entre parenthèses.

  • proc sort data=… () out=…();
  • proc print data=… () width=min;
  • proc transpose data=…() out=…() prefix=visit;
  • proc freq data=…();
  • proc report data=…() split=’#';
  • proc tabulate data=…()
  • proc gplot data=…()
  • proc boxplot data=…()
  • proc univariate data=…()
  • proc ttest data=…()
  • etc.

La procédure SQL liste les variables à garder après le mot SELECT. Il n’y a pas à ce stade d’option pour supprimer les variables. Par contre, on peut affiner la sélection après que le data set final soit créé. Bien sûr, le temps de lecture est augmenté puisque toutes les variables sont lues pour créer le data set et non un sous-ensemble.

proc sql;
   create table test (drop=ae_sdt ae_edt) as
      select a.*, age
      from ae a
      left join
           patient b
      on a.name=b.name;
quit;

NOTE : L’option WHERE est très pratique lorsqu’on en peut faire une sélection que sur le résultat de la fusion.

proc sql;
   create table test (where=(ae_sev=1 or age=12)) as
      select a.*, age
      from (select name, ae_id, ae_sev
            from ae) a
      left join
           (select name, age
            from patient) b
      on a.name=b.name;
quit;

3. L’option dans l’ODS OUTPUT

Les sorties générées par une procédure sont redirigeables vers un data set via l’instruction ODS OUTPUT. Le nom de la sortie est alors suivi du signe égal et du nom du data set de destination. Après ce nom les options sont ajoutables.

ods exclude all;
ods output onewayfreqs=exemple_ods (keep=age frequency percent);
proc freq data=sashelp.class;
   table age;
run;
ods output clear;
ods exclude none;

Deux articles sur l’ODS OUTPUT sont déjà à votre disposition

4. Les instructions KEEP et DROP dans un data step

En plus des options KEEP et DROP, il existe les instructions KEEP (KEEP Statement) et DROP (Drop Statement) pouvant être exécutées dans un data step. L’important ici est de se souvenir que l’instruction s’applique à la fin du data step, une fois que le data set final est créé. Ainsi il n’est pas possible de supprimer une variable en milieu de programme pour ensuite créer une autre variable du même nom.

data class (drop=i);
   do i=0 to 3;
      output;
   end;
   do i=10 to 12;
      output;
   end;
run;

data class;
   do i=0 to 3;
      output;
   end;
   drop i;
   do i=10 to 12;
      output;
   end;
run;

Les deux exemples ci-dessus font le même travail. La variable I n’apparaîtra pas dans le data set final car elle est supprimée en fin de programme.

Lectures complémentaires : Outre les options KEEP et DROP, le programmeur utilisera souvent les options RENAME et WHERE et de temps en temps les options  FIRSTOBS et OBS. Pour une liste complète des options, consultez la documentation en ligne : SAS Data Set Option.

Après savoir comment supprimer les variables et donc les colonnes d’un data set SAS, vous serez peut-être intéressé de savoir comment supprimer ou garder certaines lignes d’un data set avec les mots-clés DELETE (DELETE Statement) et OUTPUT (OUTPUT Statement).

Annexe : Créer les data sets PATIENT et AE pour tester l’exemple avec MERGE.

data patient;
   set sashelp.class;
run;

data ae;
   set sashelp.class (keep=name);
   if name=‘Thomas’ then
      do;
         ae_id  = 1;
         ae_sdt = ‘21MAR2007′d;
         ae_edt = ‘28APR2007′d;
         ae_sev = 3;
         output;
         ae_id  = 2;
         ae_sdt = ‘03JUN2007′d;
         ae_edt = ‘19JUN2007′d;
         ae_sev = 1;
         output;
      end;
run;

h1

Quand compilation et exécution font la différence, un exemple

août 21, 2008

SAS effectue plusieurs lectures d’un programme. A la première lecture, c’est la compilation. A la seconde, c’est l’exécution. Connaître ces notions vous aidera à comprendre les exemples ci-dessous : pourquoi le premier code proposé ne fonctionne pas alors que les autres passent. Les fonctions PUT, VVALUE, le dictionnaire DICTIONARY.COLUMNS et le DATA _NULL_ serviront dans les exemples.

1. Un premier exemple avec la fonction PUT

Rappel sur la fonction PUT : Une fonction PUT permet de convertir une variable numérique en variable texte ou une variable texte en une autre variable texte. Elle est composée de deux paramètres. D’un côté, il y a la variable d’origine. De l’autre côté, il y a le format à appliquer sur cette variable d’origine. C’est donc la valeur sous forme formatée qui devient une valeur texte. Reportez vous à l’article “Convertir une variable caractère en numérique et inversement” pour plus de détails.

La phase de compilation : A la compilation, SAS  vérifie que la variable d’origine et le format associé sont tous les deux du même type. Il faut qu’une variable numérique est un format qui s’applique à une variable numérique. De manière identique, il faut un format caractère pour une variable texte.

La phase d’exécution : Si on ne connaît pas à l’avance le type de la variable, on peut avoir envie de définir une condition : si la variable est numérique applique tel format, sinon applique tel autre format. Hors une condition IF/THEN n’est visible par SAS qu’à la phase d’exécution.

En d’autres termes, SAS tentera d’appliquer un format numérique à une variable numérique avant de regarder si la fonction PUT est définie dans une condition.

data import_excel;
   retain type ‘CHAR’;
   study = ‘999′;
   output;
   study = ‘888′;
   output;
run;

data study_new;
   set import_excel;
   if type=‘NUM’ then study_new=put(study,best.);
   else study_new=study;
run;

Le résultat : Dans l’exemple, un format numérique (BEST.) est appliqué à une variable texte (STUDY). La première partie de la condition ne s’applique pas car le type de la variable n’est pas égal à NUM. Mais SAS cherche un format $BEST. qui n’existe pas. Il est obligé de s’arrêter là.

28 data study_new;
29 set ref;
30 if upcase(type)=’NUM’ then study_new=put(study,best.);
                                                  —–
                                                  48

ERROR 48-59: The format $BEST was not found or could not be loaded.

31 else study_new=study;
32 run;

NOTE: The SAS System stopped processing this step because of errors.
WARNING: The data set WORK.STUDY_NEW may be incomplete.
When this step was stopped there were 0 observations and 3 variables
.

Un exemple où le type de la variable est inconnu : en important un fichier EXCEL (PROC IMPORT/MIXED=YES), le type de la variable sous SAS peut-être inconnu. La variable sera caractère si une cellule contient du texte. Sinon, elle sera numérique.

2. Une solution rapide

Une fonction Vxxx: la fonction VVALUE retourne une valeur texte. Elle utilise le format associé à la variable en interne pour construire la valeur sous forme formatée. La nouvelle variable aura une longueur de 200.

data study_new;
   set ref;
   if type=’NUM’ then study_new=vvalue(study);
   else study_new=study;
run;

3. Une solution plus lourde mais pouvant s’appliquer à plusieurs variables

Une autre solution est de générer le code à exécuter. Si la variable est numérique, c’est l’instruction avec PUT qui apparaîtra, sinon c’est l’autre instruction. Cette approche fait appel à la notion de dictionnaire et de DATA _NULL_.

3.1 Créer un data set contenant le nom des variables et leur type à partir du dictionnaire (dictionary) appelé COLUMNS

La première étape consiste à créer un data set, nommé DICT_REF, contenant la variable STUDY et son type.

Choix du dictionnaire : Le dictionnaire (dictionary) COLUMNS est un data set de référence, créé de manière automatique par SAS. Il répertorie toutes les variables contenues dans tous les data sets de toutes les bibliothèques actives. Il contient donc une ligne par variable.

Chaque ligne du dictionnaire contient plusieurs informations caractérisant cette variable dont :

  • la bibliothèque d’origine (variable LIBNAME)
  • le data set d’origine (variable MEMNAME)
  • le nom de la variable (variable NAME)
  • le type de la variable (variable TYPE).

Prendre un sous-ensemble du dictionnaire : Ici seule la variable STUDY est utile. Elle provient du data set EXCEL_IMPORT sauvegardé de manière temporaire dans la bibliothèque WORK.

Mettre en majuscule : Le type de la variable est soit “num” soit “char”, toujours en minuscule. Le nom de la variable peut avoir un mélange de majuscules et minuscules selon la manière dont est saisi le nom lors de sa création. Pour éviter des surprises, le nom de la variable et le type sont mis en majuscule grâce à la fonction UPCASE. L’avantage des dictionnaires, c’est qu’ils peuvent lister plus d’une variable.

proc sql;
   create table dict_ref as
      select upcase(name) as name,
             upcase(type) as type
      from dictionary.columns
      where upcase(libname) = ‘WORK’ and
            upcase(memname) = ‘EXCEL_IMPORT’ and
            upcase(name)    = ‘STUDY’;
quit;

3.2 Ecrire le code et l’appeler

La deuxième étape consiste à créer un programme nommé TMP_STUD.SAS donc le nom et l’emplacement est défini dans l’instruction FILENAME. Pour écrire dans ce fichier, l’instruction FILE est ajoutée dans le DATA _NULL_. Pour plus de précisions sur l’instruction PUT, reportez-vous à l’article “Ecrire un texte avec l’instruction PUT“.

filename stud ‘C:/sasref/tmp_stud.sas’;

data _null_;
   set dict_ref;
   file stud;
   put ‘data study_new;’;
   put @3 ’set excel_import;’;
   if type=‘NUM’ then put @3 ’study_new=put(‘ name ‘,9.);’;
   else put @3 ’study_new=’ name ‘;’;
   put ‘run;’;
run;

%include stud;
filename stud;

L’écriture du programme est fonction des informations contenues dans le DICT_REF. Si plus d’une variable est sélectionnée, il faudrait préciser deux choses :

  • Les instructions DATA et SET ne sont à écrire qu’une fois. Elles sont ajoutées lors de la première boucle fait en interne autour de l’étape DATA via “if _N_=1″.
  • L’instruction RUN apparaît une fois en fin de programme. Il faut donc l’ajouter une fois le dernier record du fichier de référence atteint. L’option END= de l’instruction SET crée une variable interne prenant la valeur 0 pour tous les records sauf le dernier où elle prend la valeur 1. La condition est donc basée sur cette variable.

filename stud ‘C:/sasref/tmp_stud.sas’;

data _null_;
   set dict_ref end=eof;
   file stud;
   if _N_=1 then
      do;
         put ‘data study_new;’;
         put @3 ’set excel_import;’;
      end;

   if type=‘NUM’ then put @3 ’study_new=put(‘ name ‘,9.);’;
   else put @3 ’study_new=’ name ‘;’;
   if eof then
 put ‘run;’;
run;

%include stud;
filename stud;

Le code sauvegardé dans le fichier TMP_STUD.SAS se présente donc ainsi, vu que la variable STUDY est de type caractère.

data study_new;
   set excel_import;
   study_new=STUDY ;
run;

L’instruction %INCLUDE permet l’exécution de ce code.

h1

Mes raccourcis clavier préférés

août 19, 2008

Les raccourcis clavier font gagner énormément de temps. Voici mes préférés dans un environnement Windows pour quelques produits Microsoft (Word, Excel, Internet Explorer), SAS et Acrobat Reader.

1. Les raccourcis “les plus courants”

Copier/Couper/coller : si vous ne connaissez que trois raccourcis, ce sont probablement ceux pour copier (copy), couper (cut) une zone de texte et ensuite la coller (paste).

CTRL+ C (copier ; copy)

CTRL+ X (couper ; le x a la forme d’un ciseau)

CTRL + V (coller ; paste)

Sélectionner tout le texte : COPIER et COUPER sont souvent utilisés en combinaison avec CTRL+A qui sélectionne l’intégralité de la fenêtre active, qu’il s’agisse d’un éditeur de texte sous Word, sous SAS, d’un email, ou d’une page Web.

CTRL + A (sélectionner tout le texte)

Changer le style des caractères : selon que le texte sélectionné est à mettre en gras, en italique ou à souligner, les lettres B (bold), I (italic), U (underline) sont ajoutées à la touche CTRL. Pour annuler l’opération, la même manipulation est effectuée une seconde fois.

CTRL + B (mettre en gras ; bold)

CTRL + I (mettre en italic ; italic)

CTRL + U (souligner ; underline)

Annuler : la dernière tâche effectuée peut-être annulée avec CTRL+Z.

CTRL + Z (annuler la dernière action)

Sauvegarder : Pour lancer la sauvegarde du document en cours, ajoutez S à la touche CTRL.

CTRL + S (sauvegarder le fichier ; save)

Répéter une tâche : vous venez de mettre en gras, la première phrase d’un paragraphe. Vous voulez maintenant répétez cette action pour tous les paragraphes. Après avoir sélectionné la nouvelle zone de texte, soit vous retapez CTRL+B, soit vous utilisez le bouton F4. Cette touche s’applique à n’importe quelle action à renouveler.

F4 (répéter la dernière action)

Rechercher un texte dans un document : qu’il s’agisse de parcourir un fichier PDF comme ceux pour les articles SUGI, etc. sur SAS, un programme SAS ou un rapport, la touche CTRL+F (find) activera la fenêtre de recherche de mots.

CTRL+F (rechercher un mot ; find)

 

2. Des raccourcis pour Excel

Naviguer entre les feuillets : Savoir naviguer entre les feuillets d’Excel est très pratique. Pour cela il faut utiliser en combinaison la touche CTRL avec les touches “Pages Suivantes” et “Pages Précédentes”.

CTRL+”Page Suivante” (basculer sur le feuillet suivant)

CTRL+”Page Précédente” (basculer sur le feuillet précédent)

Souvent, j’utilise ces raccourcis en combinaison avec CTRL+”début” pour que la cellule saisie soit en haut à gauche, en cellule A1.

CTRL+Début” (mettre le curseur en cellule A1)

Etendre une formule à plusieurs cellules avec le symbole $

Lorsque je travaille avec des formules, la touche F4 change la position des symboles dollars $ dans la formule. Quel est l’intérêt ? Voici un exemple où on fait référence à la cellule A1 (=A1). A représente le nom de la colonne et 1 le numéro de la ligne.

Par défaut

  • Si on étend cette fonction à la cellule à droite, l’information est décalée par une colonne. A deviendra B et on aura la fonction =B1.
  • Si on étend cette fonction à la cellule du dessous, l’information est décalée par une ligne. 1 devient 2 et on aura la fonction =A2.
  • Si on étend sur la droite et vers le bas la fonction d’une case, on aura alors la fonction =B2.
  • etc.

Fixer une colonne, une ligne ou les deux

  • Si le nom de la colonne est fixé en ajoutant un symbole dollar $ devant le nom de la colonne, la colonne A sera toujours la colonne de référence. =$A1.
  • Si le nom de la ligne est fixé, la ligne 1 est toujours celle de référence =A$1. Seul le nom de la colonne peut changer
  • En fixant, à la fois, la colonne et la ligne =$A$1, la fonction fera toujours référence à la cellule A1.

Etendre la sélection : La touche F8 est une autre de mes favorites sous Excel. Elle permet d’étendre la sélection de cellules qui est ensuite définie en déplaçant le curseur.

Etendre le même nombre sur plusieurs cellules : Si vous sélectionnez une cellule et souhaitez étendre sa valeur à d’autres cellules, il faudra maintenir la touche CTRL enfoncée. Sinon, chaque nombre sera incrémenté par 1.

3. Un raccourci sous Word

Ajouter une tabulation dans un tableau est possible en combinant la touche CTRL avec la touche de tabulation TAB.

CTRL+TAB (ajouter une tabulation dans un tableau de Word)

4. Des raccourcis pour le navigateur Internet Explorer

Naviguer entre les onglets : La touche de tabulation sert à passer au champ suivant. Pour revenir en arrière, la touche de mise en majuscule MAJ (shift) est ajoutée. Ce raccourci n’est pas propre à Internet Explorer. On l’adore à chaque fois qu’on a deux champs à remplir : un pour le nom de l’utilisateur et l’autre pour le mot de passe.

Tab (passer au champ suivant)

MAJ+Tab (passer au champ précédent)

Des raccourcis occasionnels : De temps à autre, je me sers des touches F5 pour rafraîchir une page et F11 pour mettre en plein écran (répéter l’opération pour revenir en mode standard).

F5 Rafraîchir une page

F11 Mettre en plein écran

Jouer avec les onglets : En écrivant cet article, j’ai fouiné un peu sur le net. Voici deux autres raccourcis qui me semblent bien pratique : ouvrir un onglet avec CTRL+T, passer d’un onglet à l’autre

CTRL + T (ouvrir un nouvel onglet ; CTRL+W pour le fermer)

CTRL + Tab (naviguer entre les onglets)

Naviguer dans un menu déroulant : Dans un menu déroulant pour choisir un pays, il suffira de choisir la lettre F pour voir le premier pays commençant par F.

5. Des raccourcis sous SAS

Lister tous les raccourcis SAS disponibles sous Windows : la touche F9 permet de lister tous les raccourcis SAS disponibles sous Windows

F9 (lister les raccourcis SAS).

Exécuter un programme : La touche F8 exécute tout le contenu de l’éditeur SAS actif ou le code sélectionné.

F8 (exécuter un programme SAS)

Vider une fenêtre de son contenu : La touche CTRL+E nettoie le contenu de la fenêtre active, qu’il s’agisse de l’éditeur, de la LOG ou de l’OUTPUT.

CTRL + E (effacer le contenu d’une fenêtre SAS contenant du texte)

6. Des raccourcis indépendants d’un logiciel

Afficher le gestionnaire des tâches : vous voulez interrompre un programme qui ne répondu plus, tentez l’arrêt via le gestionnaire des tâches (task manager).

CTRL+ALT+SUPPR

Afficher la barre Windows : Pour faire apparaître la barre Windows et ainsi accéder à la liste des programmes via le bouton DEMARRER ou à la liste des programmes en cours, le bouton Windows suffit.

Windows (rendre active la barre Windows)

Réduire toutes les fenêtres actives : Réduire toutes les fenêtres pour faire apparaître votre poste de travail est possible avec les touches Windows et D combinées.

Windows+D (réduire toues les fenêtres actives)

Naviguer entre les applications ouvertes : Pour passer d’une application à l’autre, la touche ALT est maintenue enfoncée et on a tape autant de fois que nécessaire sur la touche de tabulation pour sélectionner celle de son choix.

ALT+Tab (mettre au premier plan une application)

Renommer un fichier dans une arborescence : En cliquant deux fois sur un nom de fichier dans une arborescence, le texte est prêt à être modifié. Une autre solution, pour renommer un fichier, est de cliquer une fois seulement dessus et d’appuyer sur la touche F2.

F2 (renommer un nom de fichier)

Sélectionner des fichiers dans une arborescence (ou dans un menu déroulant) : Pour sélectionner des fichiers distincts dans un répertoire, la touche CTRL doit être maintenue enfoncée. Par contre, si les fichiers se suivent, le premier sera sélectionné. Puis en maintenant la touche MAJ, le dernier sera à son tour sélectionné.

CTRL+sélection des fichiers (sélectionner des fichiers distincts)

Sélection du premier fichier puis MAJ+sélection du dernier fichier (sélectionner des fichiers contigus)

Créer un raccourci pour ouvrir un logiciel : Pour ajouter un raccourci clavier à une application. Sur certains claviers, il existe le bouton pour ouvrir le logiciel Calculatrice. Je la trouve pratique pour faire des calculs de base et plus rapide que d’ouvrir Excel. Pour ajouter le raccourci, il faut agir en trois étapes :

  • Testez le raccourci de votre choix pour vérifiez au préalable que ce raccourci clavier n’existe pas sur votre ordinateur.
  • Retrouvez le nom du logiciel dans Démarrer/Programmes/Accessoires et faites un clique-droit pour afficher la fenêtre PROPRIETE.
  • Dans l’onglet RACCOURCI, ajoutez la lettre C. D’office CTRL+ALT apparaissent. Le raccourci sera donc CTRL+ALT+C.

Créer un raccourci pour changer de langue de travail : vous avez la possibilité de créer un raccourci clavier pour passer d’un clavier en anglais à un clavier en français par exemple. Il faut aller dans le panneau de configuration pour créer ce nouveau raccourci.

Capture d’écran : Faire une capture d’écran permettra de documenter un email ou un rapport afin de rendre les explications plus claires. Deux possibilités sont envisageables : capturer tout l’écran ou capture la fenêtre active. A chaque fois, il faut utiliser la touche ImprEcr en haut à droite du clavier. Entendez par là “Impression Ecran”.

ImprEcr

ALT+ImprEcr (fenêtre active)

7. Les petits nouveaux qui me semblent sympa

Changer de case : pour mettre en majuscule ou en minuscule un texte donné, appuyez sur les touches MAJ et F3. La touche MAJ (shift) est représentée par une flèche montante. Il s’agit de cette touche utilisée conjointement avec une lettre pour l’affiche en majuscule.

Maj+F3 (mettre tout en majuscule ou en minuscule)

Note : Pour trouver de nouveaux raccourcis existants, pensez à regarder dans le menu du logiciel, pour voir s’il y a un raccourci d’annoter aux sélections effectuées le plus souvent.

Note : Votre logiciel de messagerie a probablement un raccourci pour rafraîchir la liste des emails reçus et faire apparaître les derniers. Sous LotusNotes, c’est le raccourci F9 qui se charge de se travail.

Et vous, quels sont vos raccourcis préférés ?

h1

Passer d’un fichier de l’ODS TAGSET.EXCELXP à un data set SAS avec PROC IMPORT

août 15, 2008

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 :

  1. Ouvrez un fichier de ce type sous Excel et regarder le type lors que la fenêtre OUVRIR apparaît.
  2. 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;

h1

Répéter une action sur plusieurs variables avec le langage macro

août 13, 2008

Sous SAS, deux possibilités sont envisageables pour répéter une action sur plusieurs variables. Dans le cas d’un data step, la syntaxe de l’ARRAY est tout à fait appropriée. Dans d’autres cas, le langage macro peut s’avérer plus pertinent. Voici donc une présentation de l’approche via le langage macro.

1. L’exemple

Pour illustrer le propos, le programme aura pour but de définir un PROC REPORT contenant toutes les variables du data set SASHELP.CLASS. Si on connaît le nom des variables, la syntaxe se résume de la manière suivante.

proc report data=sashelp.class;
   columns name age sex weight height;
   define name   / display;
   define age    / display;
   define sex    / display;
   define weight / display;
   define height / display;
run;

Mais si on ne connaît pas le nom des variables par avance, il faut automatiser la tâche.

2. Remplacer le nom des variables par des macros variables

Dans l’exemple suivant, le nom de chaque variable est sauvegardé dans une macro variable. Ces macros variables ont une structure particulière :

un préfixe commun + un nombre

%let class1 = name;
%let class2 = age;
%let class3 = sex;
%let class4 = weight;
%let class5 = height;

proc report data=sashelp.class;
   columns name age sex weight height;
   define &class1. / display;
   define &class2. / display;
   define &class3. / display;
   define &class4. / display;
   define &class5. / display;
run;

3. Répéter l’instruction DEFINE grâce à une boucle

Grâce à cette structure particulière, une boucle peut être envisagée. L’instruction DEFINE est alors répétée autant de fois qu’il y a de variables. La boucle est définie par une macro variable “I” qui prend des valeurs allant de 1 à 5. La partie nombre de la macro variable est donc remplacée par la valeur de la macro variable “I”.

NOTE : Pour résoudre la macro variable lors de la première boucle, SAS effectue deux lectures. A la première lecture, les deux perluètes (ampersand) && se transforment en un seul ; &i. se transforme en 1. On a donc &CLASS1. A la deuxième lecture, SAS résout la macro variable &CLASS1. comme précédemment.

%macro test;
   proc report data=sashelp.class;
   columns name age sex weight height;
   %do i=1 %to 5
      define &&class&i. / display;
   %end;
   run;
%mend test;
%test;

4. Créer les macros variables de manière automatique

Pour créer les macros variables automatiquement, il faut agir en deux étapes.

  1. Enregistrer chacune des noms de variables du data set choisi dans PROC REPORT (SASHELP.CLASS) dans un nouveau data set (LST_VAR) et plus particulière dans une variable (NAME).
  2. Associer un numéro à chaque nom de variable (compteur) et convertir l’information en macro variable (CALL SYMPUT).

proc sql;
   create table lst_var as
      select name
      from dictionary.columns
      where upcase(libname)=‘SASHELP’ and
            upcase(memname)=‘CLASS’;
quit;

data _null_;
   set lst_var;
   cnt+1;
   call symput (cats(‘CLASS’,put(cnt,best.)),name);
run;

5. Compter le nombre de variables de manière automatique

Si le nombre de variable dans le data set n’est pas connu à l’avance, il faut le retrouver. Cette information est ensuite sauvegardée dans une macro variable, disons MAX_VAR, et remplacera notre nombre 5. L’article “3 méthodes pour construire des macro variables sans macro” vous donnera plus de précisions concernant la création d’une macro variable.

Obtenir rapidement le nombre de variables dans un data set : Un moyen pour trouver le nombre de variables est de faire appel au dictionnaire de SAS intitulé TABLES.

proc sql noprint;
   select nvar into : max_var
   from dictionary.tables
   where upcase(libname)=‘SASHELP’ and
         upcase(memname)=‘CLASS’;
quit;

Plus de flexibilité sur la liste des variables concernées : Un autre moyen pour compter le nombre de variables est d’agir en deux étapes.

  • Enregistrer dans un variable d’un nouveau data set chacune des noms de variables de SASHELP.CLASS.
  • Compter le nombre d’observations dans ce data set. Vous pouvez vous reporter à l’article “Combien d’observations dans mon data set” pour plus de précisions sur les différentes alternatives.

Dans notre exemple, il s’agit de créer le data set LST_VAR pour la première étape. Le code de la section 4 est tout à fait suffisant pour cela. Ensuite, CALL SYMPUTX peut servir à sauvegarder l’information dans une macro variable.

data _null_ ;
   call symputx(‘max_var’,_N_-1);
   set lst_var;
run;

Pourquoi vous ai-je proposé cette alternative ?  Ici, toutes les variables sont sélectionnées. Mais si seulement quelques une sont choisies, seule la seconde alternative marche. Voici quelques sous-sélections possibles.

  • Sélectionner toutes les variables numériques,
  • Sélectionner toutes les variables finissant pas _X,
  • etc.

En résumé : En résumé, le code se décompose en 2 étapes : créer les macros variables et utiliser ces macros variables pour définir une boucle.

*1. Créer les macros variables CLASS1 à CLASS5, MAX_VAR.;

*1.1 Créer le data set LST_VAR servant de fichier de référence.;

proc sql;
   create table lst_var as
      select name
      from dictionary.columns
      where upcase(libname)=‘SASHELP’ and
            upcase(memname)=‘CLASS’;
quit;

*1.2 Créer les macro variables CLASS1-CLASS5 en se basant sur le data set LST_VAR créé précédemment.;

data _null_;
   set lst_var;
   cnt+1;
   call symput (cats(‘CLASS’,put(cnt,best.)),name);
run;

*1.3 Créer la macro variable VAR_MAX en se basant sur le data set LST_VAR créé précédemment.;

data _null_ ;
   call symputx(‘max_var’,_N_-1);
   set lst_var;
run;

*2. Reporting : appeler les différentes macro variables pour créer la boucle autour de l’instruction DEFINE.;

%macro test;
proc report data=sashelp.class;
   columns name age sex weight height;
   %do i=1 %to &max_var.;
      define &&class&i. / display;
   %end;
run;
%mend test;
%test;

h1

Supprimer des formats

août 7, 2008

Après avoir présenté dans l’article “2 méthodes pour de nouveaux formats“ comment créer un format de manières temporaire et permanente, nous allons voir comment les supprimer.

Rappel : les formats SAS sont sauvegardés dans un fichier nommé catalogue pour les formats (format catalog). Il peut exister plusieurs fichiers ayant des noms différents selon l’information donnée lors de la création dans l’option LIB= de PROC FORMAT. Si aucun nom en particulier n’a été donné lors de la création, alors le catalogue pour les formats s’appelle FORMATS et est sauvegardé temporairement dans la bibliothèque WORK.

1. Créer deux formats pour l’exemple

Dans un premier temps, pour illustrer le code, trois formats sont créés dans le catalogue nommé FORMATS de la bibliothèque WORK. Ces formats s’appellent NY, SEX et GENDER. Les deux premiers sont numériques, le troisième s’applique à des variables caractères.

Dans cet exemple les éléments mis en commentaire sont les valeurs implicites, celles que SAS utilise par défaut.

proc format; *lib=work.formats;
   value ny        1 = ‘NO’
                   2 = ‘YES’;
   value sex       1 = ‘Male’
                   2 = ‘Female’;
   value $ gender ‘M’ = ‘Male’
                  ‘F’ = ‘Female’;
run;

2. Supprimer un à un les formats du catalog

Avec la procédure PROC CATALOG, les formats NY et GENDER sont supprimés du catalogue FORMATS. Il restera le format SEX dans le catalogue. Il est impératif ici de nommer le nom du catalogue (FORMATS) et la bibliothèque où il est sauvegardé avec l’option CATALOG=.

Dans l’instruction DELETE figurent le nom des formats à supprimer. Le type d’entrée (entry type ou ET) est à préciser.

  • Dans le premier cas, les formats NY et GENDER sont de type différent. Chacun d’eux est suivi du type de l’entrée entre parenthèses. L’un est numérique (ET=FORMAT) et l’autre est caractère (ET=FORMATC).
  • Si tous les formats listés sont du même type, il est possible d’utiliser l’option ET= après une barre inclinée. Les formats AGE et SEX sont tous les deux numériques. L’option ET=FORMAT suffit.

proc catalog catalog=work.formats;
   delete ny (et=format) gender (et=formatc);
   *delete age sex / et=format;
run;

3. Supprimer le catalogue en entier avec tous ces formats

La procédure PROC DATASETS permet de supprimer un catalogue contenant des formats. Pour se faire, il faut d’abord préciser le type de fichier avec l’option MEMTYPE, la valeur par défaut étant DATA. Par défaut SAS recherchera le catalogue dans la bibliothèque WORK à moins de préciser une autre bibliothèque. Le nom du fichier catalogue contenant les formats est donné dans l’instruction DELETE

proc datasets memtype=catalog;*lib=work;
   delete formats;
run;

Annexe : cet exemple est le même que précédemment à une exception près.

  • D’une part, le format catalogue est maintenant permanent puisqu’il est sauvegardé dans la bibliothèque SASREF et non WORK.
  • D’autre part, il est sauvegardé avec un nom choisi par le programmeur (VERO) et non FORMATS.

libname sasref ‘C:/sasref’;

proc format lib=sasref.vero;
   value ny        1 = ‘NO’
                   2 = ‘YES’;
   value sex       1 = ‘Male’
                   2 = ‘Female’;
   value $ gender ‘M’ = ‘Male’
                  ‘F’ = ‘Female’;
run;

proc catalog catalog=sasref.vero;
   delete ny (et=format);
run;

proc datasets lib=sasref memtype=catalog;
   delete vero;
run;

h1

Choisir ses outils de communication

août 4, 2008

Le programmeur SAS communique beaucoup par email mais pas seulement. Après avoir présenté 6 conseils pour vos emails, se pose la question suivante : l’email est-il le moyen le plus adapté pour atteindre votre objectif ?

1. L’email doit-il être l’outil numéro 1 ?

L’email se révèle pertinent pour garder une trace écrite : donner un feedback, faire un résumer, lister des questions non urgentes et communiquer avec plusieurs personnes.

  • Donner un feedback : pour faire un bilan sur l’état actuel d’un projet et des points restants, l’email est tout à fait adapté. Il servira de base pour les conversations futures entre le programmeur et le manager.
  • Confirmer les points discutés : après une réunion pour clarifier les points d’un projet à traiter, il est toujours bon de renvoyer un email listant les décisions prises. Cela permettra de repérer d’éventuels malentendus et de base pour une prochaine discussion.
  • Questions non urgentes : pour les questions non urgentes, tel un problème qui ne vous empêche pas de programmer, l’email est parfois suffisant.
  • Communiquer avec plusieurs personnes : en mettant en copie les autres membres d’un projet, tout le monde est informé des problèmes rencontrés et des décisions prises. Ces personnes n’ont pas obligations de répondre mais peuvent apporter leur contribution si elle le pense nécessaire. Mais pensez à préciser le nom de la personne de qui vous attendez une réponse.

2. Quelle place pour le téléphone et la messagerie instantanée ?

Messagerie Instantanée pour formuler des questions/réponses techniques : Préférez alors la messagerie instantanée très pratique pour une question technique et une question pouvant être répondu dans la matinée ou l’après-midi. Un extrait de programme SAS ou un résultat obtenu par SAS peut être ajouté dans la conversation. De plus, votre interlocuteur aura un battement pour pourra finir auparavant la tâche qu’il a entrepris et être ainsi entièrement disponible pour votre question.

Téléphone pour obtenir des réponses rapides et courtes : Pour faire connaissance avec votre collaborateur ou avoir une réponse rapide sur un sujet “simple”, le téléphone est probablement le plus adapté. Reste à s’assurer auprès de votre interlocuteur qu’il est actuellement disponible et peut prendre 5 minutes pour vous.

Téléphone et messagerie instantanée combinés pour travailler en groupe

  • Faire le point avec les différents intervenants d’un projet : les réunions à distance par le seul biais d’un téléphone sont fréquentes. On parle de conférences téléphoniques (TC pour telephone conference). Elles permettent de faire le point entre les différents interlocuteurs d’un projet situés dans des villes/pays différentes.
  • Présenter un sujet à plusieurs interlocuteurs : certaines messageries instantanées ont une option pour diffuser un Powerpoint sur les écrans d’ordinateurs de chaque intervenant. Celui qui présente peut alors faire défiler à son rythme les transparents et pointer avec son curseur certains points sur la page.

3. En face à face ?

Repérez la porte fermée de votre manager : un des conseils donné aux managers est de fermer la porte lorsqu’ils doivent restés concentrés et de la laisser ouverte sinon. Si votre manager utilise cette pratique, respectez-la et ne frappez pas à la porte pour un sujet qui peut attendre 1 heure. Vous n’en retirerez que des avantages.

Consultation en fin de journée : votre manager a sûrement un planning bien chargé pour la journée. Une fois libéré de tous les sujets qu’il a prévu de traiter dans la journée, il sera plus détendu pour faire le bilan avec vous des projets dont vous avez la charge.

Consultez après une pause : si vous avez une question SAS qui peut attendre pour un de vos collègues et que celui-ci part à 5h ou qu’il ne peut pas jouer avec la porte vu qu’il travaille en open space, interpellez-le après sa pause repas avant qu’il ne recommence son travail ou lorsqu’il fait une pause pour se dégourdir les jambes.

Conclusion

En conclusion, je préciserais que ces moyens techniques ne sont pas toujours disponibles dans l’entreprise ou que vos collaborateurs n’ont pas encore acquis les habitudes de travail avec la messagerie instantanée. Il faut donc s’adapter à son interlocuteur et prendre le temps d’évaluer les outils avec lesquels il se sent le plus à l’aise.

N’hésitez pas à compléter la liste en envoyant un commentaire.