Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ODS et reporting Discussion :

export d'un Pivot table en excel via SAS


Sujet :

ODS et reporting

  1. #1
    Membre régulier
    Inscrit en
    novembre 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : novembre 2008
    Messages : 86
    Points : 83
    Points
    83
    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

  2. #2
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    Tu peux en dire un peu plus (en particulier sur le pivot)?

  3. #3
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    avril 2008
    Messages
    1 850
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : avril 2008
    Messages : 1 850
    Points : 4 103
    Points
    4 103
    Par défaut
    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.
    Bon courage.
    Olivier

  4. #4
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    janvier 2011
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : janvier 2011
    Messages : 1 020
    Points : 1 486
    Points
    1 486
    Par défaut
    Bonjour,
    Le pivot n'est pas ce que fait la proc tabulate?

  5. #5
    Membre régulier
    Inscrit en
    novembre 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : novembre 2008
    Messages : 86
    Points : 83
    Points
    83
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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" );

  6. #6
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    janvier 2011
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : janvier 2011
    Messages : 1 020
    Points : 1 486
    Points
    1 486
    Par défaut
    Tu pourrais mettre en pièce jointe le fichier exporté et le fichier pivoté afin de savoir concrétement ce que tu souhaites obtenir?

  7. #7
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    avril 2008
    Messages
    1 850
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : avril 2008
    Messages : 1 850
    Points : 4 103
    Points
    4 103
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.
    Bon courage.
    Olivier

  8. #8
    Membre régulier
    Inscrit en
    novembre 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : novembre 2008
    Messages : 86
    Points : 83
    Points
    83
    Par défaut
    Merci Olivier pour la reponse je vais essayer ca Lundi et je vous donne un feed back.

    Bien à vous

  9. #9
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    février 2011
    Messages
    1 623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : février 2011
    Messages : 1 623
    Points : 3 393
    Points
    3 393
    Par défaut
    Bonjour;
    un petit exemple sur THE Excel Pivot : Excel Pivot Tables.
    Bon courage.
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  10. #10
    Membre régulier
    Inscrit en
    novembre 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : novembre 2008
    Messages : 86
    Points : 83
    Points
    83
    Par défaut
    Bonjour,
    Je viens de faire tourner ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  11. #11
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    avril 2008
    Messages
    1 850
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : avril 2008
    Messages : 1 850
    Points : 4 103
    Points
    4 103
    Par défaut
    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).
    Bon courage.
    Olivier

  12. #12
    Membre régulier
    Inscrit en
    novembre 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : novembre 2008
    Messages : 86
    Points : 83
    Points
    83
    Par défaut
    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.

  13. #13
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    avril 2008
    Messages
    1 850
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : avril 2008
    Messages : 1 850
    Points : 4 103
    Points
    4 103
    Par défaut
    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é.
    Bon courage.
    Olivier

  14. #14
    Membre régulier
    Inscrit en
    novembre 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : novembre 2008
    Messages : 86
    Points : 83
    Points
    83
    Par défaut
    Merci Olivier je vais essayer entre temps avec ça.

  15. #15
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    avril 2008
    Messages
    1 850
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : avril 2008
    Messages : 1 850
    Points : 4 103
    Points
    4 103
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Bon courage.
    Olivier

  16. #16
    Membre régulier
    Inscrit en
    novembre 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : novembre 2008
    Messages : 86
    Points : 83
    Points
    83
    Par défaut
    Merci Olivier j'ai essayé avec le premier ça à marcher.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Exporter un rapport (grid) vers fichier excel via un lien
    Par mano_bi dans le forum Microstrategy
    Réponses: 2
    Dernier message: 27/05/2015, 17h12
  2. Exporter une table Access vers Excel via un Bouton (VBA)
    Par moni27b dans le forum VBA Access
    Réponses: 7
    Dernier message: 16/04/2015, 12h25
  3. [MySQL] Export Base de Donnée en fichier Excel via PHP
    Par Waka56 dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 01/06/2011, 19h31
  4. Réponses: 2
    Dernier message: 15/02/2011, 18h24
  5. Réponses: 1
    Dernier message: 17/11/2010, 20h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo