I defined 15 macro variables like
%let x1=xxx
%let x2=xxx
%let x3=xxx
....
xxx are some variables in my dataset.
I wonder how I can call some of them together in some procedures such as proc sql and proc reg. For example, I can write
proc reg data=new;
model ret = &x1 &x2 &x3 &x4;
run;
Can I shorten this code such as model ret = &x1-&x4? I tried this, but not work.
Thanks.
If you are already running in a macro then use a DO loop.
%do i=1 %to 15 ; &&x&i %end;
Or just make a new macro variable. You still have to type them out but only one time.
%let xall=&x1 &x2 &x3 &x4 &x5 &x6 .......... ;
Or pull the names from the metadata? Watch out for the SCOPE setting.
proc sql ;
select distinct cats('&',name) into : xall separated by ' '
from dictionary.macros
where name like 'X%' and scope = "GLOBAL"
;
quit;
.... var &xall ... ;
some functions and statements allow variable ranges. The rules are not in the macro language
If you are already running in a macro then use a DO loop.
%do i=1 %to 15 ; &&x&i %end;
Or just make a new macro variable. You still have to type them out but only one time.
%let xall=&x1 &x2 &x3 &x4 &x5 &x6 .......... ;
Or pull the names from the metadata? Watch out for the SCOPE setting.
proc sql ;
select distinct cats('&',name) into : xall separated by ' '
from dictionary.macros
where name like 'X%' and scope = "GLOBAL"
;
quit;
.... var &xall ... ;
If their order is the same within dataset . or you could try this.
model ret = &x1 -- &x4?
Ksharp
Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.
Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.
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.