With your new data, you can omit i and j, and I think the following does what you want:
data VData;
input v remi $ class $;
datalines;
100 205 MA
300 802 MB
600 605 PB
200 604 PB
300 725 SI
500 215 SI
;
data PData;
input p remi $ aop $ class $;
datalines;
10 205 15 MA
11.25 802 18 MB
10 605 26 PB
11.5 604 35 PB
10.25 725 44 SI
12 725 42 SI
110.75 725 46 SI
10.25 215 87 SI
11.25 215 89 SI
;
proc optmodel;
set <str,str> REMI_CLASS;
num v {REMI_CLASS};
read data VData into REMI_CLASS=[remi class] v;
set <str,str,str> REMI_CLASS_AOP;
num p {REMI_CLASS_AOP};
read data PData into REMI_CLASS_AOP=[remi class aop] p;
var X {REMI_CLASS_AOP} binary;
min f = abs(sum {<r,c,a> in REMI_CLASS_AOP} (if char(c,1) = 'M' then 1 else -1)*v[r,c]*p[r,c,a]*X[r,c,a]);
con OneValue {<r,c> in REMI_CLASS}:
sum {<(r),(c),a> in REMI_CLASS_AOP} X[r,c,a] = 1;
solve linearize;
print X;
print {<r,c> in REMI_CLASS} (sum {<(r),(c),a> in REMI_CLASS_AOP} p[r,c,a]*X[r,c,a]);
quit;
... View more