将数组的值作为维度分配给SAS中的另一个数组

时间:2018-08-31 04:07:59

标签: arrays sas

我一直在研究复杂的代码,最后陷入困境,我需要在代码中将一个数组的值作为维度参数分配给另一个数组。我的代码快照: 例如:

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)); 有人可以建议。 谢谢!

1 个答案:

答案 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 ;