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 :

Précision calcul insuffisante


Sujet :

SAS Base

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 210
    Points : 147
    Points
    147
    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 !

  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 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.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 210
    Points : 147
    Points
    147
    Par défaut
    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 !

  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
    Ok je vois ce que tu veux faire. Tu peux nous faire parvenir un cas avec donnes et code stp?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 210
    Points : 147
    Points
    147
    Par défaut
    Oui . Voici le code ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  6. #6
    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 : 46
    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
    Curieux parce qu'avec tes données j'ai bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?
    Bon courage.
    Olivier

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 210
    Points : 147
    Points
    147
    Par défaut
    Les longueurs sont toutes à 8, sauf Calage qui est à 6

  8. #8
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2011
    Messages : 1 624
    Points : 3 402
    Points
    3 402
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ;
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 210
    Points : 147
    Points
    147
    Par défaut
    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 !

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

Discussions similaires

  1. Choisir la précision pour calculs en nombres flottants
    Par ciol2.6.12 dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 02/06/2008, 14h14
  2. Précision de calcul
    Par Mucho dans le forum Général Java
    Réponses: 10
    Dernier message: 21/02/2008, 14h02
  3. Précision de calculs trigo.
    Par Clad3 dans le forum C++
    Réponses: 11
    Dernier message: 23/10/2007, 14h07
  4. [VBA-E] Précision d'un calcul
    Par Elstak dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/04/2006, 10h05
  5. calcul de pi en multi précision
    Par nicors4 dans le forum C
    Réponses: 2
    Dernier message: 04/03/2006, 15h13

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