Quotes in a delimited file are just there in case the values of the fields contain the delimiter.
Use the DSD option on the INFILE statement and SAS will automatically remove them.
To insert an informat into your INPUT statement and NOT have it read exactly that number of characters use the : modifier, not the ~ modifier.
TITLE 'Problem 2 (1)';
DATA Student_por;
INFILE 'E:\SAS HW\Student_por.txt' dlm=';' firstobs=2 dsd truncover;
INPUT school $ sex $ age address $ famsize $ Pstatus $ Medu $ Fedu $
Mjob :$12. Fjob :$12. reason :$14. guardian :$10.
traveltime studytime failures schoolsup $ famsup $
paid $ activities $ nursery $ higher $ internet $
romantic $ famrel $ freetime $ goout $ Dalc $ Walc $
health $ absences G1 $ G2 $ G3 $
;
RUN;
PROC PRINT DATA=Student_por (firstobs=630);
RUN;
You appear to be using the informats in your INPUT statement as a way to give SAS a hint that you would like the variable defined longer than the default 8 bytes for character variables. If you define the variables before hand you don't need to include the informat in this way. In fact if you define the variables in the order that you want to read them then the INPUT statement can be trivially simple.
DATA Student_por;
INFILE 'E:\SAS HW\Student_por.txt' dlm=';' firstobs=2 dsd truncover;
LENGTH school $8 sex $8 age 8 address $8 famsize $8 Pstatus $8
Medu $8 Fedu $8 Mjob $12 Fjob $12 reason $14 guardian $10
traveltime 8 studytime 8 failures 8 schoolsup $8 famsup $8
paid $8 activities $8 nursery $8 higher $8 internet $8
romantic $8 famrel $8 freetime $8 goout $8 Dalc $8 Walc $8
health $8 absences 8 G1 $8 G2 $8 G3 $8
;
INPUT school -- G3 ;
RUN;
... View more