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 :

define noprint pour certaines valeurs dans proc report


Sujet :

ODS et reporting

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 20
    Points : 12
    Points
    12
    Par défaut define noprint pour certaines valeurs dans proc report
    Bonjour,
    je voulais savoir si il est possible de mettre noprint sur une variable across selon les valeurs de cette variable.

    Concretement, j'ai une variable mois avec les valeurs janvier...décembre, et je voudrais mettre noprint pour les mois après mai.
    Je ne peux pas mettre un where car j'ai besoin des valeurs des mois qui ne sont pas affichés. En effet, la première colonne de mon tableau fait la somme sur l'année,si je met un where j'ai le total que pour les 5 premiers mois.

    Merci pour votre aide.

  2. #2
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    Si tu met l'option across, une colonne va être créée pour chaque catégorie. Ta somme reflètera toutes les catégories, donc il me semble que ce que tu veux faire ne peut être effectué en une étape. Le noprint s'applique sur une variable.

    A priori je partirais sur une solution en deux étape: je commencerais par créer une nouvelle (treizième) modalité correspondant à la somme annuelle.

    Ensuite dans la proc report je génèrerais une sortie avec les 5 premiers mois et la somme (qui deviendra une sixième colonne dans ton across-> c'est bien la présentation que tu souhaites?)

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    J'ai une table de départ qui est assez grosse. De plus, pour chaque mois, je regarde ensuite les valeurs pour différentes années. Ca me paraît donc compliqué de faire comme ca pour chaque année.

    Est-ce qu'il n'y a pas possibilité de creer mon tableau pour les 12 mois et de demander à la proc report de me sortir que les 15 premières colonnes par exemple?

  4. #4
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    Peux tu fournir tes données (modifiées si gênant, ou seulement une partie tant que ça reste représentatif) ainsi ainsi que la présentation escomptée en sortie?

  5. #5
    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 Servane.
    Si je comprends bien, tu as une colonne par mois et pas l'envie de voir les mois qui ne sont pas encore d'actualité pour certaines années.
    Comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    PROC REPORT DATA=sashelp.prdsale (WHERE=(month < "01APR1994"D))
    			NOWD ;
    	COLUMNS country year,(month,actual) ;
    	DEFINE country / GROUP ;
    	DEFINE year / ACROSS ORDER=INTERNAL ;
    	DEFINE month / ACROSS ORDER=INTERNAL ;
    	DEFINE actual / ANALYSIS SUM ;
    RUN ;
    Si ça ressemble à ce cas, tu ferais mieux de produire ton tableau avec une proc TABULATE qui est plus souple sur la mise en colonnes de certaines variables : ici tu n'auras directement que les colonnes pertinentes (ce qui n'empêche pas des totaux avec ALL).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PROC TABULATE DATA=sashelp.prdsale (WHERE=(month < "01APR1994"D)) ;
    	CLASS year month country ;
    	VAR actual ;
    	TABLE country, year*month*actual*SUM="" ;
    RUN ;

  6. #6
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Je ne peux pas utilisé la proc tabulate car j'ai besoin d'une mise en page précise sur mon tableau. J'ai besoin de mettre des couleurs différentes sur une même colonne en fonction d'une variable.

    J'aimerai un tableau dans ce genre (voir piece jointe)

    Dans la colonne annee 2010: je veux le total sur toute l'annee 2010
    Dans la colonne annee 2011: je veux le total sur toute l'annee 2011
    Après pour chaque mois, je veux les totaux pour chaque annee ainsi que l'evolution entre ces deux dates, mais je voudrais qu'il m'affiche les groupes de colonnes (2010 2011 evolution) seulement pour les mois de janvier à mai.

    Si j'utilise un where=(mois<=mai) dans le total annee 2010, je n'ai pas les données de juin 2010 à décembre 2010.
    Images attachées Images attachées  

  7. #7
    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
    Comme proposait Manoutz, il faut décomposer en 2 étapes, 1 pour calculer les sommes annuelles (et les autres tant qu'on y est) puis REPORT avec un WHERE pour organiser tout ça.
    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
    ODS OUTPUT summary = work.stats ;
    PROC MEANS DATA=sashelp.prdsale (WHERE=(month < "01APR1994"D))
    			SUM ;
    	VAR actual ;
    	CLASS product year month ;
    	TYPES product*year product*year*month ;
    RUN ;
    PROC REPORT DATA=work.stats (RENAME=(actual_sum=actual)
    								 WHERE=(MONTH(month)<5))
    			NOWD ;
    	COLUMNS product year,actual month,(year=year2,actual=actual2) ;
    	DEFINE product / GROUP ;
    	DEFINE year / ACROSS ORDER=INTERNAL ;
    	DEFINE actual / ANALYSIS SUM ;
    	DEFINE year2 / ACROSS ORDER=INTERNAL ;
    	DEFINE month / ACROSS ORDER=INTERNAL ;
    	DEFINE actual2 / ANALYSIS SUM ;
    RUN ;
    Bon courage.
    Olivier

  8. #8
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Bonjour Manoutz et Olivier!
    J'ai suivi vos conseils et j'ai donc utilisé le code proposé par Olivier (sauf le
    (WHERE=(month < "01APR1994"D)) dans la proc means car je ne comprends pas son utilité.
    La proc means fonctionne bien, j'ai bien les totaux que j'attends.

    Par contre, à l'exécution de la proc means je retrouve le même résultat qu'avant. J'ai toujours pour la somme de l'année, la somme des 5 premiers mois.

    J'ai essayé de refaire une étape data après la proc means afin de créer une nouvelle variable (var1) qui vaut actual_sum si month=. et . sinon.
    Dans la proc report j'ai ensuite changer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COLUMNS product year,actual month,(year=year2,actual=actual2) ;
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COLUMNS product year,var1 month,(year=year2,actual=actual2) ;
    et je n'obtiens que des valeurs manquantes pour le total à l'année.

  9. #9
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    Tu as du commettre quelques erreurs. Le code d'Olivier est particulièrement puissant. Chapeau bas..

    J'ai rajouté quelques petites astuces pour bien coller à ta demande. Par contre je n'ai pas réussi à éviter une mini étape data pour renommer la catégorie "total" de la variable country - en tant que valeur manquante, elle n'est pas affichée.

    Reste quelques modifs minimes pour gérer l'ordonnacement et les couleurs, mais c'est broutilles.

    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
    ODS OUTPUT summary = work.stats(where=(month(month)<6)) ;
    PROC MEANS DATA=sashelp.prdsale 
    			SUM ;
    	VAR actual ;
    	CLASS product country year month ;
    	TYPES product*year*month product*country*year product*country*year*month ;
    RUN ;
     
    data stats;
    set stats;
    if compress(country) in ("") then country="TOTAL";
    run;
     
    ods pdf file="c:\est.pdf";
    PROC REPORT DATA=work.stats (RENAME=(actual_sum=actual)
    								 WHERE=(MONTH(month)<6))
    			NOWD ;
    	COLUMNS product  country year,actual month,(year=year2,actual=actual2) ;
    	DEFINE product / GROUP ;
    	DEFINE country / GROUP ;
    	DEFINE year / ACROSS ORDER=INTERNAL ;
    	DEFINE actual / ANALYSIS SUM ;
    	DEFINE year2 / ACROSS ORDER=INTERNAL ;
    	DEFINE month / ACROSS ORDER=INTERNAL ;
    	DEFINE actual2 / ANALYSIS SUM ;
    	compute year;
    		if country in ("TOTAL") then call define(_row_,'style', 'style=[background=blue]');
     
    		if country in ("CANADA") and PRODUCT in ("BED") then call define(_col_,'style', 'style=[background=yellow]');
    	endcomp;
    RUN ;
    ods pdf close;

  10. #10
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Merci à tous les deux, ca y est cela fonctionne. Finalement dans la proc report j'ai marqué

    COLUMNS product month,(year=year2,actual=actual2) ;

    et j'ai ajouté missing dans le define de la variable month.
    Ainsi, sas considère la valeur . de la variable mois comme le total à l'année..et hop ca fonctionne!!

    Merci encore à Manoutz et Olivier.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/07/2013, 14h35
  2. Supression dans une table sauf pour certaine valeurs
    Par Nikimizi dans le forum Langage SQL
    Réponses: 4
    Dernier message: 08/03/2013, 15h15
  3. Réponses: 3
    Dernier message: 12/05/2008, 09h10
  4. Réponses: 6
    Dernier message: 15/02/2008, 11h10
  5. Couleur pour certains jours dans un calendrier
    Par striker90 dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/05/2006, 21h22

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