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 :

Changer le total dans une proc TABULATE (via macro variable?)


Sujet :

ODS et reporting

  1. #1
    Membre régulier
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Février 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2015
    Messages : 42
    Points : 79
    Points
    79
    Par défaut Changer le total dans une proc TABULATE (via macro variable?)
    Bonjour à tous !!

    Je vous expose rapidement mon problème, j'espère être suffisamment clair (si ce n'est pas le cas, n'hésitez pas à me poser des questions).

    Je dispose d'une base comprenant 4 variables d'intérêt :
    3 variables oui/non : test1, test2 et test3.
    1 variable texte correspondante aux différentes régions françaises : region.

    Je viens de créer un tableau (via la procédure TABULATE) des résultats NATIONAUX, comprenant les effectifs et pourcentages des modalités "Oui" et "Non" de chacune des 3 variables test1, test2 et test3.
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    proc tabulate data=Matable missing /*out=Totalite order=freq*/;
            class test1 test2 test3 / style =[font_weight=bold];
            classlev test1 test2 test3 / style =[font_weight=medium];
            table test1 test2 test3 ALL="Total"*[style =[font_weight=bold]], ALL="Chiffres Nationaux"*(n="n"*f=7. pctn="%"*f=numx7.1) / misstext = "-" rtspace = 50;
            format test1 test2 test3 f_oui_non.;
    run;
    Mon problème réside dans l'étape suivante. Il me faut présenter ces résultats par région. Et pour chaque région, je souhaiterais obtenir (si possible) un seul tableau permettant de comparer les résultats de la région aux résultats nationaux.
    J'ai donc essayé le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    proc tabulate data=Matable  missing /*out=Totalite2 order=freq*/;
            class test1 test2 test3 region / style =[font_weight=bold];
            classlev test1 test2 test3 / style =[font_weight=medium];
            classlev region / style =[font_weight=bold];
            table region, test1 test2 test3 ALL="Total"*[style =[font_weight=bold]], (region ALL="Chiffres Nationaux")*(n="n"*f=7. colpctn="%"*f=numx7.1) / misstext = "-" rtspace = 50;
            format test1 test2 test3 f_oui_non.;
    run;
    Ainsi, j'obtiens bien un résultat par région mais ma colonne ALL="Chiffres Nationaux" ne contient pas les résultats nationaux. En réalité, cette colonne contient les même résultats que la colonne région...
    Je pense que pour obtenir ce que je souhaite, il me faudrait stocker les résultats nationaux dans une ou des macro(s) variables, pour ensuite les réinjecter dans ma procédure TABULATE...mais je ne sais pas comment faire !!

    Vous remerciant par avance de l'aide que vous pourriez me fournir, et de l'aide que vous m'avez déjà fournie grâce à ce forum,

    Recevez mes salutations les plus sincères

  2. #2
    Membre éprouvé
    Avatar de m.brahim
    Homme Profil pro
    SAS / BIG DATA
    Inscrit en
    Juillet 2011
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SAS / BIG DATA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 461
    Points : 1 119
    Points
    1 119
    Billets dans le blog
    14
    Par défaut
    Bonjour,

    Je te propose cette solution.

    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
    46
     
    data test;
    format region $15.;
    input id region test1 $ test2 $ test3 $;
    cards;
    1 bourgogne oui oui oui
    1 bourgogne oui oui oui
    1 bourgogne oui oui oui
    1 bourgogne oui oui oui
    1 alsace oui non non
    1 idf oui oui non
    1 bourgogne oui oui oui
    1 alsace oui non non
    1 idf oui oui non
    1 centre oui non non
    ;run;
     
    /*REPPCTSUM=tot/global*100=15%*/
     
    data test11 (drop=i);
    set test ;
    array s(*) test:;
    tot=0;
    tot1=0;
    do i =1 to dim (s);
    if s(i)="oui" then tot=tot+1;
    if s(i)="non" then tot1=tot1+1;
    end;
    run;
     
     
    proc tabulate data=test11  missing /*out=Totalite2 order=freq*/;
            class test1 test2 test3 region / style =[font_weight=bold];
            var tot tot1;
            table  (region all),(test1 tot='total oui par region'*( sum='nombre oui /region' reppctsum='% National'*f=pctfmt9.) 
                                 tot1='Total Non par region' *( sum='nombre non /region' reppctsum='% National'*f=pctfmt9.) 
     
                                 test2 tot='total oui par region'*( sum='nombre oui/region' reppctsum='% National'*f=pctfmt9.) 
                                 tot1='Total Non par region' *( sum='nombre non/region' reppctsum='% National'*f=pctfmt9.) 
     
                                 test3 tot='total oui par region'*( sum='nombre oui/region' reppctsum='% National'*f=pctfmt9.) 
                                 tot1='Total Non par region' *( sum='nombre non /region' reppctsum='% National'*f=pctfmt9.)
                                 )
    		 ;
     
    run;
    Cordialement

  3. #3
    Membre éprouvé
    Avatar de m.brahim
    Homme Profil pro
    SAS / BIG DATA
    Inscrit en
    Juillet 2011
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SAS / BIG DATA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 461
    Points : 1 119
    Points
    1 119
    Billets dans le blog
    14
    Par défaut
    Une autre solution avec proc report avec des calculs au préalable

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
     
    data test;
    format region $15.;
    input id region test1 $ test2 $ test3 $;
    cards;
    1 bourgogne oui oui oui
    1 bourgogne oui oui oui
    1 bourgogne oui oui oui
    1 bourgogne oui oui oui
    1 alsace oui non non
    1 idf oui oui non
    1 bourgogne oui oui oui
    1 alsace oui non non
    1 idf oui oui non
    1 centre oui non non
    1 centre oui oui non
    ;run;
     
    proc sort data=test;by region;run;
     
    data test11 (drop=i);
    set test ;
    array s(*) test:;
    tot=0;
    tot1=0;
    do i =1 to dim (s);
    if s(i)="oui" then tot=tot+1;
    if s(i)="non" then tot1=tot1+1;
    end;
    by region;
    retain totreoui totrenon;
    if first.region then totreoui=0;
    totreoui=totreoui+tot;
    if first.region then totrenon=0;
    totrenon=totrenon+tot1;
     
    retain t1o 0 t1n 0 t2o 0 t2n 0 t3o 0 t3n 0;  
    if first.region then t1o=0;
    if test1="oui" then 
    t1o=t1o+1;
    if first.region then t1n=0;
    if test1="non" then 
    t1n=t1n+1;
     
    if first.region then t2o=0;
    if test2="oui" then 
    t2o=t2o+1;
    if first.region then t2n=0;
    if test2="non" then 
    t2n=t2n+1;
     
    if first.region then t3o=0;
    if test3="oui" then 
    t3o=t3o+1;
    if first.region then t3n=0;
    if test3="non" then 
    t3n=t3n+1;
     
    if last.region then output;
    run;
    proc sql;
    create table test111 as select sum(totreoui) as total , sum(totrenon) as total1,test11.*
    from test11;
    quit;
     
    proc sort data=test111; by region;run;
     
    ods pdf file='c:\sas\test.pdf' style=styles.printer;
    proc report data=test111 nowd spanrows
         Style(report)={font_size=0.5 background=white just=center
                        frame=void rules=none cellpadding=1pt cellspacing=0.0pt borderwidth=0.1pt};
     by region;
      column  region t1o t1n t2o t2n t3o t3n totreoui totrenon total total1;
      define region / group;
      define t1o / "test1 oui";
      define t1n /"test1 non";
      define t2o / "test2 oui";
      define t2n / "test2 non";
      define t3o / "test3 oui";
      define t3n / "test3 non";
      define totreoui /"oui region";
      define  totrenon /"non region";
      define total  /"oui national";
      define total1  /"non national";
    run;
     
    ods pdf close;
    Cordialement

Discussions similaires

  1. Masquer l'affichage d'une modalité dans une proc tabulate
    Par pix33 dans le forum ODS et reporting
    Réponses: 8
    Dernier message: 01/03/2018, 15h51
  2. Tri de variables dans une PROC TABULATE
    Par sas007 dans le forum ODS et reporting
    Réponses: 1
    Dernier message: 07/05/2014, 17h29
  3. Gestion des bordures dans une proc tabulate
    Par enicnath dans le forum ODS et reporting
    Réponses: 9
    Dernier message: 09/09/2011, 11h19
  4. [PROC] Remplacer un point par une virgule dans une Proc Tabulate
    Par PAULOM dans le forum SAS Base
    Réponses: 2
    Dernier message: 20/08/2009, 09h36
  5. Réponses: 0
    Dernier message: 18/08/2009, 16h49

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