Arrays sas阵列未更新值
该sas代码应在每次迭代时更新raf,然后乘以新的raf值以创建更新的est_bign。但raf值未更新。我放了一些语句,我刚刚删除了它们,这样可以节省空间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
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位于某个较大的宏循环中,那么您不就是多次覆盖同一数据集吗?为什么不只做最后一次迭代而跳过其他的呢?