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
    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é
    Tu peux en dire un peu plus (en particulier sur le pivot)?

  3. #3
    Expert confirmé
    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é
    Bonjour,
    Le pivot n'est pas ce que fait la proc tabulate?

  5. ###raw>post.musername###
    Membre régulier
    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" );
      0  0

  6. #6
    Membre expérimenté
    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é
    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
    Merci Olivier pour la reponse je vais essayer ca Lundi et je vous donne un feed back.

    Bien à vous

  9. #9
    Modérateur

    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. ###raw>post.musername###
    Membre régulier
    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.
      0  0

  11. #11
    Expert confirmé
    Ah. Zut.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    SHEET="DATA$" ;
    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
    Rebonjour,

    j'ai essayé avec
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    SHEET="DATA$" ;


    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é
    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
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    SHEET="_DATA" ;
    . 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
    Merci Olivier je vais essayer entre temps avec ça.

  15. #15
    Expert confirmé
    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
    Merci Olivier j'ai essayé avec le premier ça à marcher.

###raw>template_hook.ano_emploi###