PROC NLP is considered legacy and is no longer under active development. You should instead use PROC OPTMODEL, and there is a book of examples here: SAS/OR(R) 13.1 User's Guide: Mathematical Programming Examples If I understand your problem correctly, the following code does what you want: data mydata; input cust $ data1 data2; datalines; Cust1 0.0128 42815 Cust2 0.0128 159541 Cust3 0.06 575796 Cust4 0.004 256480 Cust5 0.003 107 Cust6 0.002 174744 Cust7 0.0128 336044 Cust8 0.0128 17032 Cust9 0.0128 314733 Cust10 0.003 217724 Cust11 0.0128 219205 Cust12 0.0104 452909 Cust13 0.0105 4263 Cust14 0.0128 230952 Cust15 0.07 34579 Cust16 0.0128 197932 ; proc optmodel; set CUSTOMERS; str cust {CUSTOMERS}; num data1 {CUSTOMERS}; num data2 {CUSTOMERS}; read data mydata into CUSTOMERS=[_N_] cust data1 data2; num wa = 0.018; num n = 4000000; var X {CUSTOMERS} >= 0; con Cardinality: sum {i in CUSTOMERS} X = n; con WeightedAverage: sum {i in CUSTOMERS} data1 * X = wa * sum {i in CUSTOMERS} X; min Error = sum {i in CUSTOMERS} (X - data2)^2; solve; print cust data2 X; put (sum {i in CUSTOMERS} data2)=; put ((sum {i in CUSTOMERS} data1 * data2)/sum {i in CUSTOMERS} data2)=; put (sum {i in CUSTOMERS} X)=; put ((sum {i in CUSTOMERS} data1 * X)/sum {i in CUSTOMERS} X)=; quit; The resulting optimal objective is 39,236,599,668, which is smaller than the sum of squares 40,718,058,821 attained by your solution in the "Optimal" column, so maybe I have misinterpreted your problem.
... View more