If you have missing values for some numbers, should they also be set to zero? I'm going to assume the answer is no, only re-set the negative numbers.
data want;
set have;
array nums {*} _numeric_;
do _n_=1 to dim(nums);
if .Z < nums{_n_} < 0 then nums{_n_} = 0;
end;
run;
If the intent is to set missing values to zero as well, the program becomes even easier. Just remove the characters ".Z < "