That' pretty clear.
The data set sid.plus4_zip_summary_us does not contain a variable name postal_cd
If you intend to create the code then you need to watch where you are placing ( ).
Maybe:
proc sql;
create table TEST as
select b.state_nm as state_c
,a.*
,a.full_zip as ZIP9
,
from (select *, substr(full_zip,1,5) as postal_cd
from sid.plus4_zip_summary_us) a
inner join temp b
on b.zip_char_cd=a.postal_cd
;
quit;
You were attempting to create the variable Postal_ct after the inner join. The above creates it in a subquery so is in the alias A data.