最大阵列(SAS)

时间:2016-07-08 12:11:38

标签: arrays sas

我有一个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.

2 个答案:

答案 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
相关问题