It is better to use function to identify the positions and handle it accordingly. Keep in mind to minimize the assumptions about data structures.
data def;
length subject level $15;
input x $20.;
subject=substr(x,1,indexc(x,'0123456789')-1) ;
level =substr(x,indexc(x,'0123456789')) ;
cards;
HIST400
SCI400
MATH400
HIST400
LANGUAGE12345
;
proc print;run;