Based on @Tom suggestion, attached is a tested code to read and create desired output:
data want; length row_names 3 pclass $3 survived 3 name $82 _age $3 age 3 embarked $3 home_dest $70 room $5 ticket $20 boat $3 sex $10; infile cards truncover; length a_row $250 word $90 var1-var11 $90; a_row = ' '; input a_row $250.;
array varx $ var1 - var11; do i=1 to countw(a_row,',','qm'); word = scan(a_row,i,',','qm'); if word =: '"' then word=substrn(word,2,length(word)-2); varx(i) = word; end ; /* 1*/ row_names = input(left(varx(1)),best3.); /* 2*/ pclass = left(varx(2)); /* 3*/ survived = input(left(varx(3)),best3.); /* 4*/ name = left(varx(4)); /* 5*/ _age = left(varx(5)); if _age = 'NA' then age = . ; else age = input(_age , 3.); /* 6*/ embarked = left(varx(6)); /* 7*/ home_dest = left(varx(7)); /* 8*/ room = left(varx(8)); /* 9*/ ticket = left(varx(9)); /*10*/ boat = left(varx(10)); /*11*/ sex = left(varx(11)); drop _age a_row word var1-var11;
/*-------------*/ cards; "37","1st",1,"Brown, Mrs James Joseph (Margaret "Molly" Tobin)",44.0000,"Cherbourg","Denver, CO","","17610 L27 15s 5d","6","female" run;
... View more