Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays sas阵列未更新值_Arrays_Sas - Fatal编程技术网

Arrays sas阵列未更新值

Arrays sas阵列未更新值,arrays,sas,Arrays,Sas,该sas代码应在每次迭代时更新raf,然后乘以新的raf值以创建更新的est_bign。但raf值未更新。我放了一些语句,我刚刚删除了它们,这样可以节省空间 This is how it is now: est_bign_r raf 207640.2 1.002402 207640.2 1.002402 This is how is should be: 207640.17 1.0024 219236.92 0.94938

该sas代码应在每次迭代时更新raf,然后乘以新的raf值以创建更新的est_bign。但raf值未更新。我放了一些语句,我刚刚删除了它们,这样可以节省空间

This is how it is now:
    est_bign_r  raf
    207640.2    1.002402
    207640.2    1.002402

   This is how is should be:
    207640.17   1.0024
    219236.92   0.94938

Here is the full code:
    data &dsource..initial_raf 
     hold_output3_orig ;
 set &dsource..begin_raf;
 by tow cgroup_raf cell_raf;
 i_rake = 1;    /* First N_RAKE loop */
 array comp_int[0:2] $1 comp_int_0-comp_int_2;
 array post_naf_wgt[0:&repnum] 8 post_naf_wgt0-post_naf_wgt&repnum;   /* rep_cnt */
 array estbignr[0:&repnum] 8 estbignr0-estbignr&repnum;
 array bign_r_rep[0:&repnum] 8 bign_r_0-bign_r_&repnum;
 array raf_factors[&r_start:&n_ratio,0:&repnum] 8;
 length check_raf $3 count_r 8;
 retain estbignr0-estbignr&repnum count_r 0;
 if first.cell_raf then 
 do;
  call missing(of estbignr0-estbignr&repnum);
  count_r = 0;
 end;
 if (elig_hu eq '1') then 
 do;
  if (comp_int[tow] eq '1') then    /* interview */
  do;
   do rep_cnt = 0 to &repnum;
    %if (&raf_val eq &r_start) %then
    %do;
     estbignr[rep_cnt] + (post_naf_wgt[rep_cnt] * 1 * z_r * elig_r);
    %end;
    %else %do;
     %let raf_neg = %eval(&raf_val-1);
     estbignr[rep_cnt] + (post_naf_wgt[rep_cnt] * 
                          raf_factors[&raf_neg,rep_cnt] * z_r * elig_r);
    %end;
   end;
   count_r + elig_r; 
  end;
 end;
 if (last.cell_raf) then 
 do;
  r = &raf_val;   /* R value (1 to N_RATIO) */
                  /* calculate initial RAF value */
  do rep_val = 0 to &repnum;
   if (estbignr[rep_val] lt 0) then estbignr[rep_val] = 0;
   if (estbignr[rep_val] eq 0) then raf=42;
   else raf = bign_r_rep[rep_val] / estbignr[rep_val];
/*    ?? Correct version 
   raf = bign_r / estbignr[rep_val];
   collapse_raf = '1';        /* flag for before collapsing */
   est_bign_r = estbignr[rep_val];
   bign_r = bign_r_rep[rep_val];
   if (raf lt 0.5) or (raf gt 2) or (count_r lt 25) 
     then check_raf = "bad";
     else check_raf = "ok";
   if (rep_val eq 0) then output &dsource..initial_raf;
   output hold_output3_orig;
  end;
 end;
run;

我假设您在这里的宏中,并且宏
%IF/%THEN/%ELSE
块在数据步骤中是正常的。数据步骤不希望
&REF_NEG
在其运行时更新,对吗?是阵列在宏中。是&ref_neg在运行时不更新。其设置为%let raf_neg=%eval(&raf_val-1);%是否有两个循环rake\u loop=2%到&n\u rake;%do raf_val=&r_开始百分比与&n_比率;,2-8是外环,1-8是内环。从你提供的内容来看,没有什么不对的。事实上,我们无法用您提供的信息复制问题。您是否可以编辑以向我们提供一个显示您的问题的工作示例?否则,由于不清楚,将不得不投票关闭。请看,您至少应该在代码中放入一些
put
s,以查看它是否进入您期望的特定if块。如果宏变量RAF_VAL位于某个较大的宏循环中,那么您不就是多次覆盖同一数据集吗?为什么不只做最后一次迭代而跳过其他的呢?