substr function uses the original variable length as default variable length for a new variable. Char and first will assign length 1 for the new variable. See below.
data t1;
x='abc';
first=first(x);
substr=substr(x,1,1);
char=char(x,1);
run;
proc print;run;
proc contents data=t1;
run;