Here is a fixed tested code.
data have;
infile datalines truncover;
input agegroup $30.;
datalines;
up to 59 days
2 months to 17 years
4 years to 10 years
up to 12 hours
7 years to 8 years
10 years and older
all ages
; run;
data temp;
set have;
agegroup = compbl(agegroup);
ix = index(agegroup,'to');
if ix > 0 then do;
agegroup1 = substr(agegroup,1,ix-1);
agegroup2 = substr(agegroup,ix+3);
end; else do;
ix = index(agegroup,'and');
if ix > 0 then do;
agegroup1 = substr(agegroup,1,ix-1);
agegroup2 = substr(agegroup,ix+4);
end; else do;
agegroup1 = scan(agegroup,1);
agegroup2 = scan(agegroup,2);
end;
end;
*drop ix;
run;
data want;
set temp;
length from to 8;
keep from upto;
format from upto best.2;
if strip(agegroup1) in ('up', 'all') then from=0; else
if index(agegroup1,'month') > 0 then from = input(compress(agegroup1,,'A'),best.); else
if index(agegroup1,'year') > 0 then from = input(compress(agegroup1,,'A'), best.)*12;
if index(agegroup2,'days') > 0 then
upto = input(compress(agegroup2,,'A'), best.)/30;
else if index(agegroup2,'year') > 0 then upto= input(compress(agegroup2,,'A'), best.)*12;
else if index(agegroup2,'hour') > 0 then upto = input(compress(agegroup2,,'A'), best.)/(30*24);
else if strip(agegroup2) in ('older', 'ages') then upto=1200; from = round(from, 0.01); upto = round(upto, 0.01);
run;
... View more