Posts Tagged ‘picture’

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

Afficher 7h30 du matin sous la forme 07:30

octobre 24, 2008

Les heures, minutes et secondes sont enregistrables sous SAS sous la forme d’un seul chiffre exprimant cette durée en seconde. On parle d’heure SAS (SAS time). A l’affichage, il y a le format TIME5. pour représenter les heures et les minutes uniquement à partir de 5 caractères au maximum. Mais ce format omet le zéro de début pour les heures à un chiffre comme 9h00. Voici donc dans cet article plusieurs solutions pour contourner le problème allant d’un format avec PICTURE, en passant par les fonctions RIGHT et TRANWORD.

1. Le data set servant d’exemple

Pour présenter les variantes, un data set NEWTIME est créé. Il contient une variable SEC avec 4 valeurs exprimant le temps en secondes et une valeur manquante.

  • 7h30 : prenons 7h30m00s ou 27000 secondes (7x60x60*60) pour exprimer 7h30 du matin
  • 15h : prenons maintenant 15h00m00s ou 54000 secondes pour obtenir 15h
  • 14h59 : pour désigner 14h59, des valeurs entre 14h59m00s (53940 sec) et 14h59m59s (53999 sec) sont possibles. Dans l’exemple, ces deux extrêmités sont choisies.
data newtime;
   input sec;
   datalines;
27000
54000
53940
53999
.
;
run;

2. Un format créé avec l’instruction PICTURE

La solution la plus flexible est probablement de créer un nouveau format. De cette manière, la valeur d’origine en seconde est encore disponible. Ce format peut aussi servir à convertir une variable caractère en heure SAS.

L’instruction PICTURE : Le format SASREF est construit à partir de l’instruction PICTURE dans une procédure PROC FORMAT. Le symbole %H réfère à des heures allant de 0h à 23h. Le symbole %M désigne des minutes allant de 0min à 59min. Le zéro intercalé ajoutera un zéro pour les valeurs inférieures à 10.

Documentation : Vous pouvez consulter la documentation en ligne pour connaître tous les symbole comme %M, %H disponible avec l’instruction PICTURE : PICTURE Statement.

proc format;
   picture sasref other='%0H:%0M' (datatype=time);
run;

Dans cet exemple, une variable caractère TIME_C est créée à partir de la fonction PUT et du format SASREF affichant 5 caractères.

Vous pouvez aussi exécuter l’instruction FORMAT pour appliquer le format SASREF5. à la variable SEC.

data newtime;
   set newtime;
   time_c=put(sec,sasref5.);
   *format sec sasref5.;
run;

3. Ajouter une condition pour traiter les valeurs manquantes

Une seconde variable TIME_C2 applique une contrainte particulière pour les valeurs manquantes. En effet, le format SASREF renvoie le mot ERROR si la valeur d’origine est manquante.

data newtime;
   set newtime;
   if not missing (sec) then time_c2=put(t1,sasref5.);
run;

4. Passer d’une valeur texte 7:30 à une valeur 07:30 avec les fonctions RIGHT et TRANWRD

Une troisième variable TIME_C3 est construite en deux étapes. Voyons donc l’interprétation faite pour une heure comme 7:30.

  • Fonction PUT et format TIME5 pour créer une valeur 7:30 : Tout d’abord, la fonction PUT combinée au format TIME5. crée une variable caractère de la forme 7:30 avec une longueur de 5. Par défaut, le texte est aligné à gauche. Le blanc est donc situé en 5ème position.
  • Fonctions RIGHT et TRANWORD pour ajouter un blanc en tête : Ensuite, une variable caractère 7:30 est convertie en 07:30, etc. Dans un premier temps, la fonction RIGHT aligne le texte à droite. Le blanc est en première position. Dans un second temps, la fonction TRANWRD remplace le blanc par un zéro.
data newtime;
   set newtime;
   if not missing (sec) 
   then time_c3=tranwrd(right(put(sec,time5.),' ','0');
run;

LA documentation en ligne propose une page sur les fonctions TRANWORD et RIGHT.

  • TRANWORD Function
  • RIGHT Function

Vous pouvez aussi consultez l’article sur la fonction PUT :

5. Aperçu des données

Voici un aperçu des différentes variables après :

sec     time_c time_c2 time_c3

27000   07:30   07:30   07:30
53940   14:59   14:59   14:59
53999   14:59   14:59   14:59
54000   15:00   15:00   15:00
    .   ERROR
h1

Arrondir ses chiffres avant d’appliquer un format

mars 31, 2008

Gérer l’affichage des pourcentages et des décimales avec SAS : tel est la thématique de cet article. Les formats permettent de présenter les données d’une manière un peu plus élégante et parlante. On peut ainsi n’afficher que les deux derniers chiffres après la virgule, ajouter un symbole pourcentage. Mais les formats vont couper le chiffre plutôt que l’arrondir si PICTURE avec l’option ROUND n’est pas utilisé.

1. Arrondir un nombre avec la fonction ROUND : la fonction ROUND permet d’arrondir les nombres soit à la décimale près soit à l’entier (ou son multiple) près. La fonction dispose de deux paramètres : la variable d’origine et la précision de l’arrondi.

Arrondir à deux chiffres après la virgule :

x1= round (orig,0.01);

Arrondir tous les 10 :

x1= round (orig,10);

Ainsi dans le premier exemple, si ORIG=17.016, l’arrondi au centième (X1) est égal à 17.02. Dans le second cas, l’arrondi (X2) = 20.

2. Créer un PICTURE format : l’instruction PICTURE est très pratique pour afficher les formats dans un rapport.

Dans l’exemple qui suit, le nombre aura au maximum trois chiffres pour la partie entière et deux chiffres pour la partie décimale. Si la partie entière n’a qu’un chiffre, seul celui-ci apparaîtra. Remplacez le 0 des dizaines par un 9 et le chiffre zéro précédera le pourcentage s’il est inférieur à 10 %.

proc format;
picture pct
low-high=‘009.99 %’;
run;

Cette syntaxe dispose de l’option ROUND. C’est très pratique pour à la fois arrondir un chiffre, apposer un symbole % et avoir un zéro pour les chiffres après la virgule quand le chiffre n’est pas entre 1 et 9.

proc format;
picture pct_rd (round)
low-high=‘009.99 %’;
run;

3. Créer un texte avec un pourcentage arrondi à deux décimales : le code qui suit utilise 4 valeurs pour illustrer la différence entre la fonction ROUND, le FORMAT.

orig     fmt     rnd   solution1 solution2

21.200  21.20 %  21.20   21.20 %   21.20 %
6.333   6.33 %   6.33    6.33 %    6.33 %
84.367  84.36 % 84.37   84.37 %   84.37 %
13.362  13.36 %  13.36   13.36 %   13.36 %

data rnd_fmt;
set rnd_fmt;
fmt       = put(orig,pct.);
rnd       = round(orig,0.01);
solution1 = put(round(orig,0.01),pct.);
solution2 = put(orig,pct_rd.);
run;

Annexe :

data rnd_fmt;
input orig;
datalines;
21.200
6.333
84.367
13.362
;
run;