1. The code below shows how your input data should be posted.
2. The code below does the calculation required.
3. Does this make sense?
data ZONES;
input ZONE FIXED;
cards;
1 200
2 120
3 80
4 100
run;
data RESULT;
input ZONE CLASS $ TARGET ;
cards;
1 A 32.4677
1 B 36.0680
1 C 62.6852
1 D 47.1945
1 E 31.5844
2 A 14.5252
2 B 14.1779
2 C 29.5432
2 D 6.7894
2 E 9.9574
3 A 51.1834
3 B 0.6335
3 C 36.9613
3 D 5.8361
3 E 15.3799
3 F 3.7684
4 A 39.8149
4 B 0.4815
4 C 4.7643
4 D 2.9040
4 E 12.9612
4 F 3.5365
run;
proc sql;
create table WANT as
select b.*
, FIXED*TARGET/SUM_BY_ID as OPT
from ZONES a
inner join
(select *, sum(TARGET) as SUM_BY_ID
from RESULT
group by ZONE) b
on a.ZONE = b.ZONE;
quit;
ZONE
CLASS
TARGET
OPT
1
A
32.4677
30.92165
1
B
36.068
34.35051
1
C
62.6852
59.70025
1
E
31.5844
30.08041
1
D
47.1945
44.94719
2
B
14.1779
22.68673
2
A
14.5252
23.24246
2
E
9.9574
15.93331
2
D
6.7894
10.86404
2
C
29.5432
47.27347
3
D
5.8361
4.104055
3
E
15.3799
10.81543
3
C
36.9613
25.99188
3
B
0.6335
0.445489
3
A
51.1834
35.99313
3
F
3.7684
2.65001
4
F
3.5365
5.486144
4
E
12.9612
20.1066
4
D
2.904
4.504952
4
C
4.7643
7.39082
4
B
0.4815
0.746947
4
A
39.8149
61.76453
... View more