Here's one way:
data have;
informat id best4. NameType $6. Length $5. Name $25.;
input ID NameType Length Name ;
datalines;
1 First Short Jon
2 First Long Alexander
3 Middle Short Todd
4 Middle Long William
5 Last Short Smith
6 Last Long Stephanopoulos
;
run;
proc sql;
create table FirstAndMid as
select a.name as firstName, b.name as Middlename,c.name as Lastname
from
(select name from have
where Nametype='First') as a,
(select name from have
where Nametype='Middle') as b,
(select name from have
where Nametype='Last') as c
;
quit;
Note that I basically ignore the length as you didn't have any duplicate names with different lengths within a type.
... View more