BookmarkSubscribeRSS Feed
Aditi24
Obsidian | Level 7

Hi,

 

I have a macro variable :-

 

%let data1= cars;

%let data2= air;

%let data3= demo;

 

and I am using these macro in a do loop:-

 

%do i %to 3

proc print data=test1.data&i;
run;

%end;

 

But its not resolving to the desired variable. How to resolve this half macro half string macro variable.

Please Help.

4 REPLIES 4
LinusH
Tourmaline | Level 20

So you want for &i = 1 that data set resolve to cars?

You current logic resolves only &I as per you code. You need to apply a & if you want to use a name as a reference to macro variable name, and for resolution: &data1.

Since this is a two step resolution you need to add additional & so the resolution takes place in the order you need.

Data never sleeps
Aditi24
Obsidian | Level 7

Could you let me know how to doubly resolve this? @LinusH

Kurt_Bremser
Super User

For indirect macro variable references, you need to use a double ampersand:

%let data1= cars;
%let data2= class;
%let data3= heart;

%macro loop;
%do i = 1 %to 3;

proc print data=sashelp.&&data&i;
run;

%end;
%mend;
%loop

Use the "little running man" icon to post code, as it will preserve formatting of the code (no additional linefeeds etc when copy/pasting to SAS)

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

Register Now

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 4 replies
  • 1472 views
  • 3 likes
  • 3 in conversation