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 :

Graphique à deux ordonnées


Sujet :

ODS et reporting

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2017
    Messages : 14
    Points : 17
    Points
    17
    Par défaut Graphique à deux ordonnées
    Bonjour à toutes et à tous,

    Je publie ce message car je cherche à réaliser un graphique que j'ai pu faire sous excel grâce à un tableau croisé dynamique et qui se présente comme ça :

    Nom : graph.png
Affichages : 4787
Taille : 30,5 Ko

    Pour ce faire, j'ai utilisé ce tableau dynamique :

    Nom : DATA_graph.png
Affichages : 1878
Taille : 11,4 Ko

    Je voulais savoir si ce graphique est réalisable sur sas en conservant d'un côté les fréquences et de l'autre les pourcentages? Faut-il passer par une proc freq pour le tracer ou quelles sont les options?
    Je vous remercie d'avance pour votre temps et vos réponse!

    Bonne journée!

  2. #2
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonjour.
    Oui c'est faisable sous SAS. Ce n'est pas forcément nécessaire de passer par la proc Freq au préalable, mais ça peut simplifier le code.
    Regarde du côté de la proc SGPLOT, les instructions VBAR ou VBARPARM (si tu as déjà tout calculé avec Freq), VLINE ou SERIES pour la courbe, l'option Y2AXIS pour l'axe secondaire.

  3. #3
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Re-bonjour.
    J'ai été un peu optimiste hier soir. Ce qui rend le graphique un poil plus compliqué à produire c'est le mélange entre des données détaillées par sous-groupes (les barres groupées) et la courbe qui n'est pas détaillée.
    La solution la plus simple, si tu as un SAS 9.4 assez récent, est de tout calculer à l'avance (proc Freq et un peu d'étape Data) et d'utiliser une instruction VBARBASIC pour les bâtons et SERIES pour la courbe.
    Ci-dessous un exemple avec les données SASHELP.CLASS qui devrait ressembler à ce que tu veux faire.
    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
    PROC FREQ DATA=sashelp.class ;
      TABLE age * sex / LIST NOPERCENT NOCUM ;
      TABLE age / NOCUM ;
      ODS OUTPUT list = work.freq_detail 
                 oneWayFreqs = work.freq_agg ;
    RUN ;
    DATA work.freq_graph ;
      MERGE work.freq_detail (RENAME=(frequency=f))
          work.freq_agg (RENAME=(percent=p)) ;
      BY age ;
      KEEP age sex f p ;
      IF FIRST.age THEN p = p / 100 ;
      ELSE p = . ;
      FORMAT p NLPCT12.2 ;
    RUN ;
    PROC SGPLOT DATA=work.freq_graph ;
      VBARBASIC age / GROUP=sex GROUPDISPLAY=CLUSTER
                      RESPONSE=f STAT=SUM 
                      ;
      SERIES X=age Y=p / Y2AXIS LEGENDLABEL="TOTAL %"
                         LINEATTRS=(THICKNESS=3) ;
      XAXIS DISPLAY=(NOLABEL) ;
      YAXIS DISPLAY=(NOLABEL) INTEGER GRID ;
      Y2AXIS DISPLAY=(NOLABEL) ;
      KEYLEGEND / POSITION=RIGHT NOBORDER ;
    RUN ;

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2017
    Messages : 14
    Points : 17
    Points
    17
    Par défaut Preque au bout
    Bonjour,

    Merci du conseil Olivier, je suis sur la bonne voix! Je viens de voir ton message à 9h30, je vais tester ça. Je poste quand même celui-ci.
    Cependant, j'ai un problème avec la vline qui pour l'instant se démultiplie pour chaque tranche de score, alors que je voudrais une seule ligne pour le total. Je ne suis pas encore passer par la sortie de ma proc freq et du coup le code donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PROC SGPLOT DATA = WORK.STAT_TEST ;
    VLINE NOTET/ response=freq group=scoring Y2AXIS;
     VBAR NOTET / GROUP = SCORING GROUPDISPLAY = CLUSTER;
     TITLE 'SCORE SELON LA NOTE DU CLIENT';
    RUN;
    J'obtiens le graphique suivant :

    Nom : CD_graph_group.png
Affichages : 2163
Taille : 20,9 Ko

    En revanche, quand je passe par la sortie de ma proc freq, j'utilise le code suivant pour récupérer le VBAR de chaque modalité :

    PROC SGPLOT DATA = WORK.DATA_GRAPH_ALL ;
    VLINE NOTET/ response=pourcentage Y2AXIS;
    VBAR NOTET / response=S_0_30;
    VBAR NOTET / response=S_30_50;
    VBAR NOTET / response=S_50_75;
    VBAR NOTET / response=S_75_100;
    TITLE 'SCORE SELON LA NOTE DU CLIENT';
    RUN;

    Et j'obtiens le graphique suivant qui n'est pas loin de ce que je souhaite :

    Nom : CD_graph_empil.png
Affichages : 2150
Taille : 18,5 Ko

    Dans les deux cas j'y suis presque mais il faudrait que je regroupe mes vline dans le premier code alors que j'utilise la fonction GROUP pour obtenir mon histogramme comme je le souhaite et qui me rend plusieurs courbes. Dans le second code, il faudrait que j'arrive à les désempiler pour obtenir 4 barres pour chaque note.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2017
    Messages : 14
    Points : 17
    Points
    17
    Par défaut Réussite
    Merci Olivier, c'est de la bombe!! J'ai plus qu'à retoucher les couleurs et c'est tout bon! Il me manquait une table au final pour pouvoir réaliser mon graphique!

    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
    PROC FREQ DATA=work.stat_test ;
      TABLE notet * scoring / LIST NOPERCENT NOCUM ;
      TABLE notet / NOCUM ;
      ODS OUTPUT list = work.freq_detail 
                 oneWayFreqs = work.freq_not ;
    RUN ;
    DATA work.freq_graph ;
      MERGE work.freq_detail (RENAME=(frequency=f))
          work.freq_not (RENAME=(percent=p)) ;
      BY notet ;
      KEEP notet scoring f p ;
      IF FIRST.notet THEN p = p / 100 ;
      ELSE p = . ;
      FORMAT p NLPCT12.2 ;
    RUN ;
    PROC SGPLOT DATA=work.freq_graph ;
      VBARBASIC notet / GROUP=scoring GROUPDISPLAY=CLUSTER
                      RESPONSE=f STAT=SUM 
                      ;
      SERIES X=notet Y=p / Y2AXIS LEGENDLABEL="TOTAL %"
                         LINEATTRS=(THICKNESS=3) ;
      XAXIS DISPLAY=(NOLABEL) ;
      YAXIS DISPLAY=(NOLABEL) INTEGER GRID ;
      Y2AXIS DISPLAY=(NOLABEL) ;
      KEYLEGEND / POSITION=RIGHT NOBORDER ;
    RUN ;
    Voici le rendu final du graphique sur mes données :

    Nom : CD_grah_bon.png
Affichages : 1907
Taille : 19,1 Ko


    Encore merci olivier, et bon codage à tous!

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2017
    Messages : 14
    Points : 17
    Points
    17
    Par défaut Vbar décroissante en fonction de l'effectif
    Bonjour à toutes et à tous, maintenant que j'ai réussi à sortir mon graphique, je cherche à ranger de façon décroissante mes modalités en fonction de l'effectif total. Je sais que sas le fait si l'on utilise un proc sort avant la proc sgplot mais existe-t-il un autre moyen de le réaliser avec la proc sgplot?
    Merci d'avance!

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2017
    Messages : 14
    Points : 17
    Points
    17
    Par défaut Résolu
    Bonjour,

    J'ai trouver l'option de la proc sgplot qui permet de ranger les modalités de façon décroissante. Ca peut toujours intéresser quelqu'un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    PROC SGPLOT DATA = WORK.STAT_TEST ;
    TITLE 'Répartition des individus par filière et selon leur statut en effectif';
      VBAR FILIERE_APE/ GROUP = STATUT GROUPDISPLAY = CLUSTER dataskin=pressed CATEGORYORDER=RESPDESC;
      VLINE FILIERE_APE/ response=freq group=STATUT Y2AXIS;
      XAXIS DISPLAY=(NOLABEL noticks) ;
      YAXIS DISPLAY=(NOLABEL) INTEGER GRID ;
      Y2AXIS DISPLAY=(NOLABEL) ;
      KEYLEGEND / POSITION=RIGHT NOBORDER ;
    RUN;
    Tout se joue sur l'option CATEGORYORDER=RESPDESC qui classe automatiquement selon l'effectif ou la variable renseignée dans l'option RESPONSE= de VBAR.

    Bonne journée et bon codage à tout le monde!

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

Discussions similaires

  1. [Report Studio 8.4] Graphique à deux echelles
    Par simonlourson dans le forum Cognos
    Réponses: 4
    Dernier message: 19/02/2010, 15h23
  2. Graphique à deux 'y' pour un même 'x'
    Par leovenus dans le forum MATLAB
    Réponses: 1
    Dernier message: 19/04/2008, 18h30
  3. Graphique à deux ordonnées
    Par Ptinéwik dans le forum MATLAB
    Réponses: 2
    Dernier message: 03/04/2008, 15h48
  4. [XI] Diagramme avec deux ordonnées differentes
    Par tatayoyo dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 26/04/2007, 10h36
  5. Graphique à double ordonnée ?
    Par jeanchcom dans le forum Access
    Réponses: 5
    Dernier message: 24/08/2006, 12h08

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