1. #1
    Membre habitué
    Inscrit en
    novembre 2003
    Messages
    380
    Détails du profil
    Informations forums :
    Inscription : novembre 2003
    Messages : 380
    Points : 178
    Points
    178

    Par défaut Mot TOTAL tronqué dans la proc report

    Bonjour,

    Voilà, j'ai un problème tout simple mais qui me semble très compliqué à résoudre.
    Voici un petit exemple avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    proc report data=sashelp.class nowd headline;
    	column Sex Height;
    	define Sex / groups;
    	define Height / sum;
    	rbreak after / summarize skip ol;
    	compute after; Sex='Total'; endcomp;
    run;
    Comme le montre la dernière ligne de la PROC, je cherche à insérer le mot TOTAL à la fin de mon tableau.
    Il ne veut pas puisque la variable SEX a une longueur de 1 caractères.
    Le mot est tronqué ; seul subsiste le 'T'.
    Quelqu'un sait-il comment faire pour que mon total puisse avoir le mot TOTAL ?

  2. #2
    Membre confirmé
    Inscrit en
    novembre 2009
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 302
    Points : 593
    Points
    593

    Par défaut

    Bonjour,

    Une proposition avec la proc tabulate :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    proc tabulate data=sashelp.class;
      class Sex;
      var Height;
      table (Sex='' ALL= "Total"), (Height * SUM='');
    run;
    Je vous conseille la page la procédure tabulate, sa vie, son œuvre d'Olivier Delcourt .

    Cordialement,

  3. #3
    Membre habitué
    Inscrit en
    novembre 2003
    Messages
    380
    Détails du profil
    Informations forums :
    Inscription : novembre 2003
    Messages : 380
    Points : 178
    Points
    178

    Par défaut

    Merci Mgdondon (décidément ! )
    Mais je souhaite vraiment utiliser la proc report et ne pas refaire tous les programmes que j'ai déjà construit avec elle.
    C'est une procédure compliquée que j'ai mis du temps à apprivoiser (pas complètement). Mais elle a des capacités intéressantes.
    Cordialement

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

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

    Informations forums :
    Inscription : janvier 2012
    Messages : 313
    Points : 1 102
    Points
    1 102

    Par défaut

    Houaa, la proc report ... il y a longtemps que je ne l'ai pas utilisé :-)

    de mémoire tu dois passer par une colonne calculée si tu ne veux pas modifier tes données d'entrée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    PROC REPORT DATA=sashelp.class NOWD ;
      COLUMNS sex sextotal Height;
      define sex / GROUP NOPRINT;
      define sextotal / COMPUTED "Age";
      define Height / SUM;
      rbreak after / SUMMARIZE ;
      compute sextotal / CHARACTER LENGTH=5 ;
        if _break_="_RBREAK_" then sextotal = "TOTAL" ;
    	else sextotal = sex ;
      endcomp ;
    RUN ;
    Bon courage

  5. #5
    Membre expert
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    avril 2008
    Messages
    1 789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : avril 2008
    Messages : 1 789
    Points : 3 955
    Points
    3 955

    Par défaut

    Autre solution pour éviter la variable calculée et la variable cachée dans la solution d'Edward, affecter à SEX une valeur qu'elle n'a pas par ailleurs au niveau de la ligne de récapitulatif (mettons SEX="T" par exemple) et ajouter un format pour habiller la valeur "T" en "TOTAL".
    Bon courage.
    Olivier

  6. #6
    Membre confirmé
    Inscrit en
    novembre 2009
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 302
    Points : 593
    Points
    593

    Par défaut Proc report

    Bonjour,

    Si un jour le cœur vous en dit, je serais intéressée par une fiche sur la proc report dans la série SAS expliqué à ma fille.

    Merci beaucoup pour vos différents tutoriels,

    Cordialement,

  7. #7
    Membre habitué
    Inscrit en
    novembre 2003
    Messages
    380
    Détails du profil
    Informations forums :
    Inscription : novembre 2003
    Messages : 380
    Points : 178
    Points
    178

    Par défaut

    Bonjour à tous

    Merci pour vos réponses.
    Revoici le même code avec la solution d'Olivier dont je recommande le livre "Reporting avec SAS".
    Ça fonctionne parfaitement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    proc format; value $Fmt 'T'='Total'; run;
    proc report data=sashelp.class nowd headline;
    	column Sex Height;
    	define Sex / group format=$Fmt.;
    	define Height / sum;
    	rbreak after / summarize skip ol;
    	compute after; Sex='T'; endcomp;
    run;

  8. #8
    Membre habitué
    Inscrit en
    novembre 2003
    Messages
    380
    Détails du profil
    Informations forums :
    Inscription : novembre 2003
    Messages : 380
    Points : 178
    Points
    178

    Par défaut

    En fait, ce n'est pas complètement résolu.

    Si je reprends le code précédent en remplaçant la variable Sex par la variable Name qui contient plus de caractères, l'utilisation du format limite l'affichage de la variable Name à la taille du mot "Total", 5 caractères.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    proc format; value $Fmt 'T'='Total'; run;
    proc report data=sashelp.class nowd headline;
    	column Name Height;
    	define Name / width=10 format=$Fmt.;
    	define Height / sum;
    	rbreak after / summarize skip ol;
    	compute after; Sex='T'; endcomp;
    run;
    L'introduction de l'option width ne change rien.
    Une solution est bien sur de modifier la taille de ce mot 'Total' comme ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    proc format; value $Fmt 'T'='Total        '; run;
    proc report data=sashelp.class nowd headline;
    	column Name Height;
    	define Name / format=$Fmt.;
    	define Height / sum;
    	rbreak after / summarize skip ol;
    	compute after; Sex='T'; endcomp;
    run;
    Mais ce n'est pas satisfaisant, ou beaucoup plus compliqué, car je souhaite in fine, enfermer ce type d'instructions dans une macro. Il faudrait alors que je calcule lors de chaque appel de la macro le nombre de blancs nécessaires.

    N'y a-t-il pas une autre solution plus simple ?

Discussions similaires

  1. libellé du total de lignes dans une proc report
    Par enicnath dans le forum ODS et reporting
    Réponses: 2
    Dernier message: 23/07/2010, 08h37
  2. Saut de ligne dans une proc report et ODS tagset.ExcelXP
    Par l'breton du 29 dans le forum ODS et reporting
    Réponses: 2
    Dernier message: 22/07/2009, 19h42
  3. array dans une proc report pour surligner certaines cellules
    Par debdev dans le forum ODS et reporting
    Réponses: 3
    Dernier message: 26/06/2009, 15h31
  4. Saut de ligne dans une proc report (ou print)
    Par nunien22 dans le forum ODS et reporting
    Réponses: 7
    Dernier message: 10/03/2009, 10h11
  5. Afficher les espaces dans une PROC REPORT
    Par Fatah93 dans le forum ODS et reporting
    Réponses: 6
    Dernier message: 07/05/2008, 21h30

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