Error when reading data into a set with the READ DATA statement in PROC OPTMODEL


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;