You may prefer next code (more simple then my previous solution):
data temp;
infile cards dlm='09'x truncover;
input a_line $250.;
cards;
Name Code Hr Bid Department Called-In Abs Dept Seniority 27-JAN-2020 1 12-OCT-2019 / 2 8.000 A SMITH, JOHN P (999999) MECHANICAL [2] MECHANICAL [2]
Name Code Hr Bid Department Called-In Abs Dept Seniority 29-JAN-2020 2 05-MAY-2018 / 2 8.000 A SMITH, JOHN R (999999) EMPLOYEE RELATIONS [3] PROCESSING [3]
Name Code Hr Bid Department Called-In Abs Dept Seniority 21-JAN-2020 3 13-JUN-2009 / 6 8.000 A SMITH, JOHN J (999999) MECHANICAL [3] MECHANICAL [3]
Name Code Hr Bid Department Called-In Abs Dept Seniority 20-JAN-2020 4 07-DEC-2006 / 2 8.000 A SMITH, JOHN O (999999) MECHANICAL [2] MECHANICAL [2]
Name Code Hr Bid Department Called-In Abs Dept Seniority 19-JAN-2020 5 24-MAR-2001 / 8 8.000 A SMITH, JOHN C (999999) PROCESSING [3] PROCESSING [3]
Name Code Hr Bid Department Called-In Abs Dept Seniority 30-JAN-2020 6 03-NOV-2002 / 4 8.000 A SMITH, JOHN G (999999) MECHANICAL [2] MECHANICAL [2]
Name Code Hr Bid Department Called-In Abs Dept Seniority 10-FEB-2020 Name Code Hr Bid Department Called-In Abs Dept Seniority 11-FEB-2020 1 22-NOV-2001 / 8 8.000 A SMITH, JOHN S (999999) PACKING [2] PACKING [2]
; run;
data tmp2 (keep=var1-var14);
length line_out $200 var1-var14 $30;
array vx {*} $ var1-var14;
set temp;
split_pos = index(substr(a_line,5),"Name");
if split_pos = 0 then do;
line_out = strip(a_line);
link out;
end;
else do;
line_out = substr(a_line,1,split_pos+3);
link out;
line_out = substr(a_line,split_pos+4);
link out;
end;
return;
out:
do i=1 to 14;
vx(i) = scan(line_out,i,'09'x);
if missing(vx(i)) then leave;
end;
output tmp2;
return;
run;
... View more