在理解以下代码时遇到问题。此代码段应输出一个数据集,用于将目标值(sasuser.ctargets
)与实际值(sasuser.monthsum
)进行比较。观察值按月和年匹配,并填充到targets
数组。代码完全按照预期的方式工作,但在我看来它不应该。
查看嵌套的DO循环:
Targets
在year
和j
的嵌套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;
答案 0 :(得分:0)
唯一可行的方法是,变量YEAR
位于数据集SASUSER.CTARGETS
中。