2015-10-06 1 views
0

J'essaye de calculer la moyenne mobile de 3 mois des données suivantes par produit par pays (j'ai seulement deux variables de pays ici). Y a-t-il un moyen de le faire?sas Proc élargir la procédure

Voici le tableau des ventes que j'ai:

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 

J'ai essayé quelque chose comme ce qui suit, mais la moyenne mobile est calculée uniquement par pays. Y a-t-il un moyen de le calculer par pays, par produit? Toutes les idées sont les bienvenues. merci :)

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

Je ne suis pas sûr de la moyenne 3 mois, parce que votre tableau fournit 4 mois et je ne sais pas comment doit être calculé 3 mois avg, mais vous COU ld utilise proc sql avec avg et group by pour obtenir une moyenne globale sur tous les mois par produit et par pays puis l'augmenter d'une certaine façon à 3 mois, ou peut-être construire quelque chose avec proc, mais je suppose que vous voulez autre chose? – kl78

+0

Merci Kl78. Je suis en train de tracer une ligne de tendance pour montrer la moyenne mobile de 3 mois de ventes par produit par pays. Donc le 1er et le 2ème mois n'a pas de mouvement avg. Le 3ème mois mobile avg est basé sur les 3 premiers mois. Ensuite, le 4ème mois de déplacement Avg est basé sur les 2ème, 3ème et 4ème. etc. – lisa

+0

hm, ok. Je ne sais pas grand chose à propos de proc, mais vous pouvez faire une colonne en combinant le produit et le pays, puis utiliser le par seulement sur la nouvelle colonne, comme 'copr = catx (" _ ", Product, country); et si le résultat est correct, supprimez copr lors de l'affichage des données. – kl78

Répondre

0

après mon commentaire je l'ai testé un peu, je pense que concating produit et par pays donne le résultat que vous recherchez (j'espère que je n'a toujours pas compris quelque chose de mal):

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; 

résultat:

+0

Une idée intelligente, qui fait la magie. Je vous remercie:) – lisa