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;
Available on demand!
Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.
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.