2016-04-12 17 views
0

私はSASプログラムを持っています。ファイルの最後に1つの観測値だけを印刷しようとしています。その観測には5つの変数の算術平均が含まれている必要があります。私がプログラムを実行するとき、私は持っています。SASレポートに変数の平均値を1つ表示する

74   if last then 
75   DO; 
76   avgqtr1/numObs; 
       _______ 
       180 
77   avgqtr2/numObs; 
       _______ 
       180 
78   avgqtr3/numObs; 
       _______ 
       180 
79   avgqtr4/numObs; 
       _______ 
       180 
80   avgYear/numObs; 
       _______ 
       180 
ERROR 180-322: Statement is not valid or it is used out of proper order. 

が、私はエラーを修正したい:私はプログラムを実行するとこれは私のプログラム

Filename MyFile '/home/mrohde0/MyFolder/HWData/Funddrive.dat'; 
libname MyLib '/home/mrohde0/MyFolder/HWData/'; 
data MyLib.Fund_Avg(drop= Qtr1 Qtr2 Qtr3 Qtr4 AGEGP Year_Don Ydoncat); 
    set MyLib.NewFund end = last; 
    retain avgqtr1 0; 
    retain avgqtr2 0; 
    retain avgqtr3 0; 
    retain avgqtr4 0; 
    retain avgyear 0; 
    retain numObs 0; 

    avgqtr1 + qtr1; 
    avgqtr2 + qtr2; 
    avgqtr3 + qtr3; 
    avgqtr4 + qtr4; 
    avgyear + Year_don; 
    numObs + 1; 
    if last then 
     DO; 
      /* need to divide by number of observations to make these values the Arithmetic mean */ 
      avgqtr1/numObs; 
      avgqtr2/numObs; 
      avgqtr3/numObs; 
      avgqtr4/numObs; 
      avgYear/numObs; 
      output; 
     END; 
run; 

title1 'Average Funds'; 
Proc print data=Mylib.fund_avg; 
run; 

ある

というエラーを取得し、これは、エラーログレポートは、 1回の観測で計算した平均値だけをSASに印刷させます。

+0

なぜproc手段を使用しないのですか?これは痛いようです。 – Reeza

+0

私は同意します。私は指示に従っているだけです。それは割り当てのためです。 – ArmorCode

+0

Ok ...以下の回答。私はこれを行う方法を知っていることは良いことに同意します。なぜなら、それを伸ばすことは定期的に起こるからです。 – Reeza

答えて

0

計算を変数に割り当てる必要があります。

Avgqtr1 = avgqtr1/numbObs; 

これはしないでください。 proc meansまたはproc SQLを使用します。

proc手段では列が生成されますが、procでは行が直接生成されます。

Proc SQL; 
Create table my_lib.fund_avg as 
Select mean(qtr1) as avgqtr1, 
     mean(qtr2) as avgqtr2, 
     ... 
    From my_lib.new_fund: 
Quit; 
+0

ディビジョンは暗黙的な保持をサポートしていません。 +は暗黙の保持をサポートしているため、retainステートメントは必要ありません。 – Reeza

+0

このコメントを編集:私は今理解しています。 – ArmorCode

関連する問題