With the below program, i can only get 'book' for the macro variable.
May I know how to get macro variable 'orderedvars' that is 'book,car,ship,ball'? Anyone can help, thanks.
data sample;
input var1 $ var2 $ var3 $ var4 $;
cards;
book car ship ball
;
run;
proc sql noprint;
select distinct *
into : orderedvars separated by ','
from sample;
quit;
%put &orderedvars;
data _null_;
call symputx('ordervars','book,car,ship,ball');
run;
OR
Transpose your data set sample and work from there.
OR
Read the four words into a single column in your data step.
data sample; input var1 $ var2 $ var3 $ var4 $; call symputx('orderedvars',catx(',',of var:)); cards; book car ship ball ; run; %put &orderedvars;
Thats likely the easiest way, into takes a column of observations not an array of variables.
PROC SQL could use the CATX function as well, except for the abbreviated variable list (which may be irrelevant anyway because your real variables are named differently):
proc sql noprint;
select catx(',', var1, var2, var3, var4)
into : orderedvars
from sample;
quit;
Yes, I was avoiding that as you can't use arrays of variables in sql, so:
select catx(',',of var:)
Thats why I went with the datastep, just easier. SQL is only really columns of data, not arrays of variables.
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
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.