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 macro variable dans paramètre d'un macro programme


Sujet :

Macro

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 48
    Par défaut Test macro variable dans paramètre d'un macro programme
    Bonjour,

    Je vais essayer d'être claire dans ma question.
    Je souhaite contrôler que le paramètre entré dans le macro programme est bien une macro variable existante.
    Si il s'agit bien d'une macro variable existante,renseigner une macro variable à 1, sinon à 0.

    Comment est-il possible de tester ça ?

    Voici un code d'exemple, pour expliquer mon problème :

    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
    %LET parametre1 = A;
    %LET parametre2 = B;
    %LET parametre3 = C;
     
    %MACRO Test (parametre);
     
    	%PUT ***&parametre.***;
     
    	/* Je souhaiterais tester si la valeur entrée en paramètre est une macro variable                  */
    	/* et si cette macro variable existe bien, avant de faire l'étape DATA                             */
    	/* Si il s'agit bien d'une macro variable existante, %LET indic = 1,                               */
    	/* sinon (si ce n'est pas une macro variable ou si la macro variable n'existe pas), %LET indic = 0 */
     
    	%IF &indic. = 1 %THEN %DO;
     
    		DATA TEST2;
    			SET TEST
    			(WHERE = (VAR = "&parametre."));
    		RUN;
     
    	%END;
     
    %MEND Test;
     
    %Test (&parametre1.); /* Doit exécuter l'étape DATA */
    %Test (&parametre4.);	/* Ne doit pas exécuter l'étape DATA */
    %Test (D); /* Ne doit pas exécuter l'étape DATA */
    Merci de votre aide,

    delph_le

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

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 687
    Par défaut
    Bonjour,

    s'il s'agit du test de l'existence d'une macro variable, il semble que ce lien en traite (tapez "test macro variable exist sas" dans la barre de recherche de google )

    http://support.sas.com/kb/25/075.html

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 48
    Par défaut
    J'ai testé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %LET check = %SYMEXIST(parametre);
    mais cela me renvoie toujours 1 car "parametre" est un paramètre de mon programme.

    J'ai essayé avec la fonction RESOLVE mais ça ne fonctionne pas (ça me renvoie toujours 0) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DATA _NULL_;
    	X = RESOLVE('&parametre.');
    RUN;
     
    %LET check2 = %SYMEXIST(X);
    %PUT ***&check2.***;
    Comment faut-il que je fasse ?

    Merci

    delph_le

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

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 687
    Par défaut
    moi ça semble marcher...

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    %GLOBAL parametre1 parametre2 parametre3;
    %LET parametre1 = A;
    %LET parametre2 = B;
    %LET parametre3 = C;
     
     
    /* Version SAS 9.1 and above */
     
    /* Note: The & (ampersand) does not precede the macro variable name in */
    /* the argument to the function.                                       */
     
    %let check=%symexist(x);
     
     
    /* Prior to SAS 9.1 you can use the following macro to determine if a */
    /* macro variable exists:                                           */
     
    %macro check(mvar);
     %local i tmp;
     %let dsid=%sysfunc(open(sashelp.vmacro));
     %let num=%sysfunc(varnum(&dsid,name));
     %do %until(&ob = -1);
      %let i=%eval(&i+1);
      %let ob=%sysfunc(fetchobs(&dsid,&i));
      %let val=%sysfunc(getvarc(&dsid,&num));
     
      %if &val = %upcase(&mvar) %then %do;
      %let ob = -1;
      %let tmp=yes;
     %end;
     
     %else %do;
      %let tmp=no;
     %end;
     
     %if &ob=-1 %then %do;
      &tmp
     %end;
     
    %end;
    %let rc=%sysfunc(close(&dsid));
    %mend check;
     
    /* Check for the existence of the macro variable abc */
     
    %put Does the macro variable exist: %check(abc);
     
    %MACRO Test (parametre);
     
    	%PUT ***&parametre.***;	
    	%PUT ***&&&parametre***;
     
    %put %check(&parametre);
    %MEND;
     
    %test(parametre1);
    %test(parametre7);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ***parametre1***
    ***A***
    yes
    %test(parametre7);
    ***parametre7***
    WARNING: Apparent symbolic reference PARAMETRE7 not resolved.
    ***&parametre7***
    no

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 48
    Par défaut
    Merci de votre aide, ça fonctionne effectivement !

    delph_le

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

Discussions similaires

  1. macro variable dans une chaine de texte
    Par OROZCO dans le forum Macro
    Réponses: 8
    Dernier message: 22/01/2009, 16h11
  2. Appel macro variable dans ODS
    Par l'breton du 29 dans le forum Macro
    Réponses: 2
    Dernier message: 27/06/2008, 10h30
  3. Réponses: 11
    Dernier message: 29/05/2008, 16h26
  4. Réponses: 0
    Dernier message: 28/05/2008, 15h15

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