This is a start, don't know your exact rules. data want;
length colout1 $1 _coltemp $ 11;
set have;
do _i = 1 to countw(col1,":,"); *loop all the words;
_coltemp = strip(scan(col1,_i,":,"));
*Three different cases, a list, a span or a single value.;
if index(_coltemp,"-")>0 then do;
*Span, Might be problematic if the casing is different from start to end. ;
_start = scan(_coltemp,1,"-");
_end = scan(_coltemp,2,"-");
*Rank gets the ASCII value for us to loop from start to end.;
do _j = rank(_start) to rank(_end);
*Use byte function to go from ASCII to string. ;
colout1 = byte(_j);
output;
end;
end;
else if index(_coltemp,":")>0 then do;
*A list of values separated (in this case with : ). ;
do _j =1 to countw(_coltemp,":");
*Loop all of the values. ;
colout1 = scan(_coltemp,_j);
output;
end;
end;
else do;
*Single value version;
colout1 = _coltemp;
output;
end;
end;
drop _:;
run;
... View more