Call a macro program referred by a macro variable.

Reply
Contributor
Posts: 66

Call a macro program referred by a macro variable.

I have a number of macro programs that take different data sets for processing.

For example,

%macro Abc; /* Takes data set abc*/

..............

.............

%Mend Abc;

This way I have created a number of macro programs.

Now I need to execute macro program 'Abc' if data set Abc exists,

%Macro  Action(Dsn);

%IF  %SYSFUNC(EXIST(Dsn))>0  %THEN %DO;

        %(&Dsn);  /*Here is the problem*/

%END;

%ELSE %DO;

%PUT***********Dataset &Dsn does not exist;

%END;

%MEND Action;

Now if I use

%Action(Abc);     The program fails to execute because  in %(&Dsn) , &Dsn fails to resolve so %Abc does not execute.

Is there a way to fix this?

Thanks every one for your attention.

Raghu.


Super User
Super User
Posts: 7,942

Re: Call a macro program referred by a macro variable.

You have brackets around the &dsn., the below works (I note you also miss the ampersand on the exists function):

%macro abc;
  %put hello;
%mend abc;

%macro action (dsn);
  %&dsn.;
%mend action;

%action(abc);

Although I would suggest there are better ways of doing something like this than having a macro per dataset, even creating one macro which accepts the dataset as a parameter:

%macro do_something (dset=);

     ...

%mend;

%do_something(dset=abc);

Or alternatively create a loop dataset and then use that to generate code with call execute.

Super User
Posts: 19,768

Re: Call a macro program referred by a macro variable.

This sounds like a bad design.

Perhaps explain more about what you're trying to do and someone can suggest better design techniques.

Super User
Super User
Posts: 7,038

Re: Call a macro program referred by a macro variable.

That is because the code the macro generated:  %(abc) is not valid syntax for a macro call.  You want it to generate %abc; or %abc() .

Ask a Question
Discussion stats
  • 3 replies
  • 209 views
  • 0 likes
  • 4 in conversation