Hello,
I have a data table that I need to create based off another table. My original table looks like this:
TEXT LCNT ABC 5 DEF 2 GHI 12
I need to turn that into
ABC_1
ABC_2
ABC_3
ABC_4
ABC_5
DEF_1
DEF_2
GHI_1
GHI_2
GHI_3
GHI_4
GHI_5
GHI_6
GHI_7
GHI_8
GHI_9
GHI_10
GHI_11
GHI_12
What would be the best approach to loop using a variable value? I thought of doing a do loop inside a data step but how can I set the variable value to loop through?
I don't think there's a need for macro variables here.
data have;
input text $ lcnt;
datalines;
abc 5
def 2
ghi 12
;
run;
data want;
set have;
do i=1 to lcnt;
new_var=catx("_", text, i);
output;
end;
keep new_var;
run;
Try this:
data have;
input text $ lcnt;
datalines;
abc 5
def 2
ghi 12
;
run;
data _null_;
set have;
call symput("new_cnt",max(lcnt));
run;
data want;
set have;
do i=1 to &new_cnt. until(lcnt<=i);
new_var=cats(text,"_",i);
output;
end;
run;
I don't think there's a need for macro variables here.
data have;
input text $ lcnt;
datalines;
abc 5
def 2
ghi 12
;
run;
data want;
set have;
do i=1 to lcnt;
new_var=catx("_", text, i);
output;
end;
keep new_var;
run;
data want;
set have;
do i = 1 to lcnt;
ID = catx("_", text, lcnt);
output;
end;
keep ID;
run;
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
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.
Ready to level-up your skills? Choose your own adventure.