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

Macro Discussion :

%sysevalf donne des résultats différents selon les paramètres


Sujet :

Macro

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 71
    Points : 67
    Points
    67
    Par défaut %sysevalf donne des résultats différents selon les paramètres
    Bonjour,

    Lors d'une différence entre deux macro-variables, le résultat est de 0.3 ou 0.29999 selon les paramètres.
    Je ne comprend pas d'où vient cette différence.

    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
    /* Résultat donne 0.299999... */	
    %let max=2.3;
    %let nb=2;
    %let a=%sysevalf(&max.-&nb.);
    %put &a;
     
    %let max=4.70;
    %let nb=4.4;
    %let a=%sysevalf(&max.-&nb.);
    %put &a;
     
     
    /* Résultat donne 0.3 ou 1.3 */
    %let max=1.3;
    %let nb=1;
    %let a=%sysevalf(&max.-&nb.);
    %put &a;
     
    %let max=2.3;
    %let nb=1;
    %let a=%sysevalf(&max.-&nb.);
    %put &a;
    Log
    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
    33
    34
    35
    36
    37
    38
    25249  /* Résultat donne 0.299999... */
    25250  %let max=2.3;
    25251  %let nb=2;
    25252  %let a=%sysevalf(&max.-&nb.);
    SYMBOLGEN:  Macro variable MAX resolves to 2.3
    SYMBOLGEN:  Macro variable NB resolves to 2
    25253  %put &a;
    SYMBOLGEN:  Macro variable A resolves to 0.29999999999999
    0.29999999999999
    25254
    25255  %let max=4.70;
    25256  %let nb=4.4;
    25257  %let a=%sysevalf(&max.-&nb.);
    SYMBOLGEN:  Macro variable MAX resolves to 4.70
    SYMBOLGEN:  Macro variable NB resolves to 4.4
    25258  %put &a;
    SYMBOLGEN:  Macro variable A resolves to 0.29999999999999
    0.29999999999999
    25259
    25260
    25261  /* Résultat donne 0.3 ou 1.3 */
    25262  %let max=1.3;
    25263  %let nb=1;
    25264  %let a=%sysevalf(&max.-&nb.);
    SYMBOLGEN:  Macro variable MAX resolves to 1.3
    SYMBOLGEN:  Macro variable NB resolves to 1
    25265  %put &a;
    SYMBOLGEN:  Macro variable A resolves to 0.3
    0.3
    25266
    25267  %let max=2.3;
    25268  %let nb=1;
    25269  %let a=%sysevalf(&max.-&nb.);
    SYMBOLGEN:  Macro variable MAX resolves to 2.3
    SYMBOLGEN:  Macro variable NB resolves to 1
    25270  %put &a;
    SYMBOLGEN:  Macro variable A resolves to 1.3
    1.3
    Merci par avance.

    Cordialement,

    Aleksik

  2. #2
    Membre expérimenté
    Homme Profil pro
    Attaché statisticien
    Inscrit en
    Mai 2011
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Attaché statisticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 687
    Points : 1 581
    Points
    1 581
    Par défaut
    A priori ce sont des problèmes de représentation des nombres en virgules flottantes.

    Sur google mots clés : sas round error number
    Tu trouveras des papiers à ce sujet.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 483
    Points : 1 552
    Points
    1 552
    Par défaut
    Bonjour,
    C'est une proposition :
    Soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    %let max=2.3;
    %let nb=2;
    %let a=%sysfunc(putn(%sysevalf(&max.-&nb.), 5.1)) ;
    %put &a;
    Ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    %let max=2.3;
    %let nb=2;
    %let a=%sysfunc(putn(&max.-&nb., 5.1)) ;
    %put &a;
    Ward

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

Discussions similaires

  1. Taille des input différente selon les machines
    Par vias44 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 12/03/2014, 14h29
  2. Une même variable donne des résultats différents
    Par profilien dans le forum Langage
    Réponses: 5
    Dernier message: 23/04/2013, 09h14
  3. La même formule donne des résultats différents
    Par shadelv dans le forum Excel
    Réponses: 3
    Dernier message: 01/10/2012, 11h18
  4. Réponses: 0
    Dernier message: 07/05/2012, 18h13
  5. 2 executions d'un programe C graphique avec SDL me donne des résultats différents
    Par Brin d'if dans le forum Développement 2D, 3D et Jeux
    Réponses: 4
    Dernier message: 03/12/2007, 10h21

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