Tuesday, February 14, 2017

Moving Average Using Proc Expand

Im un débutant de SAS et Im curieux si la tâche suivante peut être faite beaucoup plus simple comme 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 (). Répondue Dec 3 13 à 15: 29Début dans la version 6.08 du système SAS, PROC EXPAND dans le logiciel SASETS peut être utilisé pour effectuer une variété de transformations de données. Ces transformations incluent: les prospects, les retards, les moyennes mobiles pondérées et non pondérées, les sommes mobiles et les sommes cumulatives, pour n'en nommer que quelques-unes. De nombreuses nouvelles transformations ont été ajoutées dans la version 6.12, incluant des spécifications distinctes pour les moyennes mobiles centrées et arrières. Ces nouvelles transformations ont obligé à modifier la syntaxe de certaines des transformations prises en charge avant la version 6.12. Des exemples de la façon de spécifier la syntaxe des moyennes mobiles centrées et arrières utilisant la version 6.11 et antérieure et la version 6.12 et plus tard sont donnés ci-dessous. PROC EXPAND peut calculer soit une moyenne mobile centrée, soit une moyenne mobile en arrière. Une moyenne mobile centrée sur 5 périodes est calculée en faisant la moyenne d'un total de 5 valeurs consécutives de la série (la valeur de la période courante en plus des deux valeurs immédiatement précédentes et deux valeurs immédiatement après la valeur courante). Une moyenne mobile en arrière de 5 périodes est calculée en faisant la moyenne de la valeur de la période courante avec les valeurs des 4 périodes immédiatement précédentes. La syntaxe suivante illustre comment utiliser la spécification TRANSFORM (MOVAVE n) pour calculer une moyenne mobile centrée sur 5 périodes à l'aide de la version 6.11 ou antérieure: Pour calculer une moyenne mobile en arrière de période n en utilisant la version 6.11 ou antérieure, utilisez TRANSFORM (MOVAVE) N LAG k), où k (n-1) 2 si n est impair ou où k (n-2) 2 si n est pair. La syntaxe suivante illustre comment utiliser la spécification TRANSFORM (CMOVAVE n) pour calculer une moyenne mobile centrée sur 5 périodes en utilisant la version 6.12 ou plus récente: La syntaxe suivante illustre comment utiliser la spécification TRANSFORM (MOVAVE n) pour calculer une moyenne mobile en arrière de 5 périodes en utilisant la version 6.12 ou ultérieure: Pour plus d'informations, voir Opérations de transformation dans le chapitre EXPAND du Guide de l'utilisateur de SASETS. Si vous n'avez pas accès à SASETS, vous pouvez calculer une moyenne mobile dans l'étape DATA comme illustré dans cet exemple de programme. Système d'exploitation et Information sur la ReleaseComputer une moyenne mobile en SAS Ce post a été aimablement contribué par la DO Loop - allez-y pour commenter et lire le message complet. Une question courante sur les forums de discussion SAS est de savoir comment calculer une moyenne mobile dans SAS. Cet article explique comment utiliser PROC EXPAND et contient des liens vers des articles qui utilisent l'étape DATA ou des macros pour calculer des moyennes mobiles dans SAS. Dans un post précédent, j'ai expliqué comment définir une moyenne mobile et a fourni un exemple, qui est montré ici. Le graphique est un diagramme de dispersion du cours de clôture mensuel des actions d'IBM sur une période de 20 ans. Les trois courbes sont des moyennes mobiles. La courbe 8220MA8221 est une moyenne mobile à cinq points (à la fin). La courbe 8220WMA8221 est une moyenne mobile pondérée avec des poids de 1 à 5. (Lors du calcul de la moyenne mobile pondérée au temps t, la valeur yt a un poids 5, la valeur y t-1 a un poids 4, la valeur y t-2 a un poids 3 et ainsi de suite.) La courbe 8220EWMA8221 est une moyenne mobile exponentiellement pondérée avec un facteur de lissage alpha 0,3. Cet article montre comment utiliser la procédure EXPAND dans le logiciel SASETS pour calculer une moyenne mobile simple, une moyenne mobile pondérée et une moyenne mobile exponentiellement pondérée dans SAS. Pour un aperçu de PROC EXPAND et de ses nombreuses capacités, je recommande de lire le court métrage 8220Stupid Human Tricks avec PROC EXPAND8221 de David Cassell (2010). Étant donné que chaque client SAS n'a pas de licence pour le logiciel SASETS, il existe des liens à la fin de cet article qui montrent comment calculer une moyenne mobile simple dans SAS à l'aide de l'étape DATA. Créer un exemple de série chronologique Avant de pouvoir calculer une moyenne mobile en SAS, vous avez besoin de données. L'appel suivant à PROC SORT crée un exemple de série chronologique avec 233 observations. Il n'y a pas de valeurs manquantes. Les données sont triées par la variable de temps T. La variable Y contient le cours de clôture mensuel des actions d'IBM sur une période de 20 ans. Calculer une moyenne mobile en SAS à l'aide de PROC EXPAND PROC EXPAND calcule de nombreux types de moyennes mobiles et d'autres statistiques de roulis, telles que les écarts types en roulis, les corrélations et les sommes cumulées de carrés. Dans la procédure, l'instruction ID identifie la variable temporelle, T. Les données doivent être triées par la variable ID. L'instruction CONVERT spécifie les noms des variables d'entrée et de sortie. L'option TRANSFORMOUT spécifie la méthode et les paramètres utilisés pour calculer les statistiques de routage. L'exemple utilise trois instructions CONVERT: La première spécifie que MA est une variable de sortie qui est calculée comme une moyenne mobile (vers l'arrière) qui utilise cinq valeurs de données (k 5). La deuxième instruction CONVERT spécifie que WMA est une variable de sortie qui est une moyenne mobile pondérée. Les poids sont automatiquement normalisés par la procédure, de sorte que la formule est WMA (t) (5 yt 4 y t-1 3 y t-2 2 y t-3 1 y t-4) 15. La troisième déclaration CONVERT spécifie que EWMA Est une variable de sortie qui est une moyenne mobile exponentiellement pondérée avec le paramètre 0.3. Notez l'option METHODNONE sur l'instruction PROC EXPAND. Par défaut, la procédure EXPAND ajuste les courbes splines cubiques aux valeurs non-manquantes des variables. Les options METHODNONE garantissent que les points de données bruts sont utilisés pour calculer les moyennes mobiles plutôt que les valeurs interpolées. Visualisation des moyennes mobiles Une utilisation importante d'une moyenne mobile consiste à superposer une courbe sur un diagramme de dispersion des données brutes. Cela vous permet de visualiser les tendances à court terme des données. L'appel suivant à PROC SGPOT crée le graphique en haut de cet article: Pour garder cet article aussi simple que possible, je n'ai pas discuté comment gérer les données manquantes lors du calcul des moyennes mobiles. Reportez-vous à la documentation de PROC EXPAND pour diverses questions liées aux données manquantes. En particulier, vous pouvez utiliser l'option METHOD pour spécifier comment interpoler les valeurs manquantes. Vous pouvez également utiliser des options de transformation pour contrôler la façon dont les moyennes mobiles sont définies pour les premiers points de données. Créer une moyenne mobile en SAS à l'aide de l'étape DATA Si vous n'avez pas de logiciel SASETS, les références suivantes montrent comment utiliser l'étape SAS DATA pour calculer des moyennes mobiles simples en utilisant la fonction LAG. La base de connaissances SAS fournit l'article 8220Computer la moyenne mobile d'une variable.8221 Preoral Vora (2008) compare l'étape DATA au code PROC EXPAND dans le papier 8220Easy Rolling Statistics avec PROC EXPAND.8221 Ron Cody inclut une macro SAS dans plusieurs de ses livres. Par exemple, Cody8217s Collection de SAS populaires Programmation Tâches et comment les aborder fournit une macro appelée movingAve. Vous pouvez télécharger la macro dans le cadre du 8220Example Code et Data8221 pour le livre. L'étape DATA, qui est conçue pour gérer une observation à la fois, n'est pas le meilleur outil pour les calculs de séries chronologiques, qui nécessitent naturellement de multiples observations (retards et pistes). Dans un futur blog, je vais montrer comment écrire des fonctions SASIML qui calculent des moyennes mobiles simples, pondérées et exponentiellement pondérées. Le langage matriciel dans PROC IML est plus facile à utiliser pour les calculs nécessitant l'accès à plusieurs points temporels. ffTheDoLoopdyIl2AUoC8zA ffTheDoLoopdqj6IDK7rITs ffTheDoLoopicbsotKEf1zY: e5B0sfO55lA: gIN9vFwOqvQ ffTheDoLoopicbsotKEf1zY: e5B0sfO55lA: VsGLiPBpWU ffTheDoLoopicbsotKEf1zY: e5B0sfO55lA: F7zBnMyn0Lo ffTheDoLoopdl6gmwiTKsz0


No comments:

Post a Comment