我一直在研究复杂的代码,最后陷入困境,我需要在代码中将一个数组的值作为维度参数分配给另一个数组。我的代码快照: 例如:
array temp_match_fl(3) temp_match_fl1 - temp_match_fl3;
ARRAY buracc_repay(3) buracc_repay1 - buracc_repay3;
ARRAY ocs_repay(3) ocs_repay1 - ocs_repay3;
jj = 0;
do until (jj>=3);
jj=jj+1;
If length(strip(match_flag(jj))) = 1 then do;
temp_match_fl(jj) = match_flag(jj);
end;
Else If length(strip(match_flag(jj))) > 1 then do;
j1 = 0;
min_diff = 99999999;
do until (j1>=length(strip(match_class(jj))));
j1=j1+1;
retain min_diff;
n=substr(strip(match_flag(jj)),j1,1);
If (min_diff > abs(buracc_repay(jj)-ocs_repay(n))) then do;
min_diff = abs(buracc_repay(jj)-ocs_repay(n));
temp_match_fl(jj) = n;
end;
end;
end;
kk=temp_match_fl(jj);
/* buracc_repay(jj) = ocs_repay(kk);*/
buracc_repay(jj) = ocs_repay(temp_match_fl(jj));
end;
run;
现在,我需要能够将存储在temp_match_fl(jj)数组中的值作为维度参数分配给另一个数组,我该如何实现呢?最后两个语句都不起作用:
buracc_repay(jj)= ocs_repay(kk); buracc_repay(jj)= ocs_repay(temp_match_fl(jj)); 有人可以建议。 谢谢!
答案 0 :(得分:1)
实际上,您撰写的最后两个陈述确实有效。您遇到错误或意外结果吗?您能像下面这样简单地说明问题吗?
请注意,要执行此操作,temp_match_fl(jj)
的值必须为1、2或3,因为您的OCS_REPAY数组包含三个元素。根据您显示的代码,尚不清楚这是否总是正确的。您不显示match_flag数组。
data want ;
array temp_match_fl(3) temp_match_fl1 - temp_match_fl3 (1 2 3) ;
array buracc_repay(3) buracc_repay1 - buracc_repay3 (10 20 30) ;
array ocs_repay(3) ocs_repay1 - ocs_repay3 (100 200 300) ;
jj=1 ;
kk=2 ;
*buracc_repay(jj) = ocs_repay(kk); *this works ;
put temp_match_fl(jj)= ; *debug to confirm value is 1 2 or 3 ;
buracc_repay(jj) = ocs_repay(temp_match_fl(jj)); *this also works;
put (buracc_repay:)(=) temp_match_fl1=; *check output ;
run ;