Il ya %SYMEXIST(macro-var-name)
macro fonction pour voir si la macro-var existe, mais vous ne pouvez pas écrire %IF
à l'air libre, de sorte que vous devez joindre votre instruction %IF
à l'intérieur d'une autre macro. Vous pouvez finir par écrire une macro juste pour envelopper votre code dans un fichier source comme ci-dessous. Ce n'est pas joli, mais vous pouvez probablement vous débrouiller avec ça, si le gardien est nécessaire.
%macro wrapper;
%if %symexist(foo_defined) %then %return;
%macro foo;
%global foo_defined;
%let foo_defined = 1;
%put i am foo;
%mend foo;
%mend wrapper;
%*-- tests --*;
options mcompilenote=all;
%symdel foo_defined;
%*-- first time it will define %foo --*;
%wrapper
%foo
/* on log
NOTE: The macro FOO completed compilation without errors.
6 instructions 108 bytes.
i am foo
*/
%*-- second time it will not --*;
%wrapper
%foo
/* on log
(no notes on macro compilation)
i am foo
*/
Sur appel, SAS met à la disposition d'un groupe de catalogues, des fichiers et des répertoires pour accéder (compilé/non compilé) macros. Cela rend lourd, mais pas impossible, de découvrir directement qu'une macro est déjà disponible pour cette session ou non, étant donné le nom de la macro. En savoir plus sur les (détails gores) dans cet article: http://support.sas.com/resources/papers/proceedings09/076-2009.pdf
Merci. C'est à peu près l'approche que je visais. –