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 :

Petite macro qui ne me donne pas le résultat escompté


Sujet :

Macro

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Pays-Bas

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Petite macro qui ne me donne pas le résultat escompté
    Bonsoir

    j'ai un souci avec cette petite macro:

    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
     
     
     
    data sc;
    input tt  rr;
    CARDS;
    0 1
    1 3 
    2 4 
    ;
    run;
     
     
    %macro cond(dss,dsn,trt);
     
    data &dss; 
    	set &dsn;
    	%if &trt=0 %then %do;
    	    rr=9;
    	%end;
    	%if &trt=1 %then %do;
    		rr=8;
    	%end;
    	%else %do ; 
    	rr=7;
    	%end;
    run;
    %mend;
     
    %cond(fin,sc,tt);
    Les valeurs attendues pour rr devraient être (7 8 9 ). Or j'obtiens (7 7 7), c'est comme sila macro ne s’exécutait que pour la dernière condition. J'ai transposer ce code dans un simple data step et là ça marche...Avez vous une explication ?

    Merci d'avance

    Marcus

  2. #2
    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 : 47
    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
    Bonjour Marcus.
    Ton code illustre parfaitement la différence de fonctionnement entre un IF et un %IF, qui sont deux instructions très différentes.
    IF est une instruction de l'étape DATA, qui est exécutée par le compilateur SAS, à chaque observation lue dans les données en entrée. Les conditions portent sur les valeurs d'une variable SAS pour l'observation en cours.
    %IF est une instruction macro, exécutée par le compilateur macro avant toute exécution de code SAS. Les conditions portent sur des valeurs de macro-variables, et le résultat est un morceau de code, pas une action.

    Pour avoir ton résultat espéré, laisse des IF normaux dans ton code.
    Avec ton %IF actuel, comme le compilateur macro ne connaît pas les variables SAS, les conditions &trt=1 est évaluée à tt=1, ce qui signifie pour le compilateur macro "est-ce que le texte tt est le même que le texte 1 ?". C'est évidemment faux, donc on saute au %ELSE.

    Une dernière chose :
    IF cas1 THEN ...code1 ;
    IF cas2 THEN ...code2 ;
    ELSE ...code3 ;
    (avec IF ou %IF d'ailleurs) quand cas1 est vrai, tu exécutes code1 ET code3. Un ELSE IF s'impose au milieu.

    Bon courage.
    Olivier

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Pays-Bas

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Bonjour Olivier

    Merci pour ton éclaircissement.

    Mcus

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

Discussions similaires

  1. Ma requête ne me donne pas le résultat escompté
    Par Invité dans le forum Langage SQL
    Réponses: 4
    Dernier message: 23/06/2014, 15h50
  2. Réponses: 2
    Dernier message: 22/10/2013, 11h35
  3. [XL-2003] pb sur formule qui ne donne pas le résultat escompté
    Par midge dans le forum Excel
    Réponses: 2
    Dernier message: 06/02/2011, 16h49
  4. [GNUPlot] Multiplot qui ne donne pas le résultat escompté
    Par Nicocot dans le forum Autres langages
    Réponses: 0
    Dernier message: 24/11/2008, 21h05
  5. Macro qui ne s'exécute pas dans formulaire
    Par picatchou dans le forum Access
    Réponses: 10
    Dernier message: 18/09/2006, 18h27

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