我有一个auc值数组,cv_auc0-cv_auc39,编号为0-39。最大auc值为.7778,它出现在阵列中的几个位置(33,35,38,39)。当我创建变量
时auc_max = max(of cv_auc0-cv_auc&39);
似乎将地点39标识为最大值,即使此最大值出现在数组的其他位置。
这些数字0-39反映了模型中协变量的数量,我想保持这个数字尽可能低,同时保持最大auc,因此我希望auc_max变量识别位置33而不是39。这样做?
我在以下代码中提取此协变量数字p:
array a (*) cv_auc0-cv_auc&maxp;
do k = &maxp to 0 by -1;
if (a(k+1) = auc_max) then p = k;
end;
cross_val_auc = a(p+1);
keep p cross_val_auc;
它返回的是39而不是33.
答案 0 :(得分:2)
为什么不使用WHICHN()
功能呢?您可能希望减去一个,因为您的变量名称后缀从零而不是一个开始。
auc_max = max(of cv_auc0-cv_auc&maxp);
p = whichn(auc_max,of cv_auc0-cv_auc&maxp)-1;
答案 1 :(得分:0)
我在这里看不到任何可能不正确的内容。最好的猜测是这些地方的最大值略有不同。如果位置39的值是,例如,1e-6> 1。如果值为33,那么你将返回第39位。
我将如何做到这一点。我会从底部迭代并使用leave;
语句来停止循环。
data test;
array a[10] (1 2 3 4 4 3 2 4 1 4);
m = max(of a1-a10);
do p=1 to 10 ;
if a[p] = m then leave;
end;
put m= p=;
run;
返回:
m=4 p=4