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 02/02/2012, 16h30   #1
Invité de passage
 
Yann gérard
Inscription : juin 2010
Messages : 12
Détails du profil
Informations personnelles :
Nom : Yann gérard

Informations forums :
Inscription : juin 2010
Messages : 12
Points : 2
Points : 2
Par défaut Proc report / rôle across

Bonjour,

Je souhaite créer une sortie, avec la proc report, avec des variables croisées en colonnes. Voici mon code :

Code :
1
2
3
4
5
6
7
proc report DATA=ess split='£'  nowd ;
	COLUMNS lparm TRT, (A B)   ;
	define LPARM /ORDER " "  ;
	define trt / across ;
	define A / display " >1*ULN£and£<=2*ULN££n(%) "  ;
	define B /display " >1*ULN£and£<=2*ULN££n(%) "  ;
run;
Le probleme est que la sortie comporte 2 lignes par paramètre alors qu'elle devrait n'en contenir qu'une!

Merci de votre aide
Sasuser7000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 17h14   #2
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 471
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 471
Points : 2 834
Points : 2 834
C'est à cause des rôles DISPLAY sur A et B. Ca devrait être des ANALYSIS je pense !?
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 17h42   #3
Invité de passage
 
Yann gérard
Inscription : juin 2010
Messages : 12
Détails du profil
Informations personnelles :
Nom : Yann gérard

Informations forums :
Inscription : juin 2010
Messages : 12
Points : 2
Points : 2
Le problème est que les variables A et B ne sont pas numériques. Les valeurs sont de la forme n (%).

J'obtiens le tableau que je souhaite lorsque je veux uniquement le "n" que je calcul directement dans le procédure report. Mais je ne trouve pas le moyen de concaténer dans la même cellule n et %.


Merci de votre aide
Sasuser7000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 21h03   #4
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 471
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 471
Points : 2 834
Points : 2 834
Tes colonnes A et B correspondent déjà chacune à un traitement, non ? Quelle est l'utilité du TRT au-dessus ?
S'il s'agit juste d'indiquer le nom du traitement, ce sera plus simple avec des en-têtes et pas d'ACROSS. Tu peux alors garder un rôle DISPLAY pour LPARM, A et B.
Code :
COLUMNS LPARM ("Traitement" ("A" A) ("B" B)) ;
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 09h19   #5
Invité de passage
 
Yann gérard
Inscription : juin 2010
Messages : 12
Détails du profil
Informations personnelles :
Nom : Yann gérard

Informations forums :
Inscription : juin 2010
Messages : 12
Points : 2
Points : 2
Citation:
Envoyé par olivier.decourt Voir le message
Tes colonnes A et B correspondent déjà chacune à un traitement, non ? Quelle est l'utilité du TRT au-dessus ?
S'il s'agit juste d'indiquer le nom du traitement, ce sera plus simple avec des en-têtes et pas d'ACROSS. Tu peux alors garder un rôle DISPLAY pour LPARM, A et B.
Code :
COLUMNS LPARM ("Traitement" ("A" A) ("B" B)) ;

Non, les colonnes A et B ne correspondent pas aux traitements. Pour chaque traitement, on compte les observations de chaques paramètres selon A et B.
Mon soucis est d'avoir 2 lignes par paramètre dans mon fichier de sortie et non une.

J'ai joint un fichier pour que vous puissiez voir la sortie que j'obtiens.

ps : J'ai remplacé les modalités A et B par Gp1/Gp2
Sasuser7000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 09h25   #6
Invité de passage
 
Yann gérard
Inscription : juin 2010
Messages : 12
Détails du profil
Informations personnelles :
Nom : Yann gérard

Informations forums :
Inscription : juin 2010
Messages : 12
Points : 2
Points : 2
Voici la pièce jointe.
Fichiers attachés
Type de fichier : doc aaa.doc (28,5 Ko, 6 affichages)
Sasuser7000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 14h13   #7
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 471
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 471
Points : 2 834
Points : 2 834
Malheureusement je n'ai pas de solution élégante : ton ACROSS marcherait impeccablement s'il y avait des valeurs numériques simples, mais là avec du texte il patauge.
Alternatives possibles : étape DATA et objet ODSOUT, proc TEMPLATE pour définir un tableau avec des cellules fusionnées, ou un peu de préparation des données en amont d'une proc REPORT. Ma préférence esthétique (au moment aujourd'hui) va à la dernière solution.
J'ai essayé d'automatiser en mettant plusieurs paramètres.
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
28
29
30
31
32
33
34
35
DATA work.test ;
  INFILE DATALINES DLM="/" MISSOVER ;
  INPUT Lparm :$15. A :$20. B :$20. trt $ ; 
DATALINES ;
parameter 1/8 (50.0%)/0 (0 %)/A
parameter 1/7 (43.8%)/1 (6.3%)/B
parameter 2/0 (0 %)/8 (50.0%)/A
parameter 2/1 (6.3%)/7 (43.8%)/B
;
RUN ;
DATA work.test2 ;
  SET work.test ;
  ARRAY col $ A B ;
  DO OVER col ;
	  nom=CATX("_","Trt",trt,VNAME(col)) ;
	  valeur=col ;
	  OUTPUT ;
  END ;
RUN ;
PROC TRANSPOSE DATA=work.test2 OUT=work.test2 ;
  BY Lparm ;
  ID nom ;
  VAR valeur ;
RUN ;
proc report DATA=work.test2 split='£'  nowd ;
	COLUMNS lparm ("Traitement" 
            ("A" (TRT_A_A TRT_A_B))
            ("B" (TRT_B_A TRT_B_B)) 
                   );
	define LPARM / ORDER " "  ;
	define TRT_A_A / display " >1*ULN£and£<=2*ULN££n(%) "  ;
	define TRT_A_B /display " >1*ULN£and£<=2*ULN££n(%) "  ;
	define TRT_B_A / display " >1*ULN£and£<=2*ULN££n(%) "  ;
	define TRT_B_B /display " >1*ULN£and£<=2*ULN££n(%) "  ;
run;
Le résultat est
Citation:
Code :
1
2
3
4
5
6
7
8
9
                                             Traitement
                                      A                                B
                   >1*ULN                >1*ULN                >1*ULN
                  AND                   AND                   AND
                  <=2*ULN               <=2*ULN               <=2*ULN
 
                  n(%)                  n(%)                  n(%)
 parameter 1      8 (50.0%)             0 (0 %)               7 (43.8%)
 parameter 2      0 (0 %)               8 (50.0%)             1 (6.3%)
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 16h57   #8
Invité de passage
 
Yann gérard
Inscription : juin 2010
Messages : 12
Détails du profil
Informations personnelles :
Nom : Yann gérard

Informations forums :
Inscription : juin 2010
Messages : 12
Points : 2
Points : 2
Merci beaucoup pour votre aide, j'essaye et je vous tiens informé du résultat.
Sasuser7000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 16h33   #9
Invité de passage
 
Yann gérard
Inscription : juin 2010
Messages : 12
Détails du profil
Informations personnelles :
Nom : Yann gérard

Informations forums :
Inscription : juin 2010
Messages : 12
Points : 2
Points : 2
La sulution fonctionne.
Merci beaucoup
Sasuser7000 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 14h33.


 
 
 
 
Partenaires

Hébergement Web