无法正确执行哈希表/SAS

无法正确执行哈希表/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

在下面的代码“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

数组的作用是,它决定了我想要一个进程的迭代次数。数组是

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;