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

问题描述 投票:0回答:1

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

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

arrays sas
1个回答
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 ;
© www.soinside.com 2019 - 2024. All rights reserved.