2017-04-02 5 views
0

次のコードの理解に問題があります。このスニペットは、目標値(sasuser.ctargets)と実際の値(sasuser.monthsum)を比較するデータセットを出力するものとします。観測は月と年が一致し、targets配列に移入されます。コードは正確に動作するはずですが、私の心にはそうしてはいけません。入れ子になったDOループでアレイを使ってSASネストしたdoループ

ルック:

Targetsyearjで入れ子になったDOループにインデックスされます。私は外部ループが3つの繰り返し(i=1 to 3)を使用していることを理解しています。年変数(1997-1999)の各値に対して1つです。ただし、YearはDOループの外側で宣言されます。したがって、自動変数_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ヶ月.2回目の反復:1998年の値13-24など?今それは理にかなっています。ありがとう – Adam

関連する問題