Archive for the ‘Data Presentation’ Category

h1

Passer par un format pour changer les couleurs d’une cellule dans un tableau (PROC REPORT et ODS)

septembre 17, 2009

Dans de précédents articles, je vous ai parlé de la possibilité de changer le style des cellules d’un tableau. Je vous invite ici à découvrir comment un format peut vous éviter de passer par un COMPUTE/ENDCOMP de PROC REPORT pour changer le style selon les valeurs prises par une variable donnée.

1. Créer les formats pour l’exemple

Pour mettre en gras (bold) ou non, il faut passer par le style FONT_WEIGHT. Dans notre exemple, ce style prendra la valeur BOLD quand la variable AGE aura des valeurs entre 14 et 16 ans et un LIGHT pour un style non gras. Vous avez aussi à disposition la valeur MEDIUM pour un ton légèrement plus prononcé.

Pour changer la couleur du texte, c’est le style FOREGROUND qu’il faut utiliser. Dans notre cas, le texte aura la couleur bleu si la variable AGE est comprise entre 14 et 16 ans inclus.

proc format;
value age_font 1113=‘light’
1416=‘bold’;
value age_color 1416=‘blue’;
run;

2. Utiliser le format dans PROC REPORT

Pour changer le style d’une colonne en particulier, il suffit d’ajouter style(column)=[…] dans l’instruction DEFINE.

Ici au lieu de donner une couleur à toutes les valeurs avec FOREGROUND= suivi du nom de la couleur, on donne le format AGE_COLOR. qui prendra la valeur BLUE pour les AGE des 14-16 ans.

De manière similaire, l’épaisseur du trait est changée avec FONT_WEIGHT et le format AGE_FONT. défini auparavant.

ods listing close;
ods pdf file=‘C:/sasref/zebre.pdf’;
proc report data=sashelp.class nowd;
columns name age;
define name / display ;
define age / display style(column)=[font_weight=age_font. foreground=age_color.];
run;
ods pdf close;
ods listing;

3. Voir le résultat

color_format

Lectures complémentaires

Des questions ? Envoyez votre message sur le forum du blog.

Publicités
h1

Choisir la police de caractères pour des graphiques SAS

juin 24, 2009

La liste des polices de caractères pour construire des graphiques sous SAS a longtemps été très limitée. Depuis SAS a racheté de nouvelles polices se rapprochant des classiques comme Arial. Mais pour l’instant, voici les styles disponibles depuis de nombreuses années. La mise en image de ces polices devrait vous aider à faire un choix plus rapide.

1. Trois fonts avec ses variantes

Ajoutez aux mots CENT, SWISS, ZAPF les lettres

  • l pour une version comprimée,
  • x pour une version étendue/allongée,
  • b (bold) pour mettre en gras,
  • i (italic) pour mettre en italic,
  • e (empty) pour avoir un un font blanc.

font_01

font_02

font_03

2. Quelques autres styles

A ces trois premières polices s’ajoutent:

  • BRUSH,
  • SIMPLEX/DUPLEX/COMPLEX/TRIPLEX,
  • SCRIPT/CSCRIPT
  • GERMAN/GITALIC/OLDENG
  • ITALIC/TITALIC

font_04

h1

Mettre à jour ses TAGSETS pour EXCELXP

juin 4, 2009

Créer un fichier XML ouvrable avec Excel est possible avec l’ODS TAGSETS.EXCELXP de SAS. Il est important de disposer des dernière mises à jour des tagsets de EXCELXP pour utiliser son potentiel. Quelle version utilisez-vous actuellement ? Comment faire la mise à jour ?

1. Quelle version de TAGSETS.EXCELXP utilisez-vous ?

Pour connaître la version de TAGSETS.EXCELXP que vous utilisez, consultez la log après avoir exécuté ce PROC TEMPLATE.

proc template;
source tagsets.excelxp;
run;

2.  Comment faire les mises à jour ?

Allez sur la page http://support.sas.com/rnd/base/ods/odsmarkup/ pour trouver le code à exécuter dans SAS.

Par exemple, pour la mise à jour 1.86 (15 avril 2008), copiez dans votre éditeur SAS le code http://support.sas.com/rnd/base/ods/odsmarkup/excltags.tpl et exécutez-le.

En soumettant une nouvelle fois la procédure PROC TEMPLATE, la log nous indique que la version 1.86 est celle actuellement en place.

tagsets_version_v1_86

h1

En-tête et pied de page avec TAGSETS.EXCELXP

juin 1, 2009

La syntaxe de l’ODS TAGSETS.EXCELXP permet de créer sous SAS un fichier lisible par Excel. Pour vous familiariser avec cette syntaxe, je vous invite à lire les articles : Mes premiers pas avec ODS TAGSETS.EXCELXP, partie 1, partie 2 et partie 3.

Deux options servent à ajouter une en-tête et un pied de page au fichier à imprimer : print_header et print_footer.

Sous Excel 2003, cela correspond aux écrans suivants :

excelp_header

excelp_footer

1. La syntaxe de base

Ici le fichier HEADER_FOOTER.xls est créé au moyen de l’instruction ODS TAGSETS.EXCELXP. La feuille de calcul s’appelle « Exemple ». Les options PRINT_HEADER et PRINT_FOOTER sont encore à définir.

Le fichier contient les informations de la table CLASS contenue dans la bibliothèque SASHELP.

ods listing close;
ods tagsets.excelxp file=‘c:/sasref/header_footer.xls’
options(sheet_name=‘Exemple’
print_header=‘à définir’
print_footer=‘à définir’);
proc print data=sashelp.class;
run;
ods tagsets.excelxp close;
ods listing;

ODS LISTING : L’instruction ODS LISTING CLOSE, en début de programme, stoppe la création d’une sortie dans la fenêtre OUTPUT. L’instruction ODS LISTING réactive la destination LISTING.

Comme la syntaxe de PRINT_HEADER est la même que celle de PRINT_FOOTER, nous nous concentrons ici sur un seul d’entre eux dans les explications qui suivent : PRINT_FOOTER.

2. Avec la version 2003 d’Excel

Alignement : par défaut le texte est centré.

  • &L : Aligner à gauche (left)
  • &C : Centrer (center)
  • &R : Aligner à droite (right)

Passage à la ligne

  • & #13; : Passer à la ligne (ne pas mettre d’espace entre & et #)

Le nom du fichier et de la feuille de calcul

  • &Z : chemin d’accès au fichier
  • &F : nom du fichier
  • &A : nom de la feuille de calcul

Date et heure

  • &D : date
  • &T : heure

Police de styles

  • &"ma police" mon texte :  introduit la police (Century Gothic, gras, italique ici)
  • &12 :  introduit une taille du texte (12pt ici)
  • & : clos la zone concernée par la police de styles

Le numéro de page

  • &P : numéro de la page
  • &N : nombre total de pages

Exemple : dans l’exemple qui suit, deux lignes de texte à gauche, une ligne au milieu et une à droite.

  • A gauche se trouve le chemin complet d’accès au fichier ainsi que le nom de la feuille de calcul  (C:/sasref/header_footer.xls, Exemple)
  • Toujours à gauche, sur la deuxième ligne est ajouté la date et l’heure
  • Au centre, est noté http://www.sasreference.fr en gras, italique avec un style Century Gothic de taille 12.
  • A droite, est ajouté le numéro de la page et le nombre total de pages (1/1).

&L&Z&F.xls, &A
& #13;&D&T
&C&"Century Gothic,Bold Italic"&12www.sasreference.fr&
&R&P/&N

3. Avec la version d’Excel 2007

Alignement

  • &L : aligner à gauche
  • &R : aligner à droite
  • Le texte à centrer est mis en premier car le texte est centré par défaut.

Passage à la ligne

  • & #13; (comme avec Excel 2003)

Le nom du fichier et de la feuille de calcul

  • &P : chemin d’accès au fichier
  • &N : nom du fichier
  • &B : nom de la feuille de calcul

Date et heure

  • &D : date
  • &U<7span> : heure

Police de style (comme avec Excel 2003)

  • &amp;&quot;….&quot; :  introduit la police (Century Gothic, gras, italique ici)
  • &amp;12 :  introduit une taille du texte (12pt ici)
  • &amp; : clos la zone concernée

Vous pouvez aussi utiliser simplement &F pour mettre un texte en gras.

Le numéro de page

  • &S : numéro de la page
  • &A : nombre total de pages

Exemple :

  • &Fwww.sasreference.fr
  • &L&P&N.xls, &B
  • & #13;&D &U
  • &R&S/&A

Conclusion

La syntaxe reste difficilement mémorisable. Mais une fois celle-ci créée, il est possible de faire des copier/coller sans soucis particulier.

Pour chaque nouvelle feuille de calcul, l’option doit être définie. Ici, aucune proposition n’est faite pour définir de manière globale les en-têtes et pieds de page.

La syntaxe pour ajouter une image n’est pas donnée ici.

Le plus gros problème reste que la syntaxe varie selon la version d’Excel utilisée comme le confirme la note suivante de l’aide en ligne du tagset ExcelXP pour PRINT_HEADER ne donne pas toujours la bonne syntaxe.

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

h1

Les anniversaires, cela se fête avec SAS

avril 2, 2009

Aujourd’hui étant mon anniversaire, je fais la paresseuse et vous communique un petit fichier SAS, reçu ce jour (merci Alex), à faire tourner sous Windows, écouteurs en place, pour la prochaine fois qu’un collègue ou pote qui connaît SAS soufflera ses bougies. Amusez-vous bien !

%let pc=1;

%macro sasreference_fr(note,octave,length);

select(&note.);
when (‘A’) call sound (55*(2**&octave.),&length.*160*&pc.);
when (‘A#’) call sound (58*(2**&octave.),&length.*160*&pc.);
when (‘Bb’) call sound (58*(2**&octave.),&length.*160*&pc.);
when (‘B’) call sound (62*(2**&octave.),&length.*160*&pc.);
when (‘C’) call sound (65*(2**&octave.),&length.*160*&pc.);
when (‘C#’) call sound (69*(2**&octave.),&length.*160*&pc.);
when (‘Db’) call sound (69*(2**&octave.),&length.*160*&pc.);
when (‘D’) call sound (73.5*(2**&octave.),&length.*160*&pc.);
when (‘D#’) call sound (73.5*(2**&octave.),&length.*160*&pc.);
when (‘Eb’) call sound (78*(2**&octave.),&length.*160*&pc.);
when (‘E’) call sound (82*(2**&octave.),&length.*160*&pc.);
when (‘F’) call sound (87*(2**&octave.),&length.*160*&pc.);
when (‘F#’) call sound (92.5*(2**&octave.),&length.*160*&pc.);
when (‘Gb’) call sound (92.5*(2**&octave.),&length.*160*&pc.);
when (‘G’) call sound (98*(2**&octave.),&length.*160*&pc.);
when (‘G#’) call sound (104*(2**&octave.),&length.*160*&pc.);
when (‘Ab’) call sound (104*(2**&octave.),&length.*160*&pc.);
when (‘R’) call sleep((&length./3)*&pc.,1);
otherwise;
end;
%mend sasreference_fr;

data _null_;
%sasreference_fr(‘C’,3,1);
%sasreference_fr(‘C’,3,1);
%sasreference_fr(‘D’,3,2);
%sasreference_fr(‘C’,3,2);
%sasreference_fr(‘F’,3,2);
%sasreference_fr(‘E’,3,4);

%sasreference_fr(‘R’,3,2);

%sasreference_fr(‘C’,3,1);
%sasreference_fr(‘C’,3,1);
%sasreference_fr(‘D’,3,2);
%sasreference_fr(‘C’,3,2);
%sasreference_fr(‘G’,3,2);
%sasreference_fr(‘F’,3,4);

%sasreference_fr(‘R’,3,2);

%sasreference_fr(‘C’,3,1);
%sasreference_fr(‘C’,3,1);
%sasreference_fr(‘C’,4,2);
%sasreference_fr(‘A’,4,2);
%sasreference_fr(‘F’,3,1);
%sasreference_fr(‘F’,3,1);
%sasreference_fr(‘E’,3,2);
%sasreference_fr(‘D’,3,4);

%sasreference_fr(‘R’,3,2);

%sasreference_fr(‘Bb’,4,1);
%sasreference_fr(‘Bb’,4,1);
%sasreference_fr(‘A’,4,2);
%sasreference_fr(‘F’,3,2);
%sasreference_fr(‘G’,3,2);
%sasreference_fr(‘F’,3,4);
run;

Pour les curieux, je vous invite à consulter les programmes des chansons suivantes suggérées sur le forum de developpez.com :

Les plus téméraires s’intéresserons à la publication « Making Music in SAS« . Vos créations pourront être publiées sur le blog.

A lire aussi www.sasreference.fr :

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 :