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 :

Pour les professionnels de l'ODSOUT


Sujet :

ODS et reporting

  1. #1
    Membre actif
    Inscrit en
    Novembre 2003
    Messages
    543
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 543
    Points : 239
    Points
    239
    Par défaut Pour les professionnels de l'ODSOUT
    Bonjour
    Je suis sous SAS 9.3 et j'essaie de créer un rapport avec les objets ODSOUT. Mon programme est le suivant :
    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
    options leftmargin = 2 cm;
    ods listing close;
    ods pdf file="D:\Temp\Temp.pdf";
    ods escapechar="^";
    proc sort data=sashelp.class out=Temp; by Age Sex; run;
    data _null_;
       set Temp end=FinTable;
       by Age Sex;
       if _n_ eq 1 then declare odsout Obj(); 
       SexName=ifc(Sex eq 'F','Féminin', 'Masculin');
       if first.Age then do;
          Obj.page();
          Obj.format_text(data:'Âge : ' !! Age !! ' ans', overrides:"font_size=5", just:'c');
       end;
       if first.Sex then Obj.format_text(data:'Sexe : ' !! SexName, overrides:"foreground=black font_weight=bold");
       Obj.layout_gridded(columns:2, rows:2, overrides:"borderwidth=3 bordercolor=green vjust=middle");
       Obj.region(row:1, column_span:2, height:"2cm", overrides:"background=cx494068 vjust=middle");
       Obj.format_text(data:Name, overrides:"foreground=white just=left");
       Obj.region(row:2, column:1, width:"5cm", overrides:"background=cx9abcde");
       Obj.format_text(data:Height, overrides:"foreground=red");
       Obj.region(row:2, column:2, width:"10cm", overrides:"background=cx987214 bordercolor=red");
       Obj.format_text(data:weight);
       Obj.layout_end();
    run;
    ods pdf close;
    ods listing;
    title;
    Il y a quelques éléments que je ne parviens pas à mettre au point :
    1) je voudrais que les noms des personnes (variable NAME) soient centrés verticalement.
    J'ai essayé l'option OVERRIDES:"vjust=middle", ça ne marche pas.
    J'ai essayé aussi de mettre directement une option VJUST:"M" ; pas plus de résultats.
    Pourtant ça devrait_être possible d'après http://support.sas.com/rnd/base/data...umentation.pdf.
    2) je souhaiterais aussi que les noms des personnes soient justifiées à gauche.
    Pas de résultat là encore, que j'utilise l'option OVERRIDES:"just=left" ou JUST:"L" directement.
    D'ailleurs, il y a un warning lorsqu'on utilise directement les options JUST ou VJUST.
    3) je voudrais mettre des bordures à mes cellules. j'utilise OVERRIDES:"borderwidth=2", bordercolor= ; mais toujours rien.
    4) Je n'ai pas tous testé, mais il y a aussi les options COLUMN_GUTTER et ROW_GUTTER que je ne parviens pas à faire fonctionner, alors que le même document http://support.sas.com/rnd/base/data...umentation.pdf les prévoit.

    Est-ce que quelqu'un saurait débrouiller ces questions.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Statisticien/développeur BI
    Inscrit en
    Janvier 2012
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Statisticien/développeur BI
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2012
    Messages : 326
    Points : 1 142
    Points
    1 142
    Par défaut
    Bonjour,

    Il y a un moment que je n'en ai pas fait ... alors en vrac :
    * pour centrer les valeurs, utilise just= et vjust= dans ton ods region plutot que dans ton format_text
    * Pour les bordures, de mémoire j'avais contourné le problème en déclarant TOUTES les bordures (top, left, bottom et right) dans l'overrides, chacune avec les 3 options style, color, width.

    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
    options leftmargin = 2 cm;
    ods listing close;
    ods pdf file="D:\Temporaire\Temp.pdf";
    ods escapechar="^";
    proc sort data=sashelp.class out=Temp; by Age Sex; run;
    data _null_;
       set Temp end=FinTable;
       by Age Sex;
       if _n_ eq 1 then declare odsout Obj(); 
       SexName=ifc(Sex eq 'F','Féminin', 'Masculin');
       if first.Age then do;
          Obj.page();
          Obj.format_text(data:'Âge : ' !! Age !! ' ans', overrides:"font_size=5", just:'c');
       end;
       if first.Sex then Obj.format_text(data:'Sexe : ' !! SexName, overrides:"foreground=black font_weight=bold");
       Obj.layout_gridded(columns:2, rows:2, overrides:"borderwidth=3 bordercolor=green vjust=middle");
       Obj.region(row:1, column_span:2, height:"2cm", overrides:"background=cx494068 just=c vjust=middle");
       Obj.format_text(data:Name, overrides:"foreground=white");
       Obj.region(row:2, column:1, width:"5cm", overrides:"background=cx9abcde");
       Obj.format_text(data:Height, overrides:"foreground=red");
       Obj.region(row:2, column:2, width:"10cm", overrides:"background=cx987214 
    									bordertopstyle=solid bordertopcolor=red bordertopwidth=1px
    									borderbottomstyle=solid borderbottomcolor=red borderbottomwidth=1px
    									borderleftstyle=solid borderleftcolor=red borderleftwidth=1px
    									borderrightstyle=solid borderrightcolor=red borderrightwidth=1px");
       Obj.format_text(data:weight);
       Obj.layout_end();
    run;
    ods pdf close;
    ods listing;
    title;
    Essaye déjà ces solutions (je ne suis pas en 9.3) et tiens nous au courant.

    Bon courage !

  3. #3
    Membre actif
    Inscrit en
    Novembre 2003
    Messages
    543
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 543
    Points : 239
    Points
    239
    Par défaut
    Citation Envoyé par edward carnby Voir le message
    * pour centrer les valeurs, utilise just= et vjust= dans ton ods region plutot que dans ton format_text
    * Pour les bordures, de mémoire j'avais contourné le problème en déclarant TOUTES les bordures (top, left, bottom et right) dans l'overrides, chacune avec les 3 options style, color, width.
    Bon, on progresse quand même. C'est Ok pour les bordures, mais je vois que chez toi non plus, la justification des textes semble ne pas fonctionner...
    C'est pourtant assez important ; on a toujours besoin de régler ça. N'y a-t-il pas quelqu'un de chez SAS France qui pourrait nous rencarder ?

  4. #4
    Membre actif
    Inscrit en
    Juillet 2010
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 199
    Points : 214
    Points
    214
    Par défaut
    Bonjour,

    Pour aligner le texte à gauche tu peux essayer l'attribut textalign = left ou right ou center

    Obj.format_text(data:Name, overrides:"foreground=white TEXTALIGN=LEFT ");

  5. #5
    Membre actif
    Inscrit en
    Novembre 2003
    Messages
    543
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 543
    Points : 239
    Points
    239
    Par défaut
    Citation Envoyé par mohamed_ Voir le message
    Pour aligner le texte à gauche tu peux essayer l'attribut textalign = left ou right ou center

    Obj.format_text(data:Name, overrides:"foreground=white TEXTALIGN=LEFT ");
    Ah non, chez moi ça ne fonctionne pas mieux.
    Mon texte reste aligné à gauche, quelque soit l'option que je lui met.
    Dommage !

  6. #6
    Membre actif
    Inscrit en
    Juillet 2010
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 199
    Points : 214
    Points
    214
    Par défaut
    Bonjour,

    en agissant au niveau de la région ça devrait fonctionner

    Obj.region(row:1, column_span:2, height:"2cm", overrides:"background=cx494068 vjust=middle textalign = left");
    Obj.format_text(data:Name, overrides:"foreground=white");

  7. #7
    Membre actif
    Inscrit en
    Novembre 2003
    Messages
    543
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 543
    Points : 239
    Points
    239
    Par défaut
    Citation Envoyé par mohamed_ Voir le message
    en agissant au niveau de la région ça devrait fonctionner
    Obj.region(row:1, column_span:2, height:"2cm", overrides:"background=cx494068 vjust=middle textalign = left");
    Obj.format_text(data:Name, overrides:"foreground=white");
    Comme tu vois, je reproduis exactement ta proposition (lignes 17 & 18) ; mais toujours aucun effet chez moi.
    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
    options leftmargin = 2 cm;
    ods listing close;
    ods pdf file="D:\Temp\Temp.pdf";
    ods escapechar="^";
    proc sort data=sashelp.class out=Temp; by Age Sex; run;
    data _null_;
       set Temp end=FinTable;
       by Age Sex;
       if _n_ eq 1 then declare odsout Obj(); 
       SexName=ifc(Sex eq 'F','Féminin', 'Masculin');
       if first.Age then do;
          Obj.page();
          Obj.format_text(data:'Âge : ' !! Age !! ' ans', overrides:"font_size=5", just:'c');
       end;
       if first.Sex then Obj.format_text(data:'Sexe : ' !! SexName, overrides:"foreground=black font_weight=bold");
       Obj.layout_gridded(columns:2, rows:2, overrides:"borderwidth=3 bordercolor=green vjust=middle");
       Obj.region(row:1, column_span:2, height:"2cm", overrides:"background=cx494068 vjust=middle textalign=left");
       Obj.format_text(data:Name, overrides:"foreground=white");
       Obj.region(row:2, column:1, width:"5cm", overrides:"background=cx9abcde");
       Obj.format_text(data:Height, overrides:"foreground=red");
       Obj.region(row:2, column:2, width:"10cm", overrides:"background=cx987214 bordercolor=red");
       Obj.format_text(data:weight);
       Obj.layout_end();
    run;
    ods pdf close;
    ods listing;
    title;
    Peut-être y a-t-il un paramétrage d'installation qui fait fonctionner ce code sur un poste et non sur un autre ?
    Tant pis, je crois que je vais abandonner ce genre de bidouilles !
    En tout cas merci

  8. #8
    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 ces solutions:

    1/
    je voudrais que les noms des personnes (variable NAME) soient centrés verticalement.
    :

    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
     
    options leftmargin = 2 cm;
    ods listing close;
    ods pdf file="c:\sas\Temp.pdf";
    ods escapechar="^";
    proc sort data=sashelp.class out=Temp; by Age Sex; run;
    data _null_;
       set Temp end=FinTable;
       by Age Sex;
       if _n_ eq 1 then declare odsout Obj(); 
       SexName=ifc(Sex eq 'F','Féminin', 'Masculin');
       if first.Age then do;
          Obj.page();
          Obj.format_text(data:'Âge : ' !! Age !! ' ans', overrides:"font_size=5", just:'c');
       end;
       if first.Sex then Obj.format_text(data:'Sexe : ' !! SexName, overrides:"foreground=black font_weight=bold");
       Obj.layout_gridded(rows:1,overrides:" bordercolor=green ");
       Obj.region(row:1, width:"-5cm", overrides:"background=cx9abcde");
       Obj.format_text(data:Name, overrides:"foreground=black font_weight=bold ");
       Obj.layout_end();
       Obj.layout_gridded(rows:1, columns:2,overrides:"borderwidth=3 bordercolor=green ");
       Obj.region(row:1, column:1, width:"5cm", overrides:"background=cx9abcde");
       Obj.format_text(data:Height, overrides:"foreground=red");
       Obj.region(row:1, column:2, width:"10cm", overrides:"background=cx987214 bordercolor=red");
       Obj.format_text(data:weight);
       Obj.layout_end();
    run;
    ods pdf close;
    ods listing;
    title;

    2/
    2) je souhaiterais aussi que les noms des personnes soient justifiées à gauche.
    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
    options leftmargin = 2 cm;
    ods listing close;
    ods pdf file="c:\sas\Temp.pdf";
    ods escapechar="^";
    proc sort data=sashelp.class out=Temp; by Age Sex; run;
    data _null_;
       set Temp end=FinTable;
       by Age Sex;
       if _n_ eq 1 then declare odsout Obj(); 
       SexName=ifc(Sex eq 'F','Féminin', 'Masculin');
       if first.Age then do;
          Obj.page();
          Obj.format_text(data:'Âge : ' !! Age !! ' ans', overrides:"font_size=5", just:'c');
       end;
       if first.Sex then 
       Obj.format_text(data:'Sexe : ' !! SexName, overrides:"foreground=black font_weight=bold");
       Obj.format_text(data:name, overrides:"foreground=black font_weight=bold");
     
       Obj.layout_gridded(rows:1,columns:2, overrides:"borderwidth=3 bordercolor=green vjust=middle");
       Obj.region(row:1, column:1, width:"5cm", overrides:"background=cx9abcde");
       Obj.format_text(data:Height, overrides:"foreground=red");
       Obj.region(row:1, column:2, width:"10cm", overrides:"background=cx987214 bordercolor=red");
       Obj.format_text(data:weight);
       Obj.layout_end();
    run;
    ods pdf close;
    ods listing;
    title;

    Cordialement
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  9. #9
    Membre actif
    Inscrit en
    Novembre 2003
    Messages
    543
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 543
    Points : 239
    Points
    239
    Par défaut
    Merci pour ces réponses.
    PS. Finalement, le code nécessaire pour faire ce qu'on veut avec ODSOUT est bien compliqué, pour ne pas dire dissuasif.

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/06/2011, 14h42
  2. Réponses: 3
    Dernier message: 17/02/2011, 22h30
  3. Réponses: 0
    Dernier message: 21/10/2010, 15h13

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