无法正确执行我的哈希表/ SAS

时间:2017-06-09 19:12:06

标签: sas hashtable

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

0 个答案:

没有答案