无法正确执行哈希表/SAS
在下面的代码“simulation_tracking3”之前,我有一个数据步骤,输出如下:无法正确执行哈希表/SAS,sas,hashtable,Sas,Hashtable,在下面的代码“simulation_tracking3”之前,我有一个数据步骤,输出如下: CDFx Allowed_Claims .06 120 .12 13 .15 1400 我希望我的哈希表根据随机生成的值(从0到1)平均允许的_声明。例如,让我们将此过程称为A,如果Px=rand('Uniform',0,1)产生.09,我希望它在Px=0.06和Px=0.12的允许索赔值之间求平均值,即(120+13)/2 数组的作用是,它决定了我想要一个进程的迭代次数。数组是 Membe
CDFx Allowed_Claims
.06 120
.12 13
.15 1400
我希望我的哈希表根据随机生成的值(从0到1)平均允许的_声明。例如,让我们将此过程称为A,如果Px=rand('Uniform',0,1)产生.09,我希望它在Px=0.06和Px=0.12的允许索赔值之间求平均值,即(120+13)/2
数组的作用是,它决定了我想要一个进程的迭代次数。数组是
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个平均的“允许的_声明”值。我要这五项索赔的总和
然后,循环将继续并执行流程A的6次迭代,并生成6个平均的“允许的_声明”值。同样,我要这6项索赔的总和
我希望输出表如下所示:
`
我目前拥有的代码如下。我的错误发生在这里:
rc=hi_iter.prev()代码>
错误分别表示:
错误22-322:语法错误,应为以下之一:!,!!,&,
*,**,+,-,/,=,和,EQ,GE,GT,IN,
LE、LT、MAX、MIN、NE、NG、NL、NOTIN或,^=、|、| |、~=
大宗报价
错误:数据步骤组件对象失败。在测试期间中止
汇编阶段
hi\u iter.next()\u
似乎不对<代码>\uu
在该上下文中通常是不允许的。可能的解决方案是什么?最终,我希望rc找到“下一个”术语。谢谢你,乔!删除。
,这样它就不是语法错误了?您在这里使用的原始代码行:do rc=hi\u iter.first()乘以0直到(hi\u iter.next()ne 0或px1 gt rand\u value)
注意,在hi\u iter.next()
.Joe之后没有\uu
,再次进入离合器。非常感谢。
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);
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;