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 20/12/2011, 12h41   #1
Invité de passage
 
Inscription : février 2005
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12
Points : 3
Points : 3
Par défaut Précision calcul insuffisante

Bonjour,
Je souhaite effectuer un petit calcul sur SAS (un produit suivi d'un quotient, avec des réels), mais le résultat est erroné en raison des arrondis qu'effectue SAS. Les nombres servant au calcul sont stockés correctement mais ils sont arrondis pour le calcul (lorsque je fais un "proc print" sur ces variables, il affiche d'ailleurs ces valeurs arrondies). Comment faire pour que SAS effectue le calcul correctement, sans effectuer d'arrondi ? Merci !
jlp65 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 13h09   #2
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 150
Points : 1 772
Points : 1 772
Tu peux utiliser la fonction round(). Il y a des posts a ce sujet il me semble. N'hesites pas a revenir vers nous si ca ne conveint pas exactement a ce que tu veux faire.
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 13h13   #3
Invité de passage
 
Inscription : février 2005
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12
Points : 3
Points : 3
En fait, ce que je voudrais faire, ce serait plutôt l'inverse : "dérounder" ! C'est SAS qui semble utiliser subrepticement, sans qu'on le lui demande, la fonction round !
jlp65 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 13h22   #4
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 150
Points : 1 772
Points : 1 772
Ok je vois ce que tu veux faire. Tu peux nous faire parvenir un cas avec donnes et code stp?
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 13h42   #5
Invité de passage
 
Inscription : février 2005
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12
Points : 3
Points : 3
Oui . Voici le code ;
Code :
DATA t;SET t;x_cale=calage*x/x_sum;run;
Pour la table, comme je ne sais pas comment l'insérer, la voici "en format texte" :
calage= 78
x = 1.7999997139
x_sum=49.119992971
et x_cale=2.4411764706 (au lieu de 2.85830614360451)

En attendant, je regarde comment insérer une table

Merci !
jlp65 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 14h01   #6
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 828
Points : 2 828
Curieux parce qu'avec tes données j'ai bien :
Code :
1
2
3
4
5
6
7
DATA t ;
calage= 78 ;
x = 1.7999997139 ;
x_sum=49.119992971 ;
x_cale=calage*x/x_sum;
PUTLOG x_cale 32.20 ;
RUN ;
x_cale s'affiche comme 2.85830614363261000000 !

Peux-tu regarder quelles sont les longueurs (LENGTH) des variables CALAGE, X, X_SUM et X_CALE ?
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 14h06   #7
Invité de passage
 
Inscription : février 2005
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12
Points : 3
Points : 3
Les longueurs sont toutes à 8, sauf Calage qui est à 6
jlp65 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 14h19   #8
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 012
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

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

Informations forums :
Inscription : février 2011
Messages : 1 012
Points : 1 717
Points : 1 717
hello;
SAS arrondi au 14 éme chiffre après la virgule.
puis tu mets length 8. ; format 32.20 par exemple ( pour l'affichage).

Code :
1
2
3
4
5
6
7
8
9
10
 
DATA t ;
length x_cale 8.;
format 32.20 
calage= 78 ;
x = 1.7999997139 ;
x_sum=49.119992971 ;
x_cale=calage*x/x_sum;
*PUTLOG x_cale 32.20 ;
RUN ;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 14h29   #9
Invité de passage
 
Inscription : février 2005
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12
Points : 3
Points : 3
Ah ben oui ! En spécifiant la longueur de x_cale à 8, cela fonctionne correctement. Bizarre, car la longueur était pourtant déjà à 8 (par défaut) : c'est la raison pour laquelle je pensais que le problème ne venait pas de là !

Merci !
jlp65 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 20h31.


 
 
 
 
Partenaires

Hébergement Web