Rick,
SQL can do that if table was not big.

data Test;
length Type $7;
input Group Type $ Value;
datalines;
1 Min -3
1 Max 3
1 LowVal -2
1 HighVal 2
2 Min -3
2 Max 3
2 HighVal 2
3 Min -3
3 Max 3
3 LowVal -2
4 Min -3
4 Max 3
;
proc sql;
create table want as
select a.*,case when missing(b.value) then
case when a.type='LowVal' then
(select value from test where group=a.group and type='Min')
when a.type='HighVal' then
(select value from test where group=a.group and type='Max')
else .
end
else b.value
end as value
from (
select * from
(select distinct group from test),
(select distinct type from test)
) as a left join test as b
on a.group=b.group and a.type=b.type;
quit;