Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > ODS et reporting
ODS et reporting Forum d'entraide sur les fonctionnalités de reporting de SAS : gérer les sorties et graphiques de SAS
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/01/2012, 17h52   #1
Futur Membre du Club
 
Asma
Consultante en BI
Inscription : juillet 2010
Messages : 87
Détails du profil
Informations personnelles :
Nom : Asma
Localisation : Maroc

Informations professionnelles :
Activité : Consultante en BI

Informations forums :
Inscription : juillet 2010
Messages : 87
Points : 16
Points : 16
Par défaut Couleurs dans la proc tabulate

Bonjour,

J'ai executé le code suivant sur Entreprise Guide sans erreur:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DATA TEST3;
input ENTITE$ NOMC$ PERIODE$ DATE1 date9. cible ETAT$;
FORMAT DATE1 DATE9.;
cards;
PREPAYE C1 P1 01JAN2011 100 A
PREPAYE C2 P1 02JAN2011 200 B
POSTPAYE C3 P2 01FEB2011 300 A
POSTPAYE C4 P2 01MAR2011 400 A
POST C5 P7 01MAR2011 400 B
run;
proc tabulate DATA=TEST3;
CLASS ENTITE NOMC PERIODE DATE1 /missing;
var cible;
TABLE DATE1=' '*cible=' ', ENTITE=' '*NOMC=' '*PERIODE=' ';
run;
Mais j'ai pas trouvé comment faire pour intégrer des couleurs sur le rapport généré de la procédure tabulate ci-dessous.

Je veux que la variable "cible" soit en rouge si la variable 'ETAT'correspondante est A et en vert si la variable 'ETAT' correspondante est B.

Vous trouverez ci-joint le rapport souhaité:

Merci de m'aider par rapport à ce point.
Images attachées
Type de fichier : jpg rapport.jpg (38,2 Ko, 8 affichages)
dehasmae est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 18h55   #2
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 828
Points : 2 828
Bonjour.
Dans la proc TABULATE on ne peut conditionner la mise en forme que par rapport au contenu de la cellule ou à la ligne/colonne à laquelle appartient la cellule. Pas par rapport à une variable qui ne figure pas dans le tableau. Il faut donc faire rentrer de force cette information d'état dans les données du tableau.
Alors j'ai une solution un peu tortueuse (mais je n'ai pas trouvé mieux pour le moment) qui consiste :
  • à créer une variable CIBLE2 qui vaut CIBLE quand etat=A et la valeur de CIBLE multipliée par -1 quand etat=B
  • à créer un format calculé (PICTURE) pour afficher les valeurs de CIBLE2 sans le signe -
  • à créer un format pour la mise en forme conditionnelle : valeurs négatives, positives et vides reçoivent des couleurs différentes
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
DATA TEST3;
input ENTITE$ NOMC$ PERIODE$ DATE1 date9. cible ETAT$;
cible2 = IFN(etat="A",cible,-1*cible) ;
FORMAT DATE1 DATE9.;
cards;
PREPAYE C1 P1 01JAN2011 100 A
PREPAYE C2 P1 02JAN2011 200 B
POSTPAYE C3 P2 01FEB2011 300 A
POSTPAYE C4 P2 01MAR2011 400 A
POST C5 P7 01MAR2011 400 B
run;
proc format ;
 picture test (ROUND)
   low-0="999" (mult=-1)
	0<-high="999" ;
 value couleur
   low-0 = "red"
   0<-high = "green"
   . = "white"
 ;
run ;
proc tabulate DATA=test3 format=test.;
CLASS ENTITE NOMC PERIODE DATE1 /missing;
  var cible2 ;
TABLE DATE1=' ',cible2=' '*SUM=''* ENTITE=' '*NOMC=' '*PERIODE=' '
	* [style=[background=couleur.]] ;
run;
A noter qu'avec SAS 9.3, on évite le PICTURE un peu foireux en créant un format qui applique la fonction "valeur absolue" à définir dans une proc FCMP.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
proc fcmp outlib=work.test.fonctions ;
  FUNCTION absolu(x) ;
    RETURN(abs(x)) ;
  endsub ;
run ; quit ;
OPTION cmplib=work.test ;
proc format ;
 value test (DEFAULT=4)
   low-high=[absolu()] ;
 value couleur
   low-0 = "red"
   0<-high = "green"
   . = "white"
 ;
run ;
proc tabulate DATA=test3 format=test.;
CLASS ENTITE NOMC PERIODE DATE1 /missing;
  var cible2 ;
TABLE DATE1=' ',cible2=' '*SUM=''* ENTITE=' '*NOMC=' '*PERIODE=' '
    * [style=[background=couleur.]] ;
run;
L'alternative plus générale est de construire le tableau avec une étape DATA et l'objet ODSOUT : là on fait vraiment ce qu'on veut. Mais avec une syntaxe de programmation objet bien crade et pas en production (même en 9.3) donc d'une stabilité non garantie pour le futur.
Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/01/2012, 19h31   #3
Futur Membre du Club
 
Asma
Consultante en BI
Inscription : juillet 2010
Messages : 87
Détails du profil
Informations personnelles :
Nom : Asma
Localisation : Maroc

Informations professionnelles :
Activité : Consultante en BI

Informations forums :
Inscription : juillet 2010
Messages : 87
Points : 16
Points : 16
Je vous remercie énormément pour votre aide j'en suis reconnaissante.
dehasmae est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h28.


 
 
 
 
Partenaires

Hébergement Web