Posts Tagged ‘proc format’

h1

Parler français : les heures sous la forme 9h30

mars 16, 2009

Je vous propose une série d’articles sur la thématique « Parler français avec SAS ». Je reprend les notions du précédent article sur les heures pour nous intéresser à la manière d’ajouter la lettre h séparant habituellement les heures des minutes ? Voici un exemple structuré en 4 parties.

1. L’instruction PICTURE de PROC FORMAT

Ici est créé un format HR_FR au moyant de l’instruction PICTURE dans une procédure PROC FORMAT. Il s’applique à des données exprimant les heures SAS.

proc format;
picture hr_fr other=‘%Hh%0M’ (datatype=time);
run;

2. Créer un data set pour illustrer le sujet

L’étape data crée un data set HEURE_FR contenant une variable DEBUT avec deux observations. Ces records sont des heures exprimées en SAS Time.

data heure_fr;
debut=‘9:05’t;
output;
debut=’14:05′t;
output;
run;

3. Appliquer le format HR_FR à la variable DEBUT

Le temps de la procédure PROC PRINT est ajouté le format HR_FR à la variable DEBUT .

proc print data=heure_fr;
format debut hr_fr.;
run;

4. Voir Le résultat de la procédure PROC PRINT

debut
9h05
14h05

Lectures complémentaires :

h1

Visualiser le contenu d’un catalogue contenant des formats

mars 9, 2009

Les formats sont sauvegardés dans SAS dans des fichiers appelés catalogues (format catalog). Par défaut, tous les formats envoyés dans une même bibliothèque sont sauvegardés dans le même catalogue. Deux questions se posent après :

  • Comment voir la liste des formats présents dans un catalogue ?
  • Comment retrouver le contenu d’un format en particulier ?

1. Créer deux formats dans la bibliothèque SASREF

Pour illuster les deux points qui suivent, sont créés deux formats dans la fichier FORMATS de la bibliothèque SASREF.

  • Le premier format est nommé CNTRY et s’applique à des pays. Il s’agit d’un format alphanumérique (s’applique à du texte).
  • Le second format NY (No/Yes) est un format numérique.
libname sasref  'C:/sasref';

proc format lib=sasref;
   value $ cntry 'FR' = 'France'
                 'DE' = 'Germany'
                 'UK' = 'United-Kingdom';
   value ny      0    = 'Non'
                 1    = 'Yes';
run;

2. Lister les formats présents dans un catalogue avec PROC CATALOG

La procédure PROC CATALOG a la capacité de lister le nom des formats d’un format catalog.

proc catalog c=sasref.formats;
   contents stat;
run;

3. L’option FMTLIB de PROC FORMAT pour voir le contenu des formats

Pour voir les différentes valeurs prises de tous les formats de SASREF (catalogue FORMATS), l’option FMTLIB est joutée dans une procédure PROC FORMAT.

  • Pour ne sélectionner que certains formats en particulier, l’instruction SELECT est à disposition.
  • Inversement, l’instruction EXCLUDE permet d’ôter certains formats de l’affichage.

Dans les deux cas, il faudra préciser si les formats concernées sont numérique ou alphanumérique en ajoutant le symbole dollar ($) devant le nom de chaque format alphanumérique.

proc format library=sasref.formats fmtlib;
   *select $cntry ny;
   *exclude $cntry ny;
run;

Lectures complémentaires :

h1

La 3ème méthode qui fait la différence pour sélectionner en se basant sur une second data set

février 16, 2009

Suite au précieux conseil d’Arnaud Gaborit (A.I.D.), je vous propose de compléter l’article du 26 janvier dernier intitulé « Deux méthodes pour sélectionner en se basant sur une second data set« . Les personnes travaillant sur de grosses bases de données apprécieront.

Lectures complémentaires :

1. Rappel : les données et le résultat attendu

D’un côté, on a un data set contenant la liste des effets secondaires observés. Il y a une ligne par effet secondaire. Seuls les patients ayant eu un effet secondaire sont enregistrés.

data ae_multi;
   input patref ae_id;
   datalines;
1 1
1 2
2 1
4 1
4 2
5 1
;
run;

De l’autre côté, on a la liste des patients correspondant à la population qui nous intéresse. Une ligne correspond à un patient.

data pat_uniq;
   input patref;
   datalines;
2
3
4
;
run;

Le but est de garder uniquement les effets secondaires des patients présents dans notre population.

patref ae_id

   2     1
   4     1
   4     2

2. Créer un format à partir d’un data set

Dans une premier temps, un format numérique (TYPE=N est la valeur par défaut) appelé PATREF (FMTNAME=’PATREF’) est créé à partir du data set sur les patients. La variable PATREF sert de valeur START. Pour toutes les valeurs de START, on applique le même libellé (LABEL=’retenir’).

Si le data set contient plusieurs variables (ce qui sera généralement le case), l’option KEEP servira à limiter la sélection à la variable servant à définir START.

data pat (keep=start fmtname label);
   set pat_uniq (rename=(patref=start)); *(keep=patref);
   fmtname='PATREF';
   label='retenir';
run;

Si plusieurs valeurs identiques pour la variable START sont présentes dans votre fichier, vous devrez supprimer les doublons. L’étape suivante ne marchera pas sinon.

*proc sort data=pat nodupkey;
*by start;
*run;

Le data set est à présent convertit en format au moyen de l’option CNTLIN. Ce format est sauvegardé par défaut dans le catalogue FORMATS de la bibliothèque WORK.

proc format cntlin=pat;
run;

3. Sélectionner les observations de son choix

Ici, l’option WHERE est privilégiée à l’instruction IF pour des raisons de performance.

Ensuite, grâce à la fonction PUT, les valeurs de PATREF sont converties en RETENIR si elles sont présentes dans le data set PAT_UNIQ. Seules ces valeurs RETENIR sont gardées.

data ae_multi;
   set ae_multi (where=(put(patref,patref.) = 'retenir'));
run;

Voir le résultat :

proc print data=ae_multi;
run;
h1

Proc Format : 7 points forts de VALUE

février 14, 2008

Dans un article précédent, nous avons vu les deux notations pour écrire de nouveaux formats : via un jeu de données, via l’instruction VALUE de PROC format. A présent je vous propose des précisions sur l’instruction VALUE, afin de pouvoir mettre le même texte sur plusieurs valeurs.

1. Virgules pour des données fixes : énumérer les valeurs les unes après les autres en les séparant par des virgules : -1,-2, 1, 2.

proc format;
   value in_ex
      -1,-2,1,2 = 'Inclus'
      0         = 'Exclus';
run;

2. Trait d’union pour les intervalles : fournir un intervalle entre deux valeurs fixes, bornes incluses, avec un trait d’union : 0-1 pour les valeurs entre zéro et un, ou encore -5 – -1 pour les valeurs négatives entre moins cinq et moins un.

proc format;
   value intrvl
      0-1    = 'Entre 0 et 1, bornes inclus'
   value neg_pos
      -5--1  = 'Valeurs négatives'
      0      = 'Zéro'
      1-5    = 'Valeurs positives';
run;

3. Signe inférieur pour exclure les bornes d’un intervalle : fournir un intervalle entre deux valeurs fixes et exclure les bornes en utilisant le signe inférieur : 0 < – < 1.

proc format;
   value intrvl
      0 <- <1 = 'Entre 0 et 1, bornes exclus';
run;

4. LOW pour définir la borne inférieure d’un intervalle : prendre toutes les valeurs en dessous d’une valeur donnée grâce au mot-clé low : low-60.

proc format;
   value inf_lim
      low-0    = 'Inférieur ou égal à zéro';
run;

5. HIGH pour définir la borne supérieure d’un intervalle : prendre toutes les valeurs en dessus d’une valeur donnée avec high : 0-high

proc format;
   value sup_lim
      0-high    = 'Supérieur ou égal à zéro';
run;

6. OTHER pour lister les valeurs restantes : enfin il vous reste le mot-clé other pour les données restantes.

proc format;
   value autre
      0-1   = 'Negative values'
      other = 'Pas dans l'intervalle';
run;

7. Définir un format à partir d’un autre format : le mot-clé OTHER en combinaison avec les crochets [] permet de créer un format à partir d’un format existant. Notez que vous pouvez lister autant d’instructions value que vous le souhaitiez dans une seule procédure format.

proc format;
   value ny
   0     ='NO'
   1     ='YES;
   value nybis
   .     = 'MISSING'
   .A    = 'Not Applicable'
   other = [ny.];
 run;
h1

2 méthodes pour de nouveaux formats

février 13, 2008

Deux méthodes sont disponibles pour créer des formats sous SAS :

  • entrée les données manuellement dans une instruction value d’une part ;
  • réutiliser les données stockées dans un SAS data set.

Chacune des méthodes à un champ d’action privilégié.

  • On préférera l’entrée manuelle pour un format ayant peu de valeurs et qui ne soit pas un standard pour plusieurs projets.
  • Dans le cas contraire, de nombreuses valeurs ou des valeurs récurrentes entre études, l’utilisation d’un data set sera plus appropriée.

Dans les deux cas, la procédure format sert. Le nom du format ne doit pas déjà exister parmi les formats actifs. Chaque valeur à convertir ne doit apparaître qu’une fois. Quatre informations sont requises avec les deux méthodes :

  1. Le nom du format
  2. La valeur d’origine
  3. La nouvelle valeur
  4. Le type de données pouvant recevoir ce format (caractère ou numérique).

Deux précisions :

  • Par défaut le type est numérique. Il n’est donc pas obligatoire de le préciser. Seul un changement explicite peut le modifier.
  • Le nom du format ne doit pas avoir plus de 32 caractères, voir 31 pour les formats destinées aux variables caractères, l’espace restant étant réservé au symbole dollar. Sous SAS 8.2, il ne fallait pas plus de 8 et 7 caractères respectivement. De plus, le format ne doit pas se terminer par un chiffre.

1. Le cas du data set transformé en format : en créant un data set avec ces 4 informations, vous pouvez créer un format. Ces variables seront toutes caractères et s’appelleront respectivement :

  1. FMTNAME pour le nom du format,
  2. START pour la valeur d’origine (la valeur stockée dans SAS),
  3. LABEL pour la nouvelle valeur (celle qui sera affichée)
  4. TYPE avec C pour un format s’appliquant à des données caractères et N pour un format numérique.

Le type n’aura besoin d’être précisé que dans le cas de données caractères. Sans précision de votre part, SAS choisira TYPE=N.

Dans l’instruction PROC FORMAT, le mot CNTLIN= introduit le nom du jeu de données.

proc format cntlin=grp;
run;

2. Le cas des données saisies manuellement : après le mot-clé on précisera

  • le type du format via le symbole dollar ($) si caractère seulement
  • le nom du format

Puis sont listées chacune des valeurs d’origine suivies de la nouvelle valeur entre guillemets. Chaque rapprochement est présenté sous forme d’égalité. Les valeurs d’origines seront entre guillemets si elles sont caractères.

Conseil : par soucis de lisibilité, les différentes valeurs du format seront mises l’une en dessous de l’autre.

proc format;
   value grp 10 = ‘Per Protocol’
             11 = ‘Modified Per Protocol’
             20 = ‘Intent-to-Treat’
             21 = ‘Modified Intent-to-Treat’;
   value $ grp ‘PP’   = ‘Per Protocol’
               ‘mPP’  = ‘Modified Per Protocol’
               ‘ITT’  = ‘Intent-to-Treat’
               ‘mITT’ = ‘Modified Intent-to-Treat’;
run;

Pour plus d’informations sur la notation de l’instruction VALUE, reportez vous à l’article intitulé « Proc Format : 7 points forts de VALUE« .

Créer des formats permanents via l’option LIBRARY : jusqu’à présent les formats ne seront valables que le temps de l’exécution de votre programme (batch mode) ou le temps de la session SAS (interactive mode). Pour les sauvegarder sur votre disque dur, et donc de manière permanente, précisez l’endroit via un nom de bibliothèque en tant qu’option LIB= de l’instruction proc format. Par défaut, il s’agit de la bibliothèque temporaire WORK. L’appel d’un format, qu’il soit temporaire ou permanent, dépasse le sujet d’aujourd’hui.

libname sasref ‘C:/sasref’;

proc format lib=sasref;
   *…;
run;

Les formats du bibliothèque donnée sont regroupés dans un fichier nommé CATALOG SAS. Le nom de ce catalogue s’appelle FORMATS à moins qu’un autre nom soit donné dans l’option LIB=. Par exemple, lib=sasref.std créera un fichier et plus particulière un catalogue pour les formats nommé STD et ce catalogue sera sauvegardé dans la bibliothèque LIB.