Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS Base
SAS Base Forum d'entraide sur SAS base : étape data, procédures non statistiques, procédures non graphiques, SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/01/2011, 10h36   #1
Invité régulier
 
Inscription : avril 2009
Messages : 23
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 23
Points : 9
Points : 9
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 :
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 !!
yahnou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 10h43   #2
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
tu peux créer une variable au type caractère:

Code :
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;
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 10h47   #3
Membre Expert
 
Inscription : mars 2005
Messages : 1 010
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 010
Points : 1 258
Points : 1 258
Envoyer un message via Yahoo à bahraoui
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
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 11h41   #4
Invité régulier
 
Inscription : avril 2009
Messages : 23
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 23
Points : 9
Points : 9
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.
yahnou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 11h46   #5
Membre Expert
 
Inscription : mars 2005
Messages : 1 010
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 010
Points : 1 258
Points : 1 258
Envoyer un message via Yahoo à bahraoui
le format répond aussi à ton problème.
Code :
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;
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 11h54   #6
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
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)
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 12h04   #7
Invité régulier
 
Inscription : avril 2009
Messages : 23
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 23
Points : 9
Points : 9
Effectivement, j'ai fait ça et ça fonctionne très bien.

Code :
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.
yahnou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 12h22   #8
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
exact, mais ce que je voulais dire c'est que c'est possible en une ligne:

Code :
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
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 12h54   #9
Membre Expert
 
Inscription : mars 2005
Messages : 1 010
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 010
Points : 1 258
Points : 1 258
Envoyer un message via Yahoo à bahraoui
Citation:
Envoyé par yahnou Voir le message
Effectivement, j'ai fait ça et ça fonctionne très bien.

Code :
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
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 13h33   #10
Invité régulier
 
Inscription : avril 2009
Messages : 23
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 23
Points : 9
Points : 9
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 :
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 ?
yahnou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 13h51   #11
Rédacteur
 
Homme Stéphane
Consultant et formateur SAS et Cognos
Inscription : avril 2009
Messages : 1 791
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Consultant et formateur SAS et Cognos
Secteur : Conseil

Informations forums :
Inscription : avril 2009
Messages : 1 791
Points : 4 012
Points : 4 012
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
__________________
N'oubliez pas de cliquer sur lorsque votre problème est réglé !

Moteur de recherche dans les papiers SAS
datametric est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/01/2011, 13h54   #12
Membre Expert
 
Inscription : mars 2005
Messages : 1 010
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 010
Points : 1 258
Points : 1 258
Envoyer un message via Yahoo à bahraoui
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].
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 14h01   #13
Membre Expert
 
Inscription : mars 2005
Messages : 1 010
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 010
Points : 1 258
Points : 1 258
Envoyer un message via Yahoo à bahraoui
Une autre solution avec un picture comme proposé par datametric
Code :
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;
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h52.


 
 
 
 
Partenaires

Hébergement Web