Archive for the ‘Attributs’ Category

h1

Protégé : Entrer une date avec l’informat ANYDTDTE

juin 6, 2010

Cet article est protégé par un mot de passe. Pour le lire, veuillez saisir votre mot de passe ci-dessous :

Publicités
h1

Protégé : Valeur formatée utilisée pour définir la macro variable. Attention !

janvier 11, 2010

Cet article est protégé par un mot de passe. Pour le lire, veuillez saisir votre mot de passe ci-dessous :

h1

Ces caractères hexadécimaux non visibles au 1er coup d’oeil

novembre 23, 2009

Lors de l’importation de données d’un fichier Excel, il est fréquent d’importer au passage des caractères spéciaux non visible au premier coup d’œil. Par exemple, on peut trouver des blancs représentés en valeur hexadécimale par le code 20. Certains de ses caractères ressemblent à des blancs mais n’en sont pas. Ils ne disparaîtront donc pas avec une fonction COMPRESS sans troisième paramètre. La valeur hexadécimale de ces caractères est par contre une valeur lisible.

Voici comment afficher votre texte en valeur hexadécimale et ce dans la log ?

1. Illustration du problème

Dans cet exemple, une variable WEBISTE de longueur 25 est présente dans la table HEXFMT. Cette variable contient une observation http://www.sasreference.fr entourée d’un blanc avant et d’un blanc après. Cette valeur est créée ici au moyen de la fonction CAT.

Pour voir la différence entre la valeur de WEBSITE avec et sans un simple COMPRESS, une seconde variable EQUAL indique la valeur YES si les deux résultats sont identiques, NO sinon.

data hexfmt;
length website $25 equal $3;
website=cat(’20’x,‘www.sasreference.fr’,’20’x);
if website=compress(website) then equal=‘Yes’;
else equal=‘No’;
run;

proc print data=hexfmt;
run;

2. Voir les caractères hexadécimaux avec le format HEX

Ici, je vous propose de voir la valeur de la variable WEBSITE au moyen de l’instruction PUT. Il est possible de voir la valeur formatée plutôt que la valeur brute en faisant suivre la variable d’un format. Le format ici sera HEXw. où w est un nombre idéalement de la longueur de la variable fois deux. En effet, les caractères hexadécimaux sont toujours de longueur deux. Si votre texte est de longueur 25, il faudra 50 caractères pour l’afficher en valeur hexadécimale.

data hexfmt;
length website $25;
website=cat(’20’x,‘www.sasreference.fr’,’20’x);
put website= hex50.;
run;

proc print data=hexfmt;
run;

Dans le résultat qui suit, on voit donc le premier caractère de l’observation de WEBSITE a pour code 20. Le second caractère est la lettre W représentée par le code 77, et ainsi de suite.

Lecture complémentaire

h1

Changer la longueur d’une variable avec PROC SQL (instruction ALTER)

avril 27, 2009

En SAS, l’instruction ALTER de PROC SQL a la capacité de changer le libellé d’un data set, modifier le format/informat ou le libellé d’une variable. Mais son principale intérêt réside dans sa capacité à modifier la longueur d’une variable caractère sans changer la position de la variable dans le data set.

1. Comparaison avec deux autres méthodes : PROC DATASETS et l’étape DATA

Alors que PROC DATASETS permet de modifier le format/informat, le libellé d’une variable ou de renommer une variable, il ne permet pas de changer la longueur d’une variable.

Avec une simple étape data, il est possible de modifier la longueur de la variable en ajoutant une instruction LENGTH avant de lire les donnees avec un SET/MERGE… Mais la séquence d’affichage des variables n’est plus respecté. Il faut soit avoir sauvegardé au préalable l’ordre d’affichage (ou l’entrer manuellement, bof !), soit utiliser l’instruction ALTER de PROC SQL…

2. Quelques données pour tester soi-même

* Create two formats SEX and GENDER;
proc format;
value $ sex ‘M’=‘Male’
‘F’=‘Female’;
value $ gender ‘M’=‘Homme’
‘F’=‘Femme’;
run;

*Create a data set named CLASS ;
*based on the SASHELP.CLASS data set ;
*adding the SEX format to the SEX variable;

data class;
set sashelp.class;
format sex sex.;
run;

3. L’instruction ALTER pour modifier la longueur d’une variable

Dans l’instruction ALTER de PROC SQL, le mot-clé MODIFY introduit deux variables SEX et NAME à modifier.

proc sql;
alter table class (label=‘Changes with PROC SQL and ALTER’)
modify sex format=$gender.,
name char(20) label=‘Student Name’;
quit;

Changement le plus intéressant :

  • La longueur de la variable caractère NAME est à l’origine 8. Elle est remplacée par 20.

Quelques changements secondaires :

  • Libellé de data set : Dans l’exemple ci-dessus le data set CLASS a pour libellé ‘Changes with PROC SQL and ALTER’.
  • format de variable : Le format de la variable SEX est à l’origine $SEX. Il est ici remplacé par le format $GENDER.
  • Libellé de variabel : Le libellé de la variable NAME est ajouté. Il s’agit de ‘Student Name’.

A retenir :

  1. Seules les variables caractères peuvent avoir leur longueur changées au moyen de l’instruction ALTER.
  2. Cette instruction permet certe de modifier le format d’un data set. Néanmoins, elle ne permet pas de supprimer tous les formats d’un data set.

Lectures complementaires :

SAS Online DOC

  • The SQL Procedure
h1

Parler français : représenter un nombre 100 987,24

avril 18, 2009

Selon le pays les nombres sont présentés de manière différente. COMMA et COMMAX sont deux formats utilisés par SAS pour représentés les nombres mais ne s’applique pas au cas français. Vous verrez donc comment créer le format qui vous convient avec l’instruction PICTURE de PROC FORMAT.

1. La différence français/anglais

Les francophones présentent les nombres différemment des anglophones sur deux points.

  • Les milliers : Les chiffres des milliers sont séparés par un espace alors que les américains utilisent la virgule
  • Les décimales : Les décimales sont séparées par une virgule en français contre un point en anglais

2. La représentation par défaut de SAS

Par défaut, les nombres sous SAS sont simplifiés comme sur une calculatrice.

  • Les milliers : le seul séparateur est celui des décimales
  • Les décimales : le point fait office de séparateur pour les décimales

Pour une présentation à l’anglais, il faudra appliquer le format COMMA. Il n’existe à ma connaissance qu’une semi version française : le format COMMAX. En effet celui-ci utilise bien la virgule pour séparer les entiers des décimales mais il utilise aussi le point et non le blanc pour séparer les milliers. On préférera donc créer un format avec l’instruction PICTURE.

2. Un exemple

Créer un format : dans le cas présent, les nombres seont affichés jusqu’à 999999,99,  en ajoutant un espace entre les milliers et un virgule pour les décimales.

  • L’usage du 0 : il n’y aura pas de zéro affiché à l’avant du nombre si celui-ci est plus petit que 100000.
  • L’usage du 9 : Les décimales s’afficheront toujours avec deux chiffres après la virgules même si le second chiffre est un zéro.

proc format;
picture commafr other=’000 000,99′;
run;

Appliquer les formats COMMA,  COMMAX et format personnel

Dans cette étape data trois variables sont créées chacune avec une observation.

Dans les trois cas, un format avec une extension 9.2 est ajouté de manière permanente. On indique à SAS que le nombre ne dépassera normalement pas 9 caractères dont 2 pour les décimales.

data fr_en;
format
eg_english comma9.2
eg_semifrench commax9.2
eg_french commafr9.2;
eg_english=100987.24;
eg_semi_french=100987.24;
eg_french=100987.24;
run;

Voir le résultat

eg_english   eg_semifrench   eg_french

100,987.24     100.987,24    100 987,24

La variable EG_ENGLISH (exemple, anglais) reçoit, quant à elle, un format COMMA9.2 pour un affichage à l’américaine/l’anglais.

La variable EG_SEMIFRENCH (exemple,respectant partiellement la syntaxe française) reçoit u nformat COMMAX9.2.

La variable EG_FRENCH (exemple, français) reçoit le format créé manuellement COMMAFR9.2 pour un affichage avec un blanc entre chaque groupe de trois chiffres parmi dans la partie entière et deux chiffres pour la partie décimale.

Lectures complémentaires

SAS Online Doc

  • COMMAw.d Format
  • COMMAXw.d Format
  • PICTURE Statement
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 :