IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

Proc report après une proc transpose: pas toutes les colonnes à chaque fois


Sujet :

ODS et reporting

  1. #1
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut Proc report après une proc transpose: pas toutes les colonnes à chaque fois
    Bonjour à tous,

    J'ai un souci sur une proc report. Je n'ai pas le code avec moi en ce moment mais je devrai réussir à expliquer ...

    J'ai développé une macro qui fait:
    1. création du dataset a
    2. transposition du dataset a en dataset b
    3. proc report du dataset b

    Ma macro fonctionne bien mais pas à tous les coups ! En fait, il arrive que le dataset b ne contienne pas forcément toutes les colonnes indiquées dans la proc report.

    Dans une situation 1, dataset b contiendra toutes les colonnes que je veux dans ma proc report.

    Dans une situation 2, dataset b contiendra seulement quelques colonnes que je veux dans ma proc report, les autres n'existent pas (car pas dans le dataset a d'origine).

    Comment indiquer dans ma proc report que certaines colonnes sont optionnelles ? Si elles existent dans le dataset, les mettre en sortie. Sinon, ne pas générer de message d'erreur et ne faire un report que des colonnes existantes.

    Merci de votre aide.

  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
    J'aurais deux solutions à proposer qui passent par le mode macro:
    1/ gérer deux proc report dans un % if %then report 1 %else report2
    2/ gérer le %if %then dans le column define d'une seule proc report.

    On peut gérer du if then sans macro dans la report mais je ne pense pas que ca puisse convenir dans ce cas.

  3. #3
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    Merci pour ton aide.

    Alors j'avais pensé à la solution 1 mais en fait ce n'est pas une bonne solution dans mon cas car il n'y a pas que 2 possibilités (report1 et report2).

    Exemples:
    appel de macro 1 => 4 variables dans ma proc report w,x,y,z
    appel de macro 2 => 3 variables dans ma proc report w,x,z
    appel de macro 3 => 3 variables dans ma proc report x,y,z
    ...


    En revanche, ta solution 2 m'intéresse: on peut mettre un %if dans une proc report ? Et on le met où ? dans la ligne column ? dans la ligne define ?

    J'a jeté un oeil rapide sur google avant de te répondre, et il semblerait qu'il faille utiliser compute, c'est ça ?

  4. #4
    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
    le %if tu le mets ou tu veux... Quand tu rentres dans la contion appropriée, ca rajoutera juste des define et créera un column plus long (lors de l'éxécution).

    Ce que tu mentionnes c'est le cas du if, sans le language macro

    Je ne connais pas les détails du problème, mais ne serais t-il pas possible de revoir le transpose (afin d'avoir un seul type de sortie)?

  5. #5
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    Salut,

    J'ai testé de la façon suivante et ça a l'air de fonctionner

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
     
    /* j'essaye de faire la première partie dans une macro, mais j'ai un problème, j'ouvrirai un autre post */
     
    data _null_;
    	dset=open('global_t');
    	call symput ('chk1',varnum(dset,'count_P'));
    run; 
     
    data _null_;
    	dset=open('global_t');
    	call symput ('chk2',varnum(dset,'count_Z5'));
    run;
     
    data _null_;
    	dset=open('global_t');
    	call symput ('chk3',varnum(dset,'count_Z10'));
    run;
     
    %mamacro(...);
     
    proc report data=global&type;
    column cod count_P count_Z5 count_Z10;
    define cod / id display;
     
    compute count_P;
    if &chk1 ne 0 then do;
    call define (_COL_,"style","style=[background=snow]");
    end;
    endcomp;
     
    compute count_Z5;
    if &chk2 ne 0 then do;
    call define (_COL_,"style","style=[background=snow]");
    end;
    endcomp;
     
    compute count_Z10;
    if &chk3 ne 0 then do;
    call define (_COL_,"style","style=[background=snow]");
    end;
    endcomp;
     
    run;
    %mend mamacro;
    Voilà
    J'ai testé sur un cas seulement et ça marche. Je testerai sur tous les autres cas pour voir si ce n'est pas de la chance ...

    Merci Manoutz pour ta solution !

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 747
    Points : 978
    Points
    978
    Par défaut
    Slt,

    au lieu de faire un transpose avant, tu peux regarder du coté de across dans la
    REPORT

    x

  7. #7
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    slt xav2229, je viens seulement de voir ton message. je regarderai cette option que tu proposes dans la proc report. c'est une procédure qui permet en effet de réaliser pleins de trucs et je suis (très) loin d'en maitriser toutes les fonctionnalités. Mais comme je ne demande qu'à apprendre, je chercherai des infos sur le net.

    merci !
    bonne soirée

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

Discussions similaires

  1. Insertion ligne vide dans une colonne, mais pas toutes les colonnes.
    Par gsekscor dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/04/2013, 22h33
  2. Fermer une fenêtre et pas toutes les fenêtres ouvertes
    Par Sinakhine dans le forum Général Java
    Réponses: 4
    Dernier message: 29/10/2012, 13h06
  3. Lister une table en fusionnant toutes les colonnes
    Par ankou29666 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/04/2008, 10h30
  4. Réponses: 3
    Dernier message: 28/08/2007, 15h21

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