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 :

Proc GPlot et affichage du nombre d'observations


Sujet :

SAS STAT

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2010
    Messages : 6
    Points : 8
    Points
    8
    Par défaut Proc GPlot et affichage du nombre d'observations
    J'utilise Proc Robustreg pour la détection de points aberrants (outliers) dans une distribution masse vs longueur. L'illustration de la relation et des 'outliers' se fait avec Proc GPlot avec l'option 'Annotate=', laquelle annotation utilise la sortie de Proc Robustreg. L'essentiel du programme se lit ainsi :
    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
    Proc Robustreg Data=Work.Carbio Method=Mm;
    By Sourc_Mb Nbpc_Mb No_Relmb Espgen;
    Model Lnmasse = Lnlong / Diagnostics(All) Leverage;
    Output Out=Diag_Out R=Resid Sr=Stdres Outlier=Otlr Leverage=Lvr Rho=R;
    Run;
     
    Data Work.Annote;
    Length Function Color $8;                                                                                                             
    Retain Function 'Label' Xsys Ysys '2' Hsys '1' Style 'Arial';                                                                                                    
       Set Work.Diag_Out;
    If Otlr=1 Then Do;                                                                                                              
         Function='Label';                                                                                                                   
         X=Lnlong;                                                                                                                           
         Y=Lnmasse;                                                                                                                           
         Color='Red/Bold';                                                                                                                      
         Position='8';                                                                                                                       
         Text=Trim((Left(Put(V_Long,4.)))||'-'||(Left(Put(V_W,6.1))));                                                                                                   
         Output;                                                                                                                             
       End;                                                                                                                                  
    Run;
     
    Proc Gplot Data=Work.Carbio;
    Note Box=2 Color=Red Font='Arial' Height=3Pct 
         Move=(72,25) "Point Aberrant"             
         Move=(-15,-3) "(V_Long - V_W)" ;           
    By Sourc_Mb Nbpc_Mb No_Relmb No_Stnmb Espgen;  
    Plot Lnmasse * Lnlong=3 / Vaxis=Axis1          
                          Haxis=Axis2
    					  Hminor=0 Vminor=0
                          Regeqn                    
                          Annotate=Work.Annote;     /* Utilisation des annotations définies dans Work.Annote */
      By Espgen Esp N_Espf;
    Run;
    J'aimerais indiquer sur les graphiques le nombre d'observations utilisées pour évaluer la régression. Existe-t-il une option dans Robustreg pour que cette information apparaissent dans le dataset Out=Daig_Out? Si l'option n'existe pas et qu'il est évalué autrement, doit-il être inséré dans mon Work.Annote ou bien peut-on utiliser 2 dataset différents dans l'option Annotate= dans la Proc GPlot?

    Merci à l'avance pour le partage d'information.

  2. #2
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Points : 6 064
    Points
    6 064
    Par défaut
    Je ne connais pas ta version de SAS mais en SAS 9.2, l'INSET est dans tous les graphiques :
    http://support.sas.com/documentation...eg_sect031.htm

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2010
    Messages : 6
    Points : 8
    Points
    8
    Par défaut
    Merci Datametric.

    Je travaille avec la version 9.2. Je ne connaissais pas "Inset". Cependant cette option ne semble pas disponible avec GPlot. Elle fonctionne avec SGPlot mais dans le contexte de SGPlot je perds l'option d'insérer ma note (Note Box=2 ...). Je crois qu'avec "Inset" il serait possible de récupérer l'information désirée dans le template généré par SAS lors de l'exécution de la Proc Robustreg (Stat.Robustreg.Nobs); une avenue a vérifier.

    Puisque l'option d'avoir ce nombre d'observation ne semble pas disponible dans mon dataset Diag_Out, voici ce que j'ai appliqué :

    - Proc summary sur Diag_Out en ne conservant que l'info désirée (n=)
    - un "merge" entre Diag_Out et la sortie du proc summary
    - modification de l'étape créant le fichier d'annotation. Notons ici qu'il faut gérer le fait qu'à l'étape du "merge", le nombre d'observation est ajouté à chaque ligne. Puisque le "label" ne doit apparaître qu'une fois sur le graphique, je gère ça avec la fonction "lag". Voici ce que ça donne en terme de code SAS
    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
    Data Work.DiagOutNew (Drop=Var non désirée);
    Merge Work.Diag_Out (in=A) Work.Resul_Univar;
    By Sourc_Mb Nbpc_Mb No_RelMb EspGEn; 
    If A; 
    LNbLong=Lag(N_Long);
    Run;
     
    Data Work.Annote;
    Length function color $12.;
    Retain function 'label' xsys ysys '2' hsys '1' style 'arial';                                                                                                    
       set Work.DiagOutNew;
    if Otlr=1 then do;                                                                                                              
         function='label';                                                                                                                   
         x=LnLong;                                                                                                                           
         y=LnMasse;                                                                                                                           
         color='Red/Bold';                                                                                                                      
         position='8';                                                                                                                       
         Text=Trim((Left(Put(V_Long,4.)))||'-'||(Left(Put(V_W,6.1))));                                                                                                   
         output;                                                                                                                             
       end;  
    If LNbLong ne N_Long then do;
       Function='label'; 
       style='Arial/Bold'; 
       text=compress('n= '||(put(N_Long,6.))); 
       color='black';
       size=5; 
       position='2';
       x=1; y=9; 
       cborder='black';
       output;
     End;
    run;
    C'est opérationnel et je pense faire un bout de chemin avec ça même si je dois faire cette gymnastique de programmation pour arriver au résultat. Je demeure ouvert à d'autre solution. Encore merci de partager.

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

Discussions similaires

  1. Proc gplot : nombre d'observations en abscisse
    Par mis-tick dans le forum ODS et reporting
    Réponses: 13
    Dernier message: 23/08/2013, 16h19
  2. Nombre d'observations en utilisant la PROC CONTENTS
    Par viruppan dans le forum SAS Base
    Réponses: 2
    Dernier message: 07/05/2013, 20h56
  3. [PROC RANK] Connaître le nombre d'observations
    Par PAULOM dans le forum SAS Base
    Réponses: 6
    Dernier message: 01/06/2010, 15h20
  4. affichage graphique : Proc gplot
    Par sasseur dans le forum ODS et reporting
    Réponses: 1
    Dernier message: 20/11/2008, 15h21
  5. Affichage des nombres réels!
    Par smail21 dans le forum Bases de données
    Réponses: 4
    Dernier message: 17/11/2005, 17h49

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