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 01/04/2011, 09h46   #1
Membre du Club
 
Inscription : novembre 2008
Messages : 69
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 69
Points : 41
Points : 41
Par défaut export d'un Pivot table en excel via SAS

Bonjour à tous,

apres avoir tourner mon code en SAS, j'ai comme output un fichier en excel qui exporter automatiquement pour des utlisateurs pour leurs analyses.
le soucis c'est que apres chaque output je dois moi meme creer un pivot table du fichier Excel.
Je désire que ce travail manuel se fera via l'export automatique et je n'aurai pas a creer le pivot apres chaque output.

Merci pour l'aide

Bien à vous
benvanbelgie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 10h05   #2
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
Tu peux en dire un peu plus (en particulier sur le pivot)?
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 10h27   #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
Bonjour.
Pour une meilleure compréhension pour ceux qui ont Excel en français, PIVOT TABLE=TABLEAU CROISE DYNAMIQUE.
Comment réalises-tu ton export ? Avec une étape DATA, une PROC EXPORT, l'assistant de SAS, l'assistant de SAS Enterprise Guide, l'ODS HTML, l'ODS TAGSETS.EXCELXP ?

A ma connaissance, il n'y a rien qui permette depuis SAS de créer des pivot tables. Mais on peut s'en sortir autrement : en lançant une macro Excel en DDE, en écrivant les données dans un onglet sans toucher au reste (et ainsi il n'y a qu'à actualiser le pivot table), en utilisant l'add-in de SAS pour Excel... (et j'en oublie sûrement).

Toutes les précisions sur ta version de SAS et ton système d'exploitation sont les bienvenues.
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 10h40   #4
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Bonjour,
Le pivot n'est pas ce que fait la proc tabulate?
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 12h34   #5
Membre du Club
 
Inscription : novembre 2008
Messages : 69
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 69
Points : 41
Points : 41
Par défaut mon code

Merci pour vos réactions.
ceci est mon code pour l'export vers Excel.
Version SAS: version 9.
Sysetme d'exploitation: windows seveur 2003

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
DATA _null_;
call symput('month',put(date(),date9.));
run;
%put  &month;
 
%macro export(x1,x2);
PROC EXPORT DATA=  &x1   
            OUTFILE= &x2  
            DBMS=excel2000
            REPLACE;
run;
%mend ;
 
%export(sumdata1_MKT_RESI     ,"\\Xs000721\MATRIX_MKT_&month..xls" );
benvanbelgie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 13h17   #6
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Tu pourrais mettre en pièce jointe le fichier exporté et le fichier pivoté afin de savoir concrétement ce que tu souhaites obtenir?
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 15h33   #7
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
Une solution possible, à toi de nous dire si ça te semble faisable.
1) créer un classeur Excel sur le modèle que tu fais, appelons-le PROTOTYPE.XLS ; il contient un onglet de données (éventuellement masqué pour l'utilisateur final) et dans un autre onglet, le tableau croisé dynamique pivot table. Nommons DATA la feuille contenant les données.
2) avec des commandes DOS depuis SAS tu dupliques le classeur PROTOTYPE pour le renommer MATRIX_MKT_01APR2011.xls (enfin avec la date qui va bien évidemment)
Code :
1
2
3
4
5
OPTION NOXWAIT ;
DATA _NULL_ ;
  month = PUT(TODAY(), DATE9.) ;
  CALL SYSTEM("COPY ""c:\temp\prototype.xls"" "!!QUOTE(CATS("c:\temp\MATRIX_MKT_",month,".xls"))) ;
RUN ;
3) dans ton programme, ajoute à la proc Export une petite instruction SHEET="DATA" ; avant le RUN ; et tu exportes comme d'habitude. Les utilisateurs auront juste besoin de penser à actualiser leur pivot table.
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2011, 22h42   #8
Membre du Club
 
Inscription : novembre 2008
Messages : 69
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 69
Points : 41
Points : 41
Merci Olivier pour la reponse je vais essayer ca Lundi et je vous donne un feed back.

Bien à vous
benvanbelgie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 09h16   #9
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
Bonjour;
un petit exemple sur THE Excel Pivot : Excel Pivot Tables.
Bon courage.
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 09h31   #10
Membre du Club
 
Inscription : novembre 2008
Messages : 69
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 69
Points : 41
Points : 41
Bonjour,
Je viens de faire tourner ce code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
%macro export(x1,x2);
PROC EXPORT DATA=  &x1   
            OUTFILE= &x2  
            DBMS=excel2000
            REPLACE;
			SHEET="DATA" ;
run;
%mend ;
%export(sumdata1_MKT_Soho     ,"\\Xs000721\Matrix\PROTOTYPE.XLS " );
 
 
OPTION NOXWAIT ;
DATA _NULL_ ;
  month = PUT(TODAY(), DATE9.) ;
  CALL SYSTEM("COPY ""\\Xs000721\Matrix\PROTOTYPE.XLS "" "!!QUOTE(CATS("\\Xs000721\Matrix\MATRIX_MKT_",month,".xls"))) ;
 
RUN ;
il fait l'export et il renomme correcetement le fichier sauf qu'il n'ecrase pas la feuille DATA mais il cree une autre et le tableau dynamique croisé et toujours lié a la 1 DATA.
benvanbelgie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 11h20   #11
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
Ah. Zut. alors ?
Sinon, sur le principe, j'aurais fait la copie de PROTOTYPE avant l'export, histoire de garder toujours PROTOTYPE intact et de ne modifier que les copies. Mais ça ne devrait pas empêcher le bon fonctionnement de la méthode.
Mais j'avoue que je n'ai pas pris le temps de tester, et que je n'ai rien pour cela aujourd'hui (pas d'ACCESS TO PC FILES là où je suis).
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 14h06   #12
Membre du Club
 
Inscription : novembre 2008
Messages : 69
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 69
Points : 41
Points : 41
Rebonjour,

j'ai essayé avec
Voici le message d'ereur que je reçoit:

ERROR: The MS Excel table DATA$ has been opened for OUTPUT. This table already exists, or there is a name conflict with an existing object. This table will not be replaced. This engine does not support the REPLACE option.
ERROR: Export unsuccessful. See SAS Log for details.
benvanbelgie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 15h08   #13
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
La bonne nouvelle, c'est qu'il essaye d'écrire au bon endroit.
La mauvaise c'est qu'il n'y arrive pas.
Je me souviens avoir déjà résolu un problème semblable, mais c'était il y a 4 ou 5 ans et j'ai oublié la solution.
Je fouille ce soir dans mes archives et je reposte si je trouve quelque chose (cela dit toutes les bonnes volontés qui m'éviteraient de l'archéologie sont les bienvenues).

Je vois ici que tu peux essayer . A tester donc.

PS : le souci est effectivement décrit ici. Mais il n'y a pas de contournement proposé.
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 15h47   #14
Membre du Club
 
Inscription : novembre 2008
Messages : 69
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 69
Points : 41
Points : 41
Merci Olivier je vais essayer entre temps avec ça.
benvanbelgie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2011, 06h32   #15
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
Salut.
Je viens d'essayer de reproduire ton souci : je n'y arrive pas ; sur ma session SAS 9.2.02 + Excel 2003 tout se passe impeccablement bien, avec le code suivant.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
PROC EXPORT DATA=sashelp.prdsale (WHERE=(country="CANADA")) OUTFILE="c:\temp\prototype.xls" DBMS=EXCEL REPLACE ;
 SHEET="DATA" ;
RUN ;
 
OPTION NOXWAIT ;
DATA _NULL_ ;
  month = PUT(TODAY(), DATE9.) ;
  nomFic = CATS("c:\temp\MATRIX_MKT_",month,".xls") ;
  rc = FILENAME("fic", nomFic) ;
  IF FILEEXIST(nomFic) THEN rc=FDELETE("fic") ;
  CALL SYSTEM("COPY ""c:\temp\prototype.xls"" "!!QUOTE(nomFic)) ;
  CALL SYMPUTX("fic", nomFic) ;
RUN ;
PROC EXPORT DATA=sashelp.prdsale
		 OUTFILE="&fic" 
			DBMS=EXCEL REPLACE ;
 SHEET="DATA" ;
RUN ;
Pas de différence chez moi avec DBMS=EXCEL au lieu de EXCEL2000. Je suppose que ça vient peut-être de la version de SAS (la 9.2 n'utilise pas le même composant Microsoft pour exporter vers Excel que la 9.1).

Je ne retrouve pas la solution trouvée il y a quelques années (sur une 9.1 effectivement) ; mais je crois que ça avait à voir avec la suppression des données dans l'onglet DATA avant d'exporter.
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
PROC EXPORT DATA=sashelp.prdsale (WHERE=(country="CANADA")) OUTFILE="c:\temp\prototype.xls" DBMS=EXCEL REPLACE ;
 SHEET="DATA" ;
RUN ;
 
OPTION NOXWAIT ;
DATA _NULL_ ;
  month = PUT(TODAY(), DATE9.) ;
  nomFic = CATS("c:\temp\MATRIX_MKT_",month,".xls") ;
  rc = FILENAME("fic", nomFic) ;
  IF FILEEXIST(nomFic) THEN rc=FDELETE("fic") ;
  CALL SYSTEM("COPY ""c:\temp\prototype.xls"" "!!QUOTE(nomFic)) ;
  CALL SYMPUTX("fic", nomFic) ;
RUN ;
LIBNAME xl EXCEL "&fic" ;
PROC SQL ;
  DROP TABLE xl.DATA ;
  DROP TABLE xl."DATA$"n ;
QUIT ;
LIBNAME xl CLEAR ;
PROC EXPORT DATA=sashelp.prdsale
		 OUTFILE="&fic" 
			DBMS=EXCEL2000 REPLACE ;
 SHEET="DATA" ;
RUN ;
Je n'ai pas de 9.1 pour tester ; peux-tu me dire comment ça fonctionne chez toi ?
Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 09h18   #16
Membre du Club
 
Inscription : novembre 2008
Messages : 69
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 69
Points : 41
Points : 41
Merci Olivier j'ai essayé avec le premier ça à marcher.
benvanbelgie 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 04h05.


 
 
 
 
Partenaires

Hébergement Web