Le forum du Master ESA économétrie et statistique appliquée - Université d'Orléans

Vous n'êtes pas identifié.

Annonce

Vous êtes sur le forum du master ESA !

Le site du master ESA - description de la formation, notes de cours, contacts... vient de déménager !!!

Venez visiter notre nouveau site : www.master-esa.fr

#1 08-07-2014 19:09:50

mohamed.lanjri
Member
Date d'inscription: 09-09-2011
Messages: 27

Appel d'une Macro Variable sous SAS

Bonsoir à toutes et à tous,

Je définis deux macro-variables :
ligne 1 : %let n=2;
ligne 2 : %let break1=5;

et je veux faire appel à la macro variable break1 après un calcul :

Méthode 1 : qui marche
ligne 3 : %let i=%eval(&ns-1);    --> i=1
ligne 4 : %put &&break&i;           --> 5  (&break1)  C'est le résultat souhaité !!

A la place des lignes 3 et 4, je veux faire le calcul directement sur une seule ligne:

Méthode 2 : qui ne marche pas
%put &&break%eval(&ns-1); --->  &break1 avec un message de warning que la macro variable break n'existe pas.

Sas veut d'abord résoudre la macro variable break avant de donner une valeur à %eval(&nn-1).

Exite-t-il une macro fonction pour faire comprendre à sas qu'il doit d'abord résoudre %eval(&ns-1) --> 1 puis il fait appel à la macro break1 ?

J'espère que vous avez compris mon problème.

Merci !!

Hors ligne

 

#2 08-07-2014 19:52:39

esa_sr
Administrator
Date d'inscription: 21-02-2007
Messages: 5898
Site web

Re: Appel d'une Macro Variable sous SAS

euh...

dites moi (avant que je ne réfléchisse plus avant), vous pouvez m'expliquer pourquoi vous devez impérativement faire ça en une seule ligne ?

& est prioritaire sur % (comme vous l'avez découvert) mais si vous renversez cette priorité "en général", vous n'allez pas être plus avancé...

regardez l'argument de %EVAL...

ce que vous voulez, c'est :
1- résoudre &ns
2- mobiliser %EVAL pour calculer ns-1
3- puis renvoyer le résultat pour obtenir break1
4- et résoudre &break1

ce que SAS fait, c'est en premier résoudre les macro-variables (donc, il résout NS - pas de problème, puis BREAK (qui n'existe pas) - ensuite il exécute %EVAL et il obtient break1 qu'il ne résout pas puisqu'il a déjà résolu toutes les macro variables...

& doit être prioritaire sur % puisque si ce n'est pas le cas, %EVAL(&ns-1) ne peut pas être exécuté...

Hors ligne

 

#3 08-07-2014 20:21:19

esa_sr
Administrator
Date d'inscription: 21-02-2007
Messages: 5898
Site web

Re: Appel d'une Macro Variable sous SAS

m'enfin... comme vous m'êtes sympathique, je vais quand même vous donner la solution

%let ns=2;
%let break1=5;

%put %unquote(&nrstr(&break)%eval(&ns-1));

bien entendu, vous avez lu avec attention la section de mon bouquin consacrée aux problèmes de quoting (pages 496 à 499 de la 3ème édition) et vous vous dites "rhooo... j'aurais pu le trouver tout seul !"

ça fait un bel exercice pour mon examen de macro langage sous SAS de l'année prochaine...

Hors ligne

 

#4 09-07-2014 18:29:09

mohamed.lanjri
Member
Date d'inscription: 09-09-2011
Messages: 27

Re: Appel d'une Macro Variable sous SAS

Magnifique !! Je vous remercie !

Pour la première réponse, vous avez expliqué précisément mon besoin. Et cerise sur le gâteau pour la deuxième réponse, c'est exactement ce que je cherche à comprendre puis le traduire en syntaxe SAS.

C'est un bon exercice pour mieux comprendre SAS/Macro et ses fameux histoires de priorités lors de l’exécution. Comme les femmes, il est vraiment sensible aux détails et exigent mais manipulable.

Vous savez quoi, je me suis dis mieerda !! Il manque quelques pages à mon bouquin de 466 pages, je dois aller sur Amazon pour commander son frère jumeau plus lourd mais surtout plus riche en information.

Dernière modification par mohamed.lanjri (09-07-2014 18:32:11)

Hors ligne

 

#5 09-07-2014 18:37:13

esa_sr
Administrator
Date d'inscription: 21-02-2007
Messages: 5898
Site web

Re: Appel d'une Macro Variable sous SAS

mohamed.lanjri a écrit:

Comme les femmes, il est vraiment sensible aux détails et exigent mais manipulable.

je souhaite beaucoup de bonheur à Mme Lanjri...

Hors ligne

 

#6 10-07-2014 07:34:37

esa_sr
Administrator
Date d'inscription: 21-02-2007
Messages: 5898
Site web

Re: Appel d'une Macro Variable sous SAS

mohamed.lanjri a écrit:

je dois aller sur Amazon pour commander son frère jumeau plus lourd mais surtout plus riche en information.

mais il n'y a pas que sur Amazon que vous allez pouvoir le trouver...

http://www.sas-sr.com/viewtopic.php?id=1139

Hors ligne

 

Pied de page des forums

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson

[ Generated in 0.024 seconds, 10 queries executed ]