我是proc optmodel的新手,并希望有任何帮助来解决手头的问题。 这是我的问题:
我的数据集如下:
data my data;
input A B C;
cards;
0 240 3
3.4234 253 2
0 258 7
0 272 4
0 318 7
0 248 8
0 260 2
0.2555 305 5
0 314 5
1.7515 235 7
32 234 4
0 301 3
0 293 5
0 302 12
0 234 2
0 258 4
0 289 2
0 287 10
0 313 3
0.7725 240 7
0 268 3
1.4411 286 9
0 234 13
0.0474 318 2
0 315 4
0 292 5
0.4932 272 3
0 288 4
0 268 4
0 284 6
0 270 4
50.9188 293 3
0 272 3
0 284 2
0 307 3
;
run;
有3个变量(A,B,C),我想根据这3个变量将观察分为三类(H,M,L)。
对于H级,我想最大化A,最小化B和C;
对于M类,我想要中位数A,B和C;
对于L类,我想最小化A,最大化B和C.
此外,约束条件是我希望将分类为H的总观测值限制在小于5%,将总观测值分类为M小于7%。
最终目标是找到A,B,C的截止值,将obs分为三个不同的类别。
由于这三个类具有相同的权重,所以我首先对变量进行缩放并创建风险变量,其中风险= A +(1-B)+(1-C);
提前感谢您的帮助。
我的sas代码:
proc stdize data=my_data out=my_data1 method=RANGE;
var A B C;
run;
data new;
set my_data1;
risk = A+(1-B)+(1-C);
run;
proc sort data=new out=range;
by risk;
run;
proc optmodel;
/* read data */
set CUTOFF;
/* str risk_level {CUTOFF}; */
num a {CUTOFF};
num b {CUTOFF};
num c {CUTOFF};
read data my_data1 into CUTOFF=[_n_] a=A b=B c=C;
impvar risk{p in CUTOFF} = a[p]+(1-b[p])+(1-c[p]);
var indh {CUTOFF} binary;
var indmh {CUTOFF} binary;
var indo {CUTOFF} binary;
con sum{p in CUTOFF} indh[p] le 10;
con sum{p in CUTOFF} indmh[p] le 6;
con sum{p in CUTOFF} indo[p] le 19;
con class{p in CUTOFF}:indh[p]+indmh[p]+indo[p] le 1;
max new = sum{p in CUTOFF}(10*indh[p]+4*indmh[p]+indo[p])*risk[p];
solve;
print a b c risk indh indmh indo new;
quit;
所以现在我的问题是如何在每个班级中找到最小风险值,谢谢!