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 :

Test logique sur macro variable contenant un numérique : %eval ou %sysevalf


Sujet :

Macro

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Test logique sur macro variable contenant un numérique : %eval ou %sysevalf
    Bonjour,

    Quelqu'un peut-il m'expliquer pourquoi le code ci-dessous ne fonctionne pas ?

    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
    %macro essai; 
     
        %let a=1.0000; 
        %let b=-1.4512;
     
        %if (&a) > 0 %then %put "a positif" ; 
        %else %put "a negatif"; 
     
        %if (&b) > 0 %then %put "b positif" ; 
        %else %put "b negatif"; 
     
     
    %mend essai; 
     
    %essai;
    J'ai essayé d'utiliser un %eval / %sysevalf. J'arrive à avoir un résultat pour a qui est positif, mais le fait que b soit négatif créé une erreur.
    Voici l'erreur obtenue :

    "a positif"

    ERROR: A character operand was found in the %EVAL function or %IF condition where a numeric
    operand is required. The condition was: (&b) > 0
    ERROR: The macro ESSAI will stop executing.
    Merci beaucoup de votre aide.

  2. #2
    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,
    Vous devez utiliser la fonction SYSEVALF% pour évaluer les expressions logiques contenant la virgule flottante pour les valeurs des deux macros. Voici votre code rectifié et ça va marcher.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    %macro essai;
    %let a=1.0000;
    %let b=-1.4512;
    %if %sysevalf(&a > 0) %then %put "a positif" ;
    %else %put "a negatif";
     
    %if %sysevalf(&b > 0) %then %put "b positif" ;
    %else %put "b negatif";
    %mend essai;	%essai;
    Cordialement
    Ward

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Bonjour,
    C'est nickel !
    Merci beaucoup pour votre retour rapide.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/04/2011, 17h02
  2. [XL-2003] Test logique sur "#N/A"
    Par jm6570 dans le forum Excel
    Réponses: 2
    Dernier message: 21/01/2010, 09h56
  3. Forcer une macro variable a être numérique
    Par stefsas dans le forum Macro
    Réponses: 2
    Dernier message: 20/06/2008, 15h43
  4. Test multiple sur une variable non définie
    Par Rei Angelus dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 12/12/2007, 22h01
  5. Tests logiques sur les flags : cmp /jna
    Par lylia SI dans le forum Assembleur
    Réponses: 2
    Dernier message: 27/09/2006, 17h42

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