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 Base Discussion :

Forcer 2 chiffres après la virgule [DATA]


Sujet :

SAS Base

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 31
    Points : 41
    Points
    41
    Par défaut Forcer 2 chiffres après la virgule
    Hola !
    Ma question peut paraitre bidon mais bizarrement impossible d'y trouver une réponse.
    Je cherche à arrondir un chiffre à 2 chiffres après la virgule.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Var1=19.987;
    Var2=19.102;
    Var1b=round(Var1,.01);
    Var2b=round(Var2,.01);
    Pour Var1b, pas de soucy, on obtient 19.99
    Pour Var2b, on obtient 19.1.... Et mon problème est que j'aimerais avoir 19.10 !!

    L'application d'un format x.2 ne résout pas mon problème car ce n'est qu'un format d'affichage. Je veux réellement avoir le chiffre 19.10.

    En vous remerciant par avance !!

  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
    tu peux créer une variable au type caractère:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    data test;
    Var1=19.987;
    Var2=19.102;
    Var1b=round(Var1,.01);
    Var2b=round(Var2,.01);
    var1c=put(var1, 6.2);
    var2c=put(var2, 6.2);
    run;

  3. #3
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Bonjour,

    Je ne comprends pas ce que tu veux dire par "Je veux réellement avoir le chiffre 19.10."?
    Pourquoi le format x.2 ne répond pas à ton besoin?
    C'est quoi ton objectif?

    Salah

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 31
    Points : 41
    Points
    41
    Par défaut
    Mon objectif est ensuite de concaténer plusieurs cellules afin d'obtenir par exemple :

    Var2c=19.10 (45.20%)

    Du coup, la solution de Manoutz est parfaite !!
    Je vous remercie pour votre aide.

  5. #5
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    le format répond aussi à ton problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    data t;
    Var1=19.987;
    Var2=19.102;
    Var1b=round(Var1,0.01);
    format var2b 5.2;
    *informat var2b 5.2;
    Var2b=round(Var2,0.01);
    run;
    proc print data=t;run;

  6. #6
    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
    Etant donné que l'objectif à terme est la fusion avec une autre donnée - le pourcentage - je pense qu'il est mieux de passer au type caractère. Tant qu'a faire autant tout fusionner en une seule instruction (passe ta valeur en x.2 et concatène avec ton pourcentage)

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 31
    Points : 41
    Points
    41
    Par défaut
    Effectivement, j'ai fait ça et ça fonctionne très bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Min=put(round(&var._Min,.01),6.2);
    Max=put(round(&var._Max,.01),6.2);
    Range="["||compress(Min)||" - "||compress(Max)||"]";

    bahraoui, avec la méthode du format, je me retrouve avec 19.1 et non 19.10 dans ma variable Range.

  8. #8
    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
    exact, mais ce que je voulais dire c'est que c'est possible en une ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range="["||compress(put(round(&var._Min,.01),6.2))||" - "||compress(put(round(&var._Max,.01),6.2))||"]";
    peut être un peu moins digeste mais tout aussi compréhensible

  9. #9
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Citation Envoyé par yahnou Voir le message
    Effectivement, j'ai fait ça et ça fonctionne très bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Min=put(round(&var._Min,.01),6.2);
    Max=put(round(&var._Max,.01),6.2);
    Range="["||compress(Min)||" - "||compress(Max)||"]";

    bahraoui, avec la méthode du format, je me retrouve avec 19.1 et non 19.10 dans ma variable Range.
    Je ne trouve pas la même chose que toi!!! est ce que tu as testé mon exemple?

    Obs Var1 Var2 Var1b var2b

    1 19.987 19.102 19.99 19.10

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 31
    Points : 41
    Points
    41
    Par défaut
    On peut le faire en une seule ligne mais pour plus de clarté, je préfère détailler les différentes étapes... Surtout que j'utilise le Min et le Max pour autre chose par la suite...

    Sinon, barhaoui, j'ai bien testé ton exemple de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DATA t;
    Var1=19.987;
    Var2=19.102;
    Var1b=round(Var1,0.01);
    format var2b 5.2;
    Var2b=round(Var2,0.01);
    Range="["||compress(Var1b)||" - "||compress(Var2b)||"]";
    run;
    J'obtiens Range=[19.99 - 19.1]
    Il y a peut-être un truc qui m'échappe ?

  11. #11
    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
    Excusez moi de me mêler de tout cela mais pourquoi ne pas faire un PICTURE avec un .99 pour les décimales ?

    http://support.sas.com/documentation...a002473467.htm

  12. #12
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Ok, 19.10 et 19.1 c'est la même chose; je crois que c'est pour cela qu'il supprime le 0, même si on le voit bien dans la table.
    La solution est de passer par des chaînes de caractères [solution de Manoutz].

  13. #13
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Une autre solution avec un picture comme proposé par datametric
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    proc format;
    picture toto low-high='0099.99';
    run;
     
    data t;
    Var1=19.987;
    Var2=19.102;
    format Var1a toto.;
    format Var2a toto.;
    Var1a=Var1;
    Var2a=Var2;
    Range="["||compress(Var1a)||" - "||compress(Var2a)||"]";
    run;

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

Discussions similaires

  1. Forcer le résultat à 2 chiffres apres la virgule
    Par laguine666 dans le forum Général Python
    Réponses: 7
    Dernier message: 22/04/2009, 23h15
  2. Double : forcer 2 chiffres après la virgule
    Par womannosky dans le forum Langage
    Réponses: 2
    Dernier message: 15/01/2009, 16h18
  3. Chiffres après la virgule figés
    Par bondjames dans le forum Bases de données
    Réponses: 6
    Dernier message: 10/03/2004, 23h09
  4. [MFC] Nombre de chiffres après la virgule
    Par karl3i dans le forum MFC
    Réponses: 3
    Dernier message: 27/01/2004, 13h04
  5. Nb de chiffres après la virgule ?
    Par Thcan dans le forum C
    Réponses: 10
    Dernier message: 17/09/2003, 21h49

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