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 :

%scan dans un if


Sujet :

Macro

  1. #1
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut %scan dans un if
    Bonsoir,

    Je cherche à scanner le nom d'un dataset pour entrer dans un if.
    Chaque nom est de la forme:
    abc_def ou bien abc_def_wd.
    Je ne veux que ceux qui terminent par wd.

    Les codes suivants ne marchent pas (ils sont dans une macro)

    1er essai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	%if %scan(&dataset,-1,'_')='wd' %then %do;
    		%put "dans le if";
    	%end;
    2ème essai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	%if %scan(&dataset,-1,"_")="wd" %then %do;
    		%put "dans le if";
    	%end;
    3ème essai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	%if %scan(&dataset,3,'_')='wd' %then %do;
    		%put "dans le if";
    	%end;
    4ème essai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	%if %scan(&dataset,3,"_")="wd" %then %do;
    		%put "dans le if";
    	%end;
    5ème essai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	%if scan(&dataset,3,'_')='wd' %then %do;
    		%put "dans le if";
    	%end;
    Hormis le 5ème essai, ces codes ne génèrent pas d'erreurs mais aucun n'affiche "dans le if".

    Merci de votre aide.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 249
    Points : 290
    Points
    290
    Par défaut
    Bonjour,

    Heu... As-tu essayé d'enlever quotes/guillemets autour de wd ?
    (et aussi autour de dans le IF pourquoi pas, soyons fous !)
    Le cinquième essai génère une erreur parce-que scan est une fonction de BASE utilisée pour une MACRO-VARIABLE...
    Les autres tests fonctionnent mais recherchent la valeur 'wd' ou "wd" dans la macro-variable dataset, or elle ne contient que wd, le test n'est donc JAMAIS vérifié.
    En macro-langage TOUS les caractères comptent.
    Les quotes interdisent au macro-langage de résoudre d'éventuelles macro-variables en leur sein.
    Les guillemets autorisent le macro-langage à résoudre d'éventuelles macro-variables en leur sein.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    %macro test (dataset) ;
       %if %scan(&dataset,-1,'_')= wd %then %do ;
          %put dans le if ;
       %end;
       %else %do ;
          %put pas dans le if ;
       %end ;
    %mend test ;
    %test(abc_def_wd) ;
    Bon courage !
    Bruno

  3. #3
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    euh, ben non, ça ne m'était meme pas venu à l'idée
    ça me paraissait tellement logique de le mettre entre guillemets.
    en fait, j'avais déjà utilisé scan mais pas dans une macro. je m'étais dit que tout serait pareil sauf le % devant scan .

    j'ai pas testé ton code car je ne pourrai le faire que demain matin, mais je me doute bien que ça fonctionne donc je mets résolu.

    une nouvelle fois merci pour ton code et aussi pour tes explications toujours claires .

    bonne soirée

  4. #4
    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
    Comme tout est du texte, du point de vue du compilateur macro, les guillemets sont rarement indispensables dans les instructions qui relèvent de sa compétence. C'est pour ça qu'on n'écrit pas %LET mv = "toto" ; sauf si on veut que les guillemets fassent partie de la valeur.
    Dans ton cas, il n'y a pas non plus besoin de guillemets dans les arguments de %SCAN.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    %macro test (dataset) ;
       %IF %scan(&dataset,-1,_)= wd %then %do ;
          %put dans le IF ;
       %end;
       %else %do ;
          %put pas dans le IF ;
       %end ;
    %mend test ;
    %test(abc_def_wd) ;
    %test(abc_def) ;
    Mais au final, ton raisonnement se tient : une macro-fonction, c'est souvent comme une fonction SAS de même nom, sauf que les arguments sont des variables macro, qu'il y a des % partout... et qu'il ne faut souvent pas de guillemets !
    Olivier
    Bon courage.
    Olivier

  5. #5
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    Merci pour le complément d'informations.

    Vivement le jour où je vais maitriser (les bases de) sas (si, si, ce jour viendra ... ).

    a+

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/06/2015, 10h02
  2. [11gR2] 98% de consommation CPU pour un full scan dans real-time monitoring
    Par zidane2012 dans le forum Oracle
    Réponses: 7
    Dernier message: 12/05/2014, 11h41
  3. [ObjC] Récupérer une valeur depuis un scan dans une autre vue
    Par krm666 dans le forum Autres langages
    Réponses: 0
    Dernier message: 09/08/2012, 12h37
  4. Scanning dans une page web avec java
    Par Lex Lutteur dans le forum Développement Web en Java
    Réponses: 8
    Dernier message: 21/06/2007, 17h29
  5. scan champs dans formulaire php
    Par khaled_dev dans le forum Langage
    Réponses: 3
    Dernier message: 05/04/2007, 16h47

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