2016-07-08 6 views
1

私は、auc値の配列cv_auc0-cv_auc39を0-39の番号で持っています。最大auc値は.7778であり、配列のいくつかの場所に現れます(33,35,38,39)。変数を作成するときアレイの最大数(SAS)

この最大値は配列内の他の場所にも表示されますが、最大値として場所39が識別されるようです。

これらの数字0〜39は、モデル内の共変量の数を反映しており、max aucを維持しながらこの数値をできるだけ低く保ちたいので、auc_max変数が39ではなく33を識別したいと思います。これを行う方法?

私はこの共変量の数、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; 

をそして、それは返しpは39の代わりに、33

答えて

0

です間違っている。最高の推測では、最大値は場所によってわずかに異なります。場所39の値が、例えば1e-6> 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 
2

理由だけWHICHN()機能を使わないのでしょうか?変数名の接尾辞は1つではなくゼロから始まるので、1つを減算することができます。

auc_max = max(of cv_auc0-cv_auc&maxp); 
p = whichn(auc_max,of cv_auc0-cv_auc&maxp)-1;