Friday 10 February 2017

Fonction Moyenne Mobile Sas

J'ai inclus une capture d'écran pour aider à clarifier mon problème: Im essaie de calculer une sorte de moyenne mobile et de déplacer l'écart type. La chose est que je veux calculer les coefficients de variation (stdevavg) pour la valeur réelle. Normalement, cela se fait en calculant le stdev et avg pour les 5 dernières années. Cependant, parfois, il y aura des observations dans ma base de données pour lesquelles je n'ai pas les informations des 5 dernières années (peut-être seulement 3, 2 etc). C'est pourquoi je veux un code qui va calculer le AVG et stdev même s'il n'y a aucune information pour l'ensemble 5 ans. En outre, comme vous le voyez dans les observations, parfois j'ai des informations sur plus de 5 ans, quand c'est le cas, j'ai besoin d'une sorte de moyenne mobile qui me permet de calculer le AVG et stdev pour les 5 dernières années. Donc, si une entreprise a des informations pour 7 ans, j'ai besoin d'une sorte de code qui va calculer le AVG et stdev pour, disons, 1997 (1991-1996), 1998 (1992-1997) et 1999 (1993-1998). Comme je ne suis pas très familier avec les commandes sas, il devrait regarder (très très grossièrement) comme: Ou quelque chose comme ça, je n'ai vraiment aucune idée, Im va essayer de comprendre, mais il vaut la peine de l'afficher si je ne vais pas le trouver myself. Im a SAS débutant et Im curieux si la tâche suivante peut être fait beaucoup plus simple car il est actuellement dans ma tête. J'ai les métadonnées (simplifiées) suivantes dans une table nommée userdatemoney: Utilisateur - Date - Money avec différents utilisateurs et des dates pour chaque jour de calendrier (pour les 4 dernières années). Les données sont commandées par User ASC et Date ASC, les données d'échantillon ressemble à ceci: Je veux maintenant calculer une moyenne mobile de cinq jours pour l'argent. J'ai commencé avec l'apprach assez populaire avec la fonction de lag () comme ceci: comme vous voyez, le problème avec cette méthode se produit si là si l'étape de données exécute dans un nouvel utilisateur. Aron obtiendrait des valeurs retardées d'Anna qui bien sûr ne devrait pas se produire. Maintenant, ma question: Je suis sûr que vous pouvez gérer le commutateur utilisateur en ajoutant des champs supplémentaires comme laggeduser et en réinitialisant les variables N, Somme et Moyenne si vous remarquez un tel changement, mais: Cela peut-il être fait d'une manière plus facile? Par Clause en aucune façon Merci pour vos idées et aide Je pense que la façon la plus simple est d'utiliser PROC EXPAND: Et comme mentionné dans le commentaire de Johns, il est important de se souvenir des valeurs manquantes (et des observations de début et de fin aussi). Ive a ajouté l'option SETMISS au code, car vous avez clairement indiqué que vous voulez zéro les valeurs manquantes, ne les ignorez pas (comportement MOVAVE par défaut). Et si vous voulez exclure les 4 premières observations pour chaque utilisateur (car ils n'ont pas assez de pré-historique pour calculer la moyenne mobile 5), vous pouvez utiliser l'option TRIMLEFT 4 à l'intérieur de TRANSFORMOUT (). L'exemple de code sur l'onglet Code complet illustre comment calculer la moyenne mobile d'une variable à travers un ensemble de données entier, sur les dernières N observations dans un jeu de données, ou sur les dernières N observations dans un BY - groupe. Ces exemples de fichiers et d'exemples de code sont fournis par SAS Institute Inc. sans garantie d'aucune sorte, expresse ou implicite, y compris, mais sans s'y limiter, les garanties implicites de qualité marchande et d'adéquation à un usage particulier. Les récipiendaires reconnaissent et acceptent que SAS Institute ne saurait être tenu pour responsable de tout dommage résultant de l'utilisation de ce matériel. En outre, SAS Institute ne fournira aucun support pour les matériaux contenus ici. Ces exemples de fichiers et d'exemples de code sont fournis par SAS Institute Inc. sans garantie d'aucune sorte, expresse ou implicite, y compris, mais sans s'y limiter, les garanties implicites de qualité marchande et d'adéquation à un usage particulier. Les récipiendaires reconnaissent et acceptent que SAS Institute ne saurait être tenu pour responsable de tout dommage résultant de l'utilisation de ce matériel. En outre, SAS Institute ne fournira aucun support pour les matériaux contenus ici. Calculer la moyenne mobile d'une variable à travers un ensemble de données entier, sur les dernières N observations dans un ensemble de données ou sur les dernières N observations dans un groupe BY.


No comments:

Post a Comment