Not quite sure I understand, but does the following do what you want?
%let numEntities = 5;
data indata;
input dataset state $ e1-e&numEntities;
datalines;
1 S1 5.2 5.8 8.2 3.1 7.2
1 S2 8.1 3.6 5.0 4.9 1.8
2 S1 2.3 3.1 9.1 7.3 4.0
2 S2 4.2 5.3 7.1 4.7 7.3
;
proc optmodel;
set DATASETS;
read data indata into DATASETS=[dataset];
set <str> STATES;
read data indata into STATES=[state];
set ENTITIES = 1..&numEntities;
num performance {DATASETS, STATES, ENTITIES};
read data indata into [dataset state] {entity in ENTITIES} <performance[dataset,state,entity]=col('e'||entity)>;
var IsState {ENTITIES, STATES} binary;
max Objective = sum {e in ENTITIES, s in STATES} (prod {d in DATASETS} performance[d,s,e]) * IsState[e,s];
con OneStatePerEntity {e in ENTITIES}:
sum {s in STATES} IsState[e,s] = 1;
for {e in ENTITIES, s in STATES: min {d in DATASETS} performance[d,s,e] < 2} fix IsState[e,s] = 0;
solve;
print IsState;
print {e in ENTITIES, s in STATES: IsState[e,s].sol > 0.5} (prod {d in DATASETS} performance[d,s,e]);
quit;
... View more