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 26/08/2011, 17h07   #1
Membre du Club
 
Inscription : novembre 2003
Messages : 142
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 142
Points : 58
Points : 58
Par défaut Gestion des bordures dans une proc tabulate

Bonjour,
Voici un petit exemple pour illustrer ma question :
Code :
1
2
3
4
5
proc tabulate DATA=sashelp.class noseps format=8.1;
   class Age Sex;
   var Height;
   TABLE Age=''*Sex='',height='Taille Moyenne'*mean='';
run;
Lorsque je lance ce programme, il n'y a pas de bordures dans les cellules en raison de l'option noseps.

Je souhaiterais créer un document RTF avec :
- un trait horizontal entre chaque changement d'âge, mais pas à l'intérieur d'une même classe d'âge ;
- et un trait vertical entre le sexe et la taille moyenne, mais pas entre l'âge et le sexe.
Ca donnerait quelque chose comme ça :
Code :
1
2
3
4
5
6
7
8
-------------
 11 F  | 51.3
    M  | 57.5    
-------------
 12 F  | 58.1
    M  | 60.4    
-------------
etc.
Il me semble avoir essayer toutes les options de rules ou de frame, sans aboutir à rien de concluant. SAS ne semble pas comprendre mes intentions.
Y a t'il un moyen de faire cela sans utiliser la proc template ?
enicnath est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2011, 09h35   #2
Rédacteur
 
Homme Stéphane
Consultant et formateur SAS et Cognos
Inscription : avril 2009
Messages : 1 791
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Consultant et formateur SAS et Cognos
Secteur : Conseil

Informations forums :
Inscription : avril 2009
Messages : 1 791
Points : 4 012
Points : 4 012
non je pense pas. Il faut que tu regardes la proc TEMPLATE.
__________________
N'oubliez pas de cliquer sur lorsque votre problème est réglé !

Moteur de recherche dans les papiers SAS
datametric est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2011, 17h34   #3
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 823
Points : 2 823
Et encore, c'est pas sûr que la proc Template résolve le problème.
Je verrais plutôt des étapes DATA avec l'objet ODSOUT.
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 00h38   #4
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
hello,
Regardes du coté de %DS2HTM ou bien %TAB2HTM. peut être tu trouvera ton bonheur sur la gestion des bordures .
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 08h49   #5
Membre du Club
 
Inscription : novembre 2003
Messages : 142
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 142
Points : 58
Points : 58
%DS2HTM, %TAB2HTM qu’es aquò ?
enicnath est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 16h01   #6
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 823
Points : 2 823
Petit bout de code pour faire la démo de la solution en étape DATA.
Maintenant j'espère que ton tableau final n'est pas beaucoup plus compliqué que ton exemple sinon ça va demander des centaines de lignes de code !
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
proc SUMMARY DATA=sashelp.class nway ;
   WHERE age < 16 ;
   class Age Sex;
   var Height;
   OUTPUT OUT=work.stats mean=;
run;
ODS LISTING CLOSE ;
ODS RTF FILE="c:\temp\enicnath.doc" ;
DATA _NULL_ ;
  SET work.stats END=fin ;
  BY age sex ;
  IF _N_=1 THEN DO ;
    DECLARE ODSOUT tab () ;
	tab.TABLE_START() ;
	tab.ROW_START() ;
	  tab.FORMAT_CELL(TEXT:" ", COLUMN_SPAN:2) ;
	  tab.FORMAT_CELL(TEXT:"Taille moyenne") ;
	tab.ROW_END() ;
  END ;
  tab.ROW_START() ;
   IF FIRST.age THEN tab.FORMAT_CELL(TEXT:PUT(age, BEST12. -L), ROW_SPAN:2) ;
   tab.FORMAT_CELL(TEXT:sex, INHIBIT:IFC(FIRST.age,"TB"," ")) ;
   tab.FORMAT_CELL(TEXT:PUT(height, 12.2 -R), INHIBIT:IFC(FIRST.age,"TB"," ")) ;
  tab.ROW_END() ;
  IF fin THEN tab.TABLE_END() ;
RUN ;
ODS RTF CLOSE ;
J'ai volontairement simplifié la gestion du nombre de lignes à fusionner pour un même âge en virant AGE=16. Idéalement il faudrait ajouter un peu de SQL pour compter par âge le nombre de lignes à présenter, et brancher cette variable sur l'attribut ROW_SPAN. Beurk.
Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/08/2011, 09h20   #7
Membre du Club
 
Inscription : novembre 2003
Messages : 142
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 142
Points : 58
Points : 58
Ok, merci à tous
C'est vrai Olivier que ça fait beaucoup de lignes pour quelque chose que je croyais au début plutôt simple.
Mais les possibilités de cette technique sont nombreuses, et ça vaut sans doute le coup de s'y investir.
Tant pis pour la proc tabulate !
enicnath est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 10h31   #8
Membre du Club
 
Inscription : novembre 2003
Messages : 142
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 142
Points : 58
Points : 58
Citation:
Envoyé par olivier.decourt Voir le message
IF FIRST.age THEN tab.FORMAT_CELL(TEXT : PUT(age, BEST12. -L), ROW_SPAN:2) ;
tab.FORMAT_CELL(TEXT:sex, INHIBIT:IFC(FIRST.age,"TB"," ")) ;
Il y a deux points que je découvre dans ton code, Olivier :
la fonction INHIBIT,
et le fait que tu met des -L ou des -R dans la fonction put.

Pourrais tu m'en expliquer le sens ?
enicnath est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 10h49   #9
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 823
Points : 2 823
Les -L et -R permettent de gérer l'alignement dans le texte produit par PUT. Respectivement à gauche et à droite.
Pour INHIBIT, il s'agit d'un attribut qui permet de masquer certaines bordures de la cellule : T pour Top (celle du haut), B pour Bottom (celle du bas), X pour toutes, L et R pour gauche et droite.
Tu as la doc complète du langage sur le lien suivant.

Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/09/2011, 10h19   #10
Membre du Club
 
Inscription : novembre 2003
Messages : 142
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 142
Points : 58
Points : 58
Merci Olivier
enicnath est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h15.


 
 
 
 
Partenaires

Hébergement Web