The output is determined by the informat used ($w. informat in your case, requested by $1.
in your code, so $1.
is first of all informat definition, lenght definition of variable is a side product of this).
Use $char. informat for desired result.
data output1;
input @1 a $char1. @2 b $char1. @3 c $char1.;
datalines;
!..
1.3
;
run;
From documentation:
$w Informat
The $w. informat trims leading blanks and left aligns the values before storing the text. In addition, if a field contains only blanks and a single period, $w. converts the period to a blank because it interprets the period as a missing value. The $w. informat treats two or more periods in a field as character data.
$CHARw. informat
The $CHARw. informat does not trim leading and trailing blanks or convert a single period in the input data field to a blank before storing values.