SAS嵌套了带数组

时间:2017-04-02 20:05:50

标签: arrays loops multidimensional-array sas nested-loops

在理解以下代码时遇到问题。此代码段应输出一个数据集,用于将目标值(sasuser.ctargets)与实际值(sasuser.monthsum)进行比较。观察值按月和年匹配,并填充到targets数组。代码完全按照预期的方式工作,但在我看来它不应该。

查看嵌套的DO循环:

Targetsyearj的嵌套DO循环中编入索引。我知道外部循环使用三次迭代(i=1 to 3):每年变量的一个值(1997-1999)。但是,Year在DO循环之外声明。因此,如果自动变量_n_在DO循环的第一次迭代中创建目标数组,那么targets数组如何正确地填充1998年和1999年的数据,直到后续迭代才会读取数据步骤? year如何作为迭代器工作?

data work.lookup1;
    array targets(1997:1999,12) _temporary_;
    if _n_=1 then do i=1 to 3;
        set sasuser.ctargets;
        array mnth(*) Jan--Dec;
        do j=1 to dim(mnth);
            targets(year,j)=mnth(j);
        end;
    end;
    set sasuser.monthsum(keep=salemon revcargo monthno);
    year=input(substr(salemon,4),4.);
    ctarget=targets(year,monthno);
    format ctarget dollar15.2;
run;

1 个答案:

答案 0 :(得分:0)

唯一可行的方法是,变量YEAR位于数据集SASUSER.CTARGETS中。