Like this?
data temp;
attrib ID length=8;
attrib Fiber length=8;
attrib What_Fiber length=$30;
infile datalines dlm=',' dsd missover;
input ID Fiber What_Fiber $;
datalines4;
1,1,1;2;3;4
2,1,1
3,1,3
4,0,999
5,0,999
6,1,1;2;3;4;8
7,1,1;3;5;7
;;;;
run;
%macro tmp;
%let colcnt = 8;
data _null_;
do i = 1 to &colcnt.;
call symput("colname" !! strip(put(i, 10.)), "Fiber_" !! strip(put(i, 10.)));
end;
call symput("count", strip(put(i - 1, 10.)));
run;
%do i = 1 %to &count.;
%put &&colname&i..;
%end;
data temp2(drop=FiberMax i n);
set temp;
%do i = 1 %to &count.;
attrib &&colname&i.. length=8;
&&colname&i.. = 0;
%end;
array FiberArr &colname1. - &&colname&count..;
attrib Fiber_missing length=8;
Fiber_Missing = not(Fiber);
FiberMax = count(What_Fiber, ';') + 1;
do i = 1 to FiberMax;
n = scan(What_Fiber, i, ';');
if n ne 999 then FiberArr[n] = 1;
end;
run;
%mend;
%tmp;
Edit: Holy cow, @PeterClemmensen was quick!!!
... View more