In PROC OPTMODEL, only one pair of brackets are allowed for the read-key-columns on the READ DATA statement. If more than one pair of brackets are declared, the following error message will occur:
ERROR: The target 'target' must be numeric or string, found a set.
The example below illustrates the error and a work around:
data object;
input machine customer grade1 grade2 grade3 grade4 grade5 grade6;
datalines;
1 1 102 140 105 105 125 148
1 2 115 133 118 118 143 166
1 3 70 108 83 83 88 86
1 4 79 117 87 87 107 105
1 5 77 115 90 90 105 148
2 1 123 150 125 124 154 .
2 2 130 157 132 131 166 .
2 3 103 130 115 114 129 .
2 4 101 128 108 107 137 .
2 5 118 145 130 129 154 .
3 1 83 . . 97 122 147
3 2 119 . . 133 163 180
3 3 67 . . 91 101 101
3 4 85 . . 104 129 129
3 5 90 . . 114 134 179
4 1 108 121 79 . 112 132
4 2 121 132 92 . 130 150
4 3 78 91 59 . 77 72
4 4 100 113 76 . 109 104
4 5 96 109 77 . 105 145
;
/*Error with two pairs of brackets in the read-key-columns*/
proc optmodel;
set machines;
set customers;
read data object into machines=[machine] customers=[customer];
quit;
/*work around*/
proc optmodel;
set machines;
set customers;
set <num,num> pairs;
read data object into pairs=[machine customer];
machines=setof {<machine,customer>in pairs} machine;
customers=setof {<machine,customer>in pairs} customer;
quit;