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 28/07/2011, 08h24   #1
Membre éprouvé
 
Homme Rémi Bousquet
responsable adjoint service stat
Inscription : mars 2009
Messages : 334
Détails du profil
Informations personnelles :
Nom : Homme Rémi Bousquet
Âge : 35
Localisation : France

Informations professionnelles :
Activité : responsable adjoint service stat
Secteur : Finance

Informations forums :
Inscription : mars 2009
Messages : 334
Points : 464
Points : 464
Par défaut Récupérer facilement toutes les tables ods output ?

Bonjour,

Aujourd'hui je récupère les résultats clefs de ma proc logistique dans les tables ods comme ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
proc logistic data    = WORK.ACC_DEV  namelen = 32 ;                                  
    class        X_AGE  X_AGE_INT2  X_DE_NBTOTCHA  X_DEC_ENDET_N   X_ANCEMPL          
                 / param = ref ;                                                      
    model QUAL = X_AGE  X_AGE_INT2  X_DE_NBTOTCHA  X_DEC_ENDET_N   X_ANCEMPL          
                 / selection = FORWARD  slentry = 1  STOP = 20 ;                      
    ods output   ModelInfo            = ModelInfo                                     
                 NObs                 = NObs                                          
                 Classlevelinfo       = Classlevelinfo                                
                 FitStatistics        = FitStatistics                                 
                 ModelBuildingSummary = ModelBuildingSummary ;                        
run;
Si bien que je dois lister chacune des tables, ce qui est un peu... laborieux.
Y a t'il un moyen d'indiquer que je veux récupérer toutes les tables ODS avec leurs noms par défaut ?
Rémi
RemiBousquet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 13h42   #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 823
Points : 2 823
Bonjour Rémi.
A défaut d'une syntaxe pratique, je t'ai bricolé une petite macro qui demande juste qu'on ait stocké le résultat de la procédure à mettre en tables dans un document.
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
%MACRO creeTables (doc) ;
  ODS EXCLUDE ALL ;
  ODS OUTPUT properties = work.objets 
            (WHERE=(type="Table")) ;
  PROC DOCUMENT NAME=&doc ;
    LIST / LEVELS=ALL ;
  RUN ; QUIT ;
  DATA _NULL_ ;
    SET work.objets ;
	nomObj = SCAN(path,-2,"#\") ;
	CALL SYMPUTX (CATS("obj",_N_), nomObj, "L") ;
	CALL SYMPUTX (CATS("path",_N_), path, "L") ;
	CALL SYMPUTX ("nbObj", _N_, "L") ;
  RUN ;
  PROC DOCUMENT NAME=&doc ;
    %DO i=1 %TO &nbObj ;
	  ODS OUTPUT &&obj&i = work.&&obj&i ;
      REPLAY &&path&i ;
      RUN ; 	
    %END ;
  QUIT ;
  ODS SELECT ALL ;
  PROC SQL ;
    DROP TABLE work.objets ;
  QUIT ;
%MEND creeTables ;
On se sert de la macro comme ceci :
Code :
1
2
3
4
5
6
7
ODS DOCUMENT NAME=work.temp (WRITE) ;
PROC LOGISTIC DATA=sashelp.class ;
  CLASS age ;
  MODEL sex=age weight ;
RUN ;
ODS DOCUMENT CLOSE ;
%creeTables (work.temp) ;
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 14h10   #3
Membre éprouvé
 
Homme Rémi Bousquet
responsable adjoint service stat
Inscription : mars 2009
Messages : 334
Détails du profil
Informations personnelles :
Nom : Homme Rémi Bousquet
Âge : 35
Localisation : France

Informations professionnelles :
Activité : responsable adjoint service stat
Secteur : Finance

Informations forums :
Inscription : mars 2009
Messages : 334
Points : 464
Points : 464
Merci Olivier pour ta réponse

Macro super intéressante (je n'ai jamais eu à utiliser la proc document jusque aujourd'hui).
Mais dans le contexte où je voudrai l'utiliser (transmettre à plein d'interlocuteurs de niveaux hétéroclite à l'international), ça rajoutera une couche de complexité que je préfère éviter.

C'est dommage que SAS n'ait pas prévu une fonction du type "ODS OUTPUT ALL" ;
RemiBousquet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 12h12   #4
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
Tu peux tester dans ton contexte ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
ods output Stats=stat ;
proc template ;
**list base.univariate / sort=path descending;
list stat.logistic  / sort=path descending;
run;
 
DATA final;
SET stat;
WHERE UPCASE(type)='TABLE';
tableSortie=scan(path,-1);
DROP path;
run;
 
/*Ensuite, il faut les récupérer en macro */
__________________
N'oubliez pas de cliquer sur lorsque votre problème est réglé !

Moteur de recherche dans les papiers SAS
datametric 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 15h32.


 
 
 
 
Partenaires

Hébergement Web