Vous n'êtes pas identifié.
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
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
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
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
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
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