Friday 17 November 2017

Moviendo El Promedio Usando Proc Expand


Im un principiante del SAS y Im curioso si la tarea siguiente se puede hacer mucho más simple pues está actualmente en mi cabeza. Tengo los siguientes metadatos (simplificados) en una tabla llamada userdatemoney: Usuario - Fecha - Dinero con varios usuarios y fechas para cada día calendario (durante los últimos 4 años). Los datos son ordenados por el usuario ASC y fecha ASC, datos de ejemplo se ve así: Ahora quiero calcular un promedio móvil de cinco días para el dinero. Comencé con el apprach bastante popular con la función lag () como esto: como ves, el problema con este método se produce si hay si el paso de datos se ejecuta en un nuevo usuario. Aron obtendría algunos valores rezagados de Anna, que por supuesto no debería suceder. Ahora mi pregunta: Estoy bastante seguro de que puede manejar el cambio de usuario mediante la adición de algunos campos adicionales como laggeduser y restablecer las variables N, Suma y Media si se nota un cambio, pero: ¿Puede hacerse esto de una manera más fácil Tal vez utilizando el Por Cláusula de cualquier manera Gracias por tus ideas y ayuda Creo que la manera más fácil es usar PROC EXPAND: Y como se mencionó en el comentario de Johns, es importante recordar acerca de los valores perdidos (y sobre las observaciones de principio y fin). He añadido la opción SETMISS al código, ya que dejó claro que desea poner a cero los valores faltantes, no ignorarlos (comportamiento predeterminado MOVAVE). Y si desea excluir las primeras 4 observaciones para cada usuario (ya que no tienen suficiente antecedente para calcular el promedio móvil 5), puede utilizar la opción TRIMLEFT 4 dentro de TRANSFORMOUT (). Respondió Dec 3 13 at 15: 29Desenvío en la versión 6.08 del sistema SAS, PROC EXPAND en el software SAS / ETS se puede utilizar para realizar una variedad de transformaciones de datos. Estas transformaciones incluyen: derivaciones, desfases, medias móviles ponderadas y no ponderadas, sumas en movimiento y sumas acumuladas, por nombrar algunas. Muchas nuevas transformaciones fueron agregadas en la Versión 6.12, incluyendo especificaciones separadas para los promedios móviles centrados y hacia atrás. Estas nuevas transformaciones hicieron necesario modificar la sintaxis de algunas de las transformaciones soportadas antes de la Versión 6.12. A continuación se proporcionan ejemplos de cómo especificar la sintaxis para los promedios móviles centrados y hacia atrás utilizando la versión 6.11 y anterior y la versión 6.12 y posterior. PROC EXPAND puede calcular una media móvil centrada o una media móvil hacia atrás. Una media móvil centrada en 5 periodos se calcula promediando un total de 5 valores consecutivos de la serie (el valor del período actual además de los dos valores inmediatamente anteriores y dos valores inmediatamente siguientes al valor actual). Un promedio móvil de retroceso de 5 periodos se calcula promediando el valor del periodo actual con los valores de los 4 períodos inmediatamente anteriores. La siguiente sintaxis ilustra cómo utilizar la especificación TRANSFORM (MOVAVE n) para calcular una media móvil centrada en 5 periodos usando la Versión 6.11 o anterior: Para calcular un promedio móvil de retroceso de n periodos utilizando la Versión 6.11 o anterior, utilice TRANSFORM (MOVAVE) N LAG k) especificación, donde k (n-1) / 2 si n es impar o donde k (n-2) / 2 si n es par. La siguiente sintaxis ilustra cómo utilizar la especificación TRANSFORM (CMOVAVE n) para calcular una media móvil centrada en 5 periodos usando la Versión 6.12 o Más adelante: La siguiente sintaxis similar ilustra cómo utilizar la especificación TRANSFORM (MOVAVE n) para calcular un promedio móvil hacia atrás de 5 periodos utilizando la Versión 6.12 o posterior: Para obtener más información, vea Operaciones de Transformación en el capítulo EXPAND de la Guía de Usuarios de SAS / ETS . Si no tiene acceso a SAS / ETS, puede calcular una media móvil en el paso DATA tal como se ilustra en este programa de ejemplo. El sistema operativo y la información de la versiónComputar un promedio móvil en SAS Este post fue gentilmente contribuido por el DO Loop - ir allí para comentar y leer el mensaje completo. Una cuestión común en los foros de discusión de SAS es cómo calcular un promedio móvil en SAS. En este artículo se muestra cómo utilizar PROC EXPAND y contiene vínculos a artículos que utilizan el paso DATA o macros para calcular promedios móviles en SAS. En un post anterior, expliqué cómo definir un promedio móvil y proporcioné un ejemplo, que se muestra aquí. El gráfico es un diagrama de dispersión del precio de cierre mensual de las acciones de IBM durante un período de 20 años. Las tres curvas son promedios móviles. La curva 8220MA8221 es una media móvil de cinco puntos (arrastre). La curva 8220WMA8221 es una media móvil ponderada con pesos 1 a 5. Cuando se calcula la media móvil ponderada en el tiempo t, el valor yt tiene peso 5, el valor y t-1 tiene peso 4, el valor y t-2 tiene peso 3, etc.). La curva 8220EWMA8221 es una media móvil exponencialmente ponderada con factor de suavizado alfa 0.3. Este artículo muestra cómo utilizar el procedimiento EXPAND en el software SAS / ETS para calcular un promedio móvil simple, un promedio móvil ponderado y un promedio móvil ponderado exponencialmente en SAS. Para obtener una visión general de PROC EXPAND y sus múltiples capacidades, recomiendo leer el breve artículo 8220Stupid Human Tricks con PROC EXPAND8221 de David Cassell (2010). Como no todos los clientes de SAS tienen una licencia para el software SAS / ETS, hay enlaces al final de este artículo que muestran cómo calcular un promedio móvil simple en SAS mediante el paso DATA. Crear un ejemplo de serie temporal Antes de poder calcular un promedio móvil en SAS, necesita datos. La siguiente llamada a PROC SORT crea una serie de tiempo de ejemplo con 233 observaciones. No faltan valores. Los datos se ordenan por la variable de tiempo, T. La variable Y contiene el precio de cierre mensual de las acciones de IBM durante un período de 20 años. Calcular un promedio móvil en SAS mediante PROC EXPAND PROC EXPAND calcula muchos tipos de promedios móviles y otras estadísticas de balanceo, como desviaciones estándar de rodadura, correlaciones y sumas acumulativas de cuadrados. En el procedimiento, la instrucción ID identifica la variable de tiempo, T. Los datos deben ordenarse por la variable ID. La sentencia CONVERT especifica los nombres de las variables de entrada y salida. La opción TRANSFORMOUT especifica el método y los parámetros que se utilizan para calcular las estadísticas dinámicas. El ejemplo utiliza tres sentencias CONVERT: La primera especifica que MA es una variable de salida que se calcula como una media móvil (hacia atrás) que utiliza cinco valores de datos (k 5). La segunda sentencia CONVERT especifica que WMA es una variable de salida que es una media móvil ponderada. Los pesos se estandarizan automáticamente mediante el procedimiento, por lo que la fórmula es WMA (t) (5 yt 4 y t-1 3 y t-2 2 y t-3 1 y t-4) / 15. La tercera sentencia CONVERT especifica que EWMA es una variable de salida que es una media móvil exponencialmente ponderada con el parámetro 0.3. Observe la opción METHODNONE en la instrucción PROC EXPAND. De forma predeterminada, el procedimiento EXPAND ajusta las curvas cúbicas de spline a los valores no variables de las variables. Las opciones METHODNONE garantizan que los puntos de datos sin procesar se utilizan para calcular las medias móviles, en lugar de los valores interpolados. Visualización de promedios móviles Un uso importante de un promedio móvil consiste en superponer una curva en un diagrama de dispersión de los datos brutos. Esto le permite visualizar tendencias a corto plazo en los datos. La siguiente llamada a PROC SGPOT crea el gráfico en la parte superior de este artículo: Para mantener este artículo lo más simple posible, no he discutido cómo manejar los datos que faltan al calcular promedios móviles. Consulte la documentación de PROC EXPAND para obtener información sobre varios problemas relacionados con los datos que faltan. En particular, puede utilizar la opción METHOD para especificar cómo interpolar los valores faltantes. También puede utilizar opciones de transformación para controlar cómo se definen las medias móviles para los primeros puntos de datos. Crear un promedio móvil en SAS mediante el paso DATA Si no dispone de software SAS / ETS, las siguientes referencias muestran cómo utilizar el paso SAS DATA para calcular medias móviles simples utilizando la función LAG. La base de conocimiento SAS proporciona el artículo 8220Compute el promedio móvil de una variable.8221 Preoral Vora (2008) compara el paso DATA con el código PROC EXPAND en el papel 8220Easy Rolling Statistics con PROC EXPAND.8221 Ron Cody incluye una macro SAS en varios de sus libros. Por ejemplo, Cody8217s Colección de populares SAS tareas de programación y cómo lidiar con ellos proporciona una macro llamada movingAve. Puede descargar la macro como parte del 8220Example Code y Data8221 para el libro. El paso DATA, que está diseñado para manejar una observación a la vez, no es la mejor herramienta para los cálculos de series de tiempo, que naturalmente requieren múltiples observaciones (retardos y derivaciones). En un blog futuro, mostraré cómo escribir funciones SAS / IML que calculan medias móviles simples, ponderadas y exponencialmente ponderadas. El lenguaje de matriz en PROC IML es más fácil de trabajar con cálculos que requieren acceder a múltiples puntos de tiempo. ff / TheDoLoopdyIl2AUoC8zA / ff / TheDoLoopdqj6IDK7rITs / ff / TheDoLoopicbsotKEf1zY: e5B0sfO55lA: gIN9vFwOqvQ / ff / TheDoLoopicbsotKEf1zY: e5B0sfO55lA: VsGLiPBpWU / ff / TheDoLoopicbsotKEf1zY: e5B0sfO55lA: F7zBnMyn0Lo / ff / TheDoLoopdl6gmwiTKsz0 /

No comments:

Post a Comment