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

SAS STAT Discussion :

afficher une ligne moyenne sur le boxplot


Sujet :

SAS STAT

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 15
    Points : 8
    Points
    8
    Par défaut afficher une ligne moyenne sur le boxplot
    Bonjour,

    Je présente une moyenne d'une variable (var1) en fonction de la catégorie d'établissement. J'aurai besoin d'afficher (tracer) sur le boxplot (sur lequel apparissemnt bien les moyennes de la var1 en point rouge selon chaque catégorie), j'aurai besoin de tracer la moyenne de la var1 au niveau national (moyenne(var1) au niveau national=0.62) en tant qu'une ligne qui traverse toues les boites à moustache (ça permet d'avoir un effet visuel entre la différence entre les points moyenne de chaque catégorie et la moyenne nationale)

    merci infiniment.

  2. #2
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 56
    Points : 72
    Points
    72
    Par défaut
    Bonjour,

    De la même manière que pour afficher les valeurs des moyennes, tu peux passer par une table d'annotations et les fonctions MOVE pour se positionner à l'endroit où commencera la ligne et la fonction DRAW pour dessiner la ligne que l'on souhaite

    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
     
    /*-----------------------------------------------------------------------+
    |  Création de la base de données à exploiter                            |
    +-----------------------------------------------------------------------*/
    DATA Times;
      informat day date7. ;
      format   day date7. ;
      input day @ ;
      do flight=1 TO 25;
         input delay @ ;
         output;
         end;
      datalines;
       16DEC88   4  12   2   2  18   5   6  21   0   0
                 0  14   3   .   2   3   5   0   6  19
                 7   4   9   5  10
       17DEC88   1  10   3   3   0   1   5   0   .   .
                 1   5   7   1   7   2   2  16   2   1
                 3   1  31   5   0
       18DEC88   7   8   4   2   3   2   7   6  11   3
                 2   7   0   1  10   2   3  12   8   6
                 2   7   2   4   5
       19DEC88  15   6   9   0  15   7   1   1   0   2
                 5   6   5  14   7  20   8   1  14   3
                10   0   1  11   7
       20DEC88   2   1   0   4   4   6   2   2   1   4
                 1  11   .   1   0   6   5   5   4   2
                 2   6   6   4   0
       21DEC88   2   6   6   2   7   7   5   2   5   0
                 9   2   4   2   5   1   4   7   5   6
                 5   0   4  36  28
       22DEC88   3   7  22   1  11  11  39  46   7  33
                19  21   1   3  43  23   9   0  17  35
                50   0   2   1   0
       23DEC88   6  11   8  35  36  19  21   .   .   4
                 6  63  35   3  12  34   9   0  46   0
                 0  36   3   0  14
       24DEC88  13   2  10   4   5  22  21  44  66  13
                 8   3   4  27   2  12  17  22  19  36
                 9  72   2   4   4
       25DEC88   4  33  35   0  11  11  10  28  34   3
                24   6  17   0   8   5   7  19   9   7
                21  17  17   2   6
       26DEC88   3   8   8   2   7   7   8   2   5   9
                 2   8   2  10  16   9   5  14  15   1
                12   2   2  14  18
       ;
       run;
     
      symbol1 v=circle   c=red;
      symbol2 v=square   c=vigb;
      symbol3 v=triangle c=vig;
      title 'Box Plot for Airline Delays';
     
      /*-----------------------------------------------------------------------+
      | On veut afficher les moyennes par jour sur le graphique : on calcule   |
      | alors la moyenne que l'on stocke dans une autre table                  |
      +-----------------------------------------------------------------------*/
      proc summary DATA=times noprint;
       /*class day;*/
       var delay;
       output out=times_mean (DROP=_type_ _freq_) mean=moyenne;
      run; 
     
      proc sql noprint;
      select max(day) into: max_date  
      from times;
      select min(day) into: min_date
      from times;
      quit;
      %put max=&max_date min=&min_date.;
      /*-----------------------------------------------------------------------+
      | On se crée une table d'annotation qui servira à écrire ce que l'on veut|
      | sur la graphique                                                       |
      +-----------------------------------------------------------------------*/
      DATA annotate;
        SET times_mean /*(WHERE=(day ne .))*/;
        length text $10.;
        retain when "a" xsys "2" ysys "2";
     
     
       function='move'; x=&min_date.; y=moyenne; output; /* On se positionne sur la 1ère observations */
       function='draw'; x=&max_date.; y=moyenne; size=1.2; line=1; /* On dessine (draw) une ligne verte de taille 1.2 jusqu'à la dernière date)*/
          color='green'; output;
     
      run;
     
      /*-----------------------------------------------------------------------+
      | Voici les différentes valeurs possibles pour POSITION                  |
           __________________________________________________  
          |Position        |  Right  |           |  Left     |
          |                | Aligned | Centered  | Aligned   |
          |==================================================|
          |One cell above  |   1     |    2      |     3     |
          |Centered        | 4 | <   |  5 | +    |   6 | >   | 
          |One cell below  |   7     |    8      |     9     |
          |Half cell above |   A     |    B      |     C     |
          |Half cell below |   D     |    E      |     F     |
           -------------------------------------------------*/
     
      /*-----------------------------------------------------------------------+
      | Voici les différentes valeurs possibles pour XSYS et YSYS              |
        ______________________________________________________________
       | Absolute | Relative | Coordinate                             |
       | Systems  | Systems  | System Units                           |
       |==============================================================|
       |    1     |   7      |  percentage of data area               |
       |    2     |   8      |  data values                           |
       |    3     |   9      |  percentage of graphics output area    |
       |    4     |   A      |  cell in graphics output area          |
       |    5     |   B      |  percentage of procedure output area   |
       |    6     |   C      |  cell in procedure output area         |
        --------------------------------------------------------------*/
     
      /*-----------------------------------------------------------------------+
      | Procédure boxplot avec la table d'annotation ANNOTATE                  |
      +-----------------------------------------------------------------------*/
      title "Boxplot pour les delais d'avions";
      proc boxplot DATA=Times ;
        plot delay*day  /
              cboxes       = dagr
              cboxfill     = ywh
              cframe       = vligb
              nohlabel 
              /*symbollegend = legend1*/
              annotate     = annotate; /* Nom de la table contenant les annotations */
        label delay = 'Delai en minutes';
      run;
      quit;

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 15
    Points : 8
    Points
    8
    Par défaut oui, c cool, mais ça marche toujours pas!
    Bonjour,

    merci lucaslu pour le programme.

    voilà ce que j'ai essayé de taper mais ça ne m'a rien donné

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    proc summary DATA=resultats_es_dpa_mco noprint;
    var i1_tdp;
    output out=mean_cat mean=moyenne;
    run; 
     
    DATA annotate;
    SET mean_cat; 
    FUNCTION='move'; 
    FUNCTION='draw'; 
    color='green'; output;
    run;"
    En fait, je voudrais tracer la ligne qui correspond à la valeur (deja claculée) de 0.70, alors je ne sais pas comment écrire ça sur (function=move)
    et je voudrais que la ligne tracée soit du début à la fin fixées sur la valeur de 0.70
    (donc tout celà n'a rien avoir avec la premire ou la dernière observations)

    Comment faire alors, bien que j'ai essayé différents trucs, mais je tourne à rond

    merci infiniment

  4. #4
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 56
    Points : 72
    Points
    72
    Par défaut
    Bonjour,

    Ta table annotate écrite comme cela ne contiendra qu'une seule observation, la 2ème, ce qui n'est pas suffisant.

    Pour avoir une bonne table d'annotate, il lui faut plusieurs informations, notamment les coordonnées (X, Y si variable "numérique" sur les axes, Xc, YC si variables caractères sur les axes) et également des coordonnées pour savoir si on écrit sur le graphique, dans les "marges"... (Xsys, Ysys...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    DATA annotate;
    SET mean_cat; 
    length when xsys ysys $1.;
    retain when "a" xsys "2" ysys "2";
     
    FUNCTION='move'; Xc="Première région sur le graphe"; Y=moyenne;
    output;
     
    FUNCTION='draw'; Xc="Dernière région sur le graphe"; Y=moyenne; color='green'; size=1.2; line=1;output;
    run;
    Dans Xc, il faut d'abord lui indiquer le nom de la première région sur le graphique puis le nom de la dernière région.

    Bon courage!

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 15
    Points : 8
    Points
    8
    Par défaut merci lucaslu, stp voilà mon programme complet, je ne réussis tjrs pas
    Bonjour Lucaslu,

    voilà le programme que j'ai tapé, s'il te plaît, veux tu bien vérifier ce qui ne va pas stp, car j'ai bien essayé mais je ne suis tjrs pas arrivé à tracer la ligne moyenne


    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
    proc summary DATA=resultats_es_dpa_mco noprint;
    var i1_tdp;
    output out=mean_cat mean=moyenne;
    run; 
     
    /*table annotation*/
    DATA annotate;
      SET mean_cat; 
      length when xsys ysys $10.;
      when="a"; xsys ="2"; ysys="2";
      x=cat;y=moyenne;
      position="C";
      FUNCTION='move'; Xc="1-CHU"; y=moyenne;/*en fait, 1-CHU est la première modalité de la variable "cat" qui va apparaitre sur l'axe X*/
      FUNCTION='draw'; Xc="6-Autres publics";Y=moyenne;color='green'; size=1.2; line=1;output; /*"6-Autres publics" est la dernière modalité qui va apparaître sur l'axe des X"
      run;
     
    /*tracer le box plot*/
     
    goptions reset=all colors=(red);
    axis1 label=('Indicateur TDP');
    axis2 label = ('Catégorie' a=90  justify=center);
    proc sort data=WORK.SORTTempTableSorted out=sasuser.tdp_mco_boxplot; by lib_cat;run;
    axis1 order = (20 to 100 by 20)
    label = (height = 1.25 'Indicateur TDP')
    minor = (number = 1);
    symbol value = dot
    height = 0.5 ;
    proc boxplot data = sasuser.tdp_mco_boxplot;;
    plot I1_tdp* "lib_cat"n / boxstyle=schematic vaxis = axis1 
    annotate=annotate/*boxstyle=schematic donne les valeurs extremes*/
    haxis = axis2;
    /*cbox= BL; /*celà colore les traits du boxplot en noir, si tu les veux en vert, il faudra supprimer cette option*/
    run;
    Run;quit;

    Je te remercie bcp Lucaslu

  6. #6
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 56
    Points : 72
    Points
    72
    Par défaut
    En fait, pour les coordonnées X et Y, soit on a besoin de X, soit de Xc mais pas des 2. De même, pour Y (soit Y, soit Yc).

    De plus, quand tu crées ta table annotate, il te manque une instruction "output;" juste après ce bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FUNCTION='move'; Xc="1-CHU"; y=moyenne;
    Ta table annotate doit plus ressembler à cela:
    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
    DATA annotate;
      SET mean_cat; 
      length when xsys ysys $10. Xc $20.;
      when="a"; xsys ="2"; ysys="2";
     
      position="C";
      FUNCTION='move'; 
      Xc="1-CHU"; /*"1-CHU" est la première modalité de la variable "cat" qui va apparaitre sur l'axe X*/
      y=moyenne;   
      output; /* ne pas oublier cet output; */
     
      FUNCTION='draw'; 
      Xc="6-Autres publics"; /* "6-Autres publics" est la dernière modalité qui va apparaître sur l'axe des X"*/
      Y=moyenne;
      color='green'; 
      size=1.2; 
      line=1;
      output; 
    run;
    Cela devrait mieux marcher maintenant.

    PS: Tu arrives bien à faire les boites à moustaches?

  7. #7
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 15
    Points : 8
    Points
    8
    Par défaut merci Lucaslu, bcp bcp
    Oui lucaslu, je suis arrivée à faire les boites à moustaches

    super, le programme marche bien mnt, je t'en remercie infiniment

Discussions similaires

  1. Afficher la valeur moyenne sur un boxplot
    Par cocotta dans le forum ODS et reporting
    Réponses: 1
    Dernier message: 18/05/2010, 17h03
  2. Réponses: 2
    Dernier message: 14/04/2009, 19h04
  3. Commande pour afficher une ligne sur 2
    Par toxycyty dans le forum Linux
    Réponses: 2
    Dernier message: 08/10/2008, 15h30
  4. Afficher des lignes/graphique sur une form
    Par Jinx_ dans le forum Débuter
    Réponses: 4
    Dernier message: 10/02/2008, 15h28
  5. afficher une ligne contante sur le graphe d'un DBChart ?
    Par bigfoot dans le forum Bases de données
    Réponses: 5
    Dernier message: 23/12/2004, 16h33

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