DATA Step, Macro, Functions and more

Macro variable inside macro variable's name

Reply
Contributor
Posts: 60

Macro variable inside macro variable's name

I am facing a problem with macro variable naming. I couldn't figure out what do you call situations like this but I have attached a sample code.

The issue is that I need to get the variable model on the data foo to resolve to the macro variable model_&&multi&i.

I have tried almost everything I can come up with(&&model_&&multi&i,&&&model_&&multi&i etc.), but probably my limited under the hood knowledge on macro variables is the issue.


Attachment
Super User
Posts: 7,868

Re: Macro variable inside macro variable's name

Have you tried doing it in stages?

like

%let helpvar=&&multi&i;

and then

&&model_&helpvar

If you break it into several steps, you can inspect the contents of the variables with %put, or use options symbolgen;

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
Contributor
Posts: 60

Re: Macro variable inside macro variable's name

Posted in reply to KurtBremser

Thanks for your answer. In fact I did try that also, did not work. Gives me resolve error in log.

Super User
Posts: 7,868

Re: Macro variable inside macro variable's name

See this:

%let model_testx=some_content;

%let multi1=testx;

%let i=1;

%put &&multi&i;

%let helpvar=&&multi&i;

%put &&model_&helpvar;

The last %put shows some_content.

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
Super User
Super User
Posts: 7,997

Re: Macro variable inside macro variable's name

Not knowing exactly what you are trying to achieve why not something like:

proc sql;                              /* Create a dataset which has you loop values (so this &n_multi) */

     create table LOOP as

     select     distinct

                   NAME

     from       ...;

quit;

data _null_;                         /* Using the dataset you created above, generate a bit of code for each observation in that dataset

                                                  with the code and the loop variable */

     set loop;

     call execute('data foo;

                              model="'||strip(name)||'";

                          run;');

run;

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