0
理解以下代碼時出現問題。這段代碼應該輸出一個數據集,將目標值(sasuser.ctargets
)與實際值(sasuser.monthsum
)進行比較。觀察結果按月份和年份進行匹配,並填充到targets
陣列。代碼完全按照它應該的方式工作,但在我看來它不應該。SAS嵌套數組循環
看看嵌套DO循環:
Targets
在嵌套的DO循環由year
和j
索引。據我所知,外循環使用三次迭代(i=1 to 3
):年變量的每個值(1997-1999)。然而,在DO循環之外聲明Year
。因此,如果自動變量_n_
在DO循環的第一次迭代中創建目標數組,那麼targets
數組如何在1998和1999年正確填充,直到DATA步驟的後續迭代纔會被讀取? 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;
啊,所以迭代來自變量的數量?每行有12個月的價值+年份。第一次迭代:1997年12個月。第二次迭代:1998年的值爲13-24等等?現在它是有道理的。謝謝 – Adam