|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 16 ![]() |
Bonjour à tous,
je souhaiterais avoir une information par rapport à la programmation en SAS. Voilà je dispose de deux macros programmes a et b. je souhaite utiliser des variables créees dans la macro b (par exemple u et v de la table "table") dans la macro a (pour effectuer des tests) Est-ce possible ? Je précise aussi que j'utilise la macro b dans la macro a... Merci pour vos réponses ! Voici une illustration des macro-programmes a et b (je ne sais pas si cela fonctionne, mais c'est juste pour que vous ayez un aperçu de mon problème : Code :
|
||
|
|
00
|
|
|
#2 | ||
|
Membre actif
![]() Inscription : mars 2003 Messages : 149 ![]() |
Bonjour,
Il faut les déclarer en global et non en paramètre de la macro b Code :
|
||
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 16 ![]() |
j'ai déclaré les 2 paramètres de la macro b en global, mais je n'arrive toujours pas à récupérer le résultat de u ou de v dans la macro a.. Peut-être ai-je mal compris votre réponse ?
Et d'une manière générale, cmt peut-on récuperer le résultat d'une variable d'une macro b (dans une macro a) s'il ne dépend pas des paramètres de la macro b? Je vous remercie. |
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() ![]() Olivier DecourtFormateur en informatique Inscription : avril 2008 Messages : 1 467 ![]() |
Bonjour.
Tu crées des VARIABLES dans le macro-programme %b, d'après ton exemple. Ce ne sont pas des MACRO-VARIABLES. Elles n'ont donc pas à être globales ou locales, elles sont dans leur table et elles y restent. Si tu veux te servir de leurs valeurs, tu relis la table. Si tu veux les "sortir" de leur table pour en faire des macro-variables, il faut faire un CALL SYMPUTX (ou juste CALL SYMPUT en v8). Bon courage. Olivier |
|
|
00
|
|
|
#5 |
|
Membre actif
![]() Inscription : mars 2003 Messages : 149 ![]() |
OK, je croyais que tu voulais récupérer var1 et var2, qui sont des macros variables.
Si tu veux récupérer u et v qui sont des variables de ta table, suit ce qu'a t'écrit Olivier. |
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 16 ![]() |
D'accord très bien merci olivier.decourt ! je vais utiliser un call symput dans la macro b pour créer des macro-variables. Et du coup, si jutilise la macro-variable dans la macro a, elle la connaitra aussi ? Merci !
|
|
|
00
|
|
|
#7 | |
|
Expert Confirmé
![]() ![]() Olivier DecourtFormateur en informatique Inscription : avril 2008 Messages : 1 467 ![]() |
Citation:
Code :
CALL SYMPUTX ("nomMV", nomVariableSAS, "G") ; |
|
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 16 ![]() |
d'accord je vais essayer, merci bien !
|
|
|
00
|
|
|
#9 | ||
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 16 ![]() |
Bonsoir,
j'ai une autre question toujours par rapport aux deux macros a et b : J'aimerais pouvoir appeler la macro b depuis la macro a, dans une boucle comme je l'ai écrit juste après... Cependant cela ne fonctionne pas. Est-ce possible ? Je vous remercie beaucoup ! Code :
|
||
|
|
00
|
|
|
#10 |
|
Expert Confirmé
![]() ![]() Olivier DecourtFormateur en informatique Inscription : avril 2008 Messages : 1 467 ![]() |
Bonjour.
Deux soucis dans ta boucle : 1) au niveau du %DO, le nom de la macro-variable ne doit pas être précédé d'un & --> %DO i=1 %TO 5 ; 2) l'incrémentation du compteur de boucle est automatique : tu n'as donc pas besoin de la ligne %LET i= %sysevalf(&i+1) ; car sinon i va être incrémenté 2 fois (il vaudra 1, puis 3, puis 5). Si c'est pourtant ce que tu veux faire (augmenter i de 2 en 2) il est plus propre d'écrire %DO i=1 %TO 5 %BY 2 ; et de virer la ligne de %LET. Bon courage. Olivier |
|
|
00
|
|
|
#11 | ||
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 16 ![]() |
Merci pour votre réponse ! j'y arrive lorsque j'incrémente avec un entier :
mais comment faire avec un incrément décimal ? Le code ci-après ne fonctionne pas... Merci encore. Code :
|
||
|
|
00
|
|
|
#12 |
|
Membre expérimenté
![]() Inscription : avril 2009 Messages : 537 ![]() |
Tu ne peux pas : il faut que cela soit des entiers.
|
|
|
00
|
|
|
#14 | ||
|
Expert Confirmé
![]() ![]() Olivier DecourtFormateur en informatique Inscription : avril 2008 Messages : 1 467 ![]() |
A part la solution de la boucle %WHILE donnée dans la FAQ, on peut aussi utiliser une boucle avec des entiers et diviser ensuite à l'intérieur d'un %SYSEVALF.
Code :
|
||
|
|
00
|
|
|
#15 |
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 16 ![]() |
Merci beaucoup, les deux solutions fonctionnent !
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com