我在下面的代码“simulation_tracking3”之前有一个数据步骤,输出如下内容:
CDFx Allowed_Claims
.06 120
.12 13
.15 1400
我希望我的哈希表根据随机生成的值(从0到1)对Allowed_Claims求平均值。例如,让我们称之为进程A ,如果Px = rand('Uniform',0,1)得到.09,我希望它在Allowed_Claims值之间取平均值,其中Px = .06和Px = 0.12,即(120 + 13)/ 2
数组的作用是它决定了我想要的进程A的迭代次数。数组是
Members {24} _temporary_ (5 6 8 10 12 15 20 25 30 40 50 60 70 80
90 100 125 150 175 200 250 300 400 500);
因此,当循环开始时,它将执行过程A的5次迭代,从而产生5个平均的“allowed_claims”值。我想要这五个主张的总和。
然后,循环将继续并执行过程A的6次迭代并产生6个平均的“allowed_claims”值。同样,我想要这6个主张的总和。
我希望输出表看起来像:
`
Member[i] Average_Expected_Claims
5 (sum of 5 'averaged 'claims)
6 (sum of 6 'averaged' claims)
8 (sum of 8 'averaged' claims)
我目前拥有的代码如下。我的错误发生在这里:
do rc = hi_iter.first() by 0 until (hi_iter.next()_ ne 0 or CDFx gt rand_value);
rc = hi_iter.prev();
错误分别表示:
ERROR 22-322:语法错误,期待以下之一:!,!!和&amp ;, *,**,+, - ,/,<,< =,<>,=,>,><,> =,AND,EQ,GE,GT,IN, LE,LT,MAX,MIN,NE,NG,NL,NOTIN,OR,^ =,|,||,〜=。
块引用
错误:数据步骤组件对象失败。在期间中止 编制阶段。
data simulation_members; *simulates allowed claims for each member in member array;
call streaminit(454);
array members [24] _temporary_ (5 6 8 10 12 15 20 25 30 40 50
60 70 80 90 100 125 150 175 200 250 300 400 500); *any number of members here is fine;
if _n_ eq 1 then do; * initiliaze the hash tables;
if 0 then set simulation_tracking3; * defines the variables used;
declare hash _iter(dataset:'simulation_tracking3', ordered: 'a'); *ordered = ascending - do not need a sort first;
_iter.defineKey('CDFx'); * key is artificial, but has to exist;
_iter.defineData('CDFx','Allowed_Claims'); * data variables to retrieve;
_iter.defineDone();
declare hiter hi_iter('_iter'); * the iterator object;
end;
do _i_member = 1 to dim(members); * iterate over members array;
call missing(claims_simulated);
do _i_simul = 1 to members[_i_member]-1;
rand_value = rand('Uniform',0,1);
do rc = hi_iter.first() by 0 until (hi_iter.next()_ ne 0 or CDFx gt rand_value);
end;
ac_max = allowed_claims;
rc = hi_iter.prev();
ac_min = allowed_claims;
claims_simulated + mean(ac_max,ac_min);
put rand_value= claims_simulated=; *just for logging;
end;
putlog;
output; *drop unnecessary columns;
end;
stop;
run;