2015-10-06 73 views
0

我正在嘗試根據產品按國家計算以下數據的3個月移動平均數(我在這裏只有兩個國家/地區變量)。有沒有辦法做到這一點?sas Proc擴展程序

這裏是銷售表,我有:

Date Product Country Sales 
201101 Sofa  US  100 
201102 Sofa  US  200 
201103 Sofa  US  250 
201104 Sofa  US  300 
201101 Sofa  CA  250 
201102 Sofa  CA  300 
201103 Sofa  CA  250 
201104 Sofa  CA  300 
201101 Chair US  300 
201102 Chair US  300 
201103 Chair US  300 
201104 Chair US  300 
201101 Chair CA  300 
201102 Chair CA  300 
201103 Chair CA  300 
201104 Chair CA  300 

我試圖像下面,但均線只能由國家來計算。有沒有一種方法可以按照國家,按產品計算?任何想法將不勝感激。謝謝:)

PROC SORT DATA=Sales; 
BY Country Product Date; 
RUN; 

PROC EXPAND DATA=Sales out =ma; 
By Country Product; 
CONVERT Value=Value_ma/transformin=(setmiss 0) transformout=(movave 3); 
run; 
+0

我不知道約3個月的平均水平,因爲你的表格提供了4個月,我不知道如何在3個月的平均應該在這裏計算的,但你腠ld使用proc sql with avg和group by來獲得產品和國家在所有月份的總平均值,然後以某種方式將其縮放到3個月,或者可以使用proc方法構建某些內容,但是我想您還想在此處使用其他方法? – kl78

+0

謝謝Kl78。我正在繪製一個趨勢線,以顯示按產品按國家劃分的3個月移動平均銷售額。所以第一個月和第二個月沒有移動平均值。第三個月的平均移動時間以前三個月爲基礎。然後,第4個月移動平均數基於第2,3,4個。等等。 – lisa

+0

嗯,好的。不太瞭解proc擴展,但是你可以通過組合產品和國家來創建一個列,然後只在新列上使用,比如'copr = catx(「_」,Product,country);',然後通過copr如果結果正常,則在顯示數據時刪除copr。 – kl78

回答

0

後,我的評論我測試了一下,我想concating產品和國家給了你正在尋找的結果(我希望我還是沒明白一些錯誤):

data have; 
input Date $ Product $ Country $ Sales ; 
datalines; 
201101 Sofa  US  100 
201102 Sofa  US  200 
201103 Sofa  US  250 
201104 Sofa  US  300 
201101 Sofa  CA  250 
201102 Sofa  CA  300 
201103 Sofa  CA  250 
201104 Sofa  CA  300 
201101 Chair US  300 
201102 Chair US  300 
201103 Chair US  300 
201104 Chair US  300 
201101 Chair CA  300 
201102 Chair CA  300 
201103 Chair CA  300 
201104 Chair CA  300 
; 
run; 

data have ; 
set have; 
copr=catx("_",Product,country); 
run; 
PROC SORT DATA=have; 
BY copr Date; 
RUN; 

PROC EXPAND DATA=have out =ma ; 
By copr; 
CONVERT sales=average/ transformin=(setmiss 0) transformout=(movave 3); 
run; 

proc print data=ma; 
var date product country average; 
where time > 1; 
run; 

結果:

+0

聰明的想法,這是神奇的。謝謝:) – lisa