2017-04-02 186 views
0

理解以下代碼時出現問題。這段代碼應該輸出一個數據集,將目標值(sasuser.ctargets)與實際值(sasuser.monthsum)進行比較。觀察結果按月份和年份進行匹配,並填充到targets陣列。代碼完全按照它應該的方式工作,但在我看來它不應該。SAS嵌套數組循環

看看嵌套DO循環:

Targets在嵌套的DO循環由yearj索引。據我所知,外循環使用三次迭代(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; 

回答

0

這個作品的唯一方法是,如果變量YEAR是在數據集中SASUSER.CTARGETS

+0

啊,所以迭代來自變量的數量?每行有12個月的價值+年份。第一次迭代:1997年12個月。第二次迭代:1998年的值爲13-24等等?現在它是有道理的。謝謝 – Adam