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: 29Compute una media móvil en SAS 27 de enero de 2016 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 MA es una media móvil de cinco puntos (arrastre). La curva WMA 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, y así sucesivamente). La curva EWMA es una media móvil exponencialmente ponderada con el 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 Stupid Human Tricks con PROC EXPAND 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 Calcular el promedio móvil de una variable. Preoral Vora (2008) compara el paso DATA con el código PROC EXPAND en el papel Easy Rolling Statistics con PROC EXPAND. Ron Cody incluye una macro de SAS en varios de sus libros. Por ejemplo, la Colección Codys de Tareas de Programación SAS Populares y Cómo Tratarlas provee una macro llamada movingAve. Puede descargar la macro como parte del código de ejemplo y datos del 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 / Por favor, comentar sobre el artículo aquí: Las operaciones DO LoopThe que puede ser Utilizados en las opciones TRANSFORMIN y TRANSFORMOUT se muestran en la Tabla 14.1. Las operaciones se aplican a cada valor de la serie. Cada valor de la serie se sustituye por el resultado de la operación. En la Tabla 14.1. O x representa el valor de la serie en un período de tiempo determinado t antes de aplicar la transformación, representa el valor de la serie de resultados y N representa el número total de observaciones. La notación n indica que el argumento n es opcional, el valor predeterminado es 1. La ventana de notación se utiliza como argumento para los operadores de estadísticas en movimiento e indica que puede especificar un número entero de períodos n o una lista de n pesos en Paréntesis La secuencia de notación se utiliza como argumento para los operadores de secuencia, e indica que debe especificar una secuencia de números. La notación s indica la longitud de la estacionalidad, y es un argumento requerido. Tabla 14.1 Operaciones de transformación Operadores de ventana de tiempo móvil Algunos operadores calculan estadísticas para un conjunto de valores dentro de una ventana de tiempo móvil, a los que se llaman operadores de ventanas de tiempo en movimiento. Hay versiones centradas y hacia atrás de estos operadores. Los operadores de ventanas de tiempo de movimiento en movimiento son CMOVAVE, CMOVCSS, CMOVGMEAN, CMOVMAX, CMOVMED, CMOVMIN, CMOVPROD, CMOVRANGE, CMOVRANK, CMOVSTD, CMOVSUM, CMOVTVALUE, CMOVUSS y CMOVVAR. Estos operadores calculan estadísticas de los valores de las observaciones. Los operadores de ventanas de tiempo de movimiento hacia atrás son MOVAVE, MOVCSS, MOVGMEAN, MOVMAX, MOVMED, MOVMIN, MOVPROD, MOVRANGE, MOVRANK, MOVSTD, MOVSUM, MOVTVALUE, MOVUSS y MOVVAR. Estos operadores calculan estadísticas de los valores. Todos los operadores de ventana de tiempo en movimiento aceptan un argumento que especifica el número de períodos a incluir en la ventana de tiempo. Por ejemplo, la siguiente sentencia calcula una media móvil hacia atrás de cinco períodos de X. En este ejemplo, la transformación resultante es La siguiente sentencia calcula una media móvil centrada en cinco periodos de X. En este ejemplo, la transformación resultante es Si la ventana con un operador de ventana de tiempo móvil en movimiento no es un número impar, se incluye un valor más retrasado que el valor de avance en la ventana de tiempo. Por ejemplo, el resultado del operador CMOVAVE 4 puede calcular una operación de ventana de tiempo de movimiento hacia adelante combinando un operador de ventana de tiempo de movimiento hacia atrás con el operador REVERSE. Por ejemplo, la siguiente sentencia calcula un promedio móvil de X de cinco periodos. En este ejemplo, la transformación resultante es Algunos de los operadores de ventana de tiempo de movimiento le permiten especificar una lista de valores de peso para calcular estadísticas ponderadas. Estos son CMOVAVE, CMOVCSS, CMOVGMEAN, CMOVPROD, CMOVSTD, CMOVTVALUE, CMOVUSS, CMOVVAR, MOVAVE, MOVCSS, MOVGMEAN, MOVPROD, MOVSTD, MOVTVALUE, MOVUSS y MOVVAR. Para especificar un operador de ventana de tiempo de movimiento ponderado, introduzca los valores de peso entre paréntesis después del nombre del operador. El ancho de ventana es igual al número de pesos que especifique que no especifique. Por ejemplo, la siguiente sentencia calcula un promedio móvil ponderado de cinco periodos de X. En este ejemplo, la transformación resultante es Los valores de peso deben ser mayores que cero. Si los pesos no suman 1, los pesos especificados se dividen por su suma para producir los pesos utilizados para calcular la estadística. Una ventana de tiempo completa no está disponible al principio de la serie. Para los operadores centrados, una ventana completa tampoco está disponible al final de la serie. El cálculo de los operadores de ventana de tiempo móvil se ajusta para estas condiciones de contorno como sigue. Para los operadores de ventanas que se mueven hacia atrás, el ancho de la ventana de tiempo se acorta al principio de la serie. Por ejemplo, los resultados del operador MOVSUM 3 son valores perdidos Puede truncar la longitud de la serie de resultados utilizando los operadores TRIM, TRIMLEFT y TRIMRIGHT para establecer valores que faltan al principio o al final de la serie. Puede utilizar estas funciones para recortar los resultados de los operadores de ventana de tiempo en movimiento de modo que la serie de resultados contenga sólo valores calculados desde una ventana de tiempo de ancho completo. Por ejemplo, las siguientes afirmaciones calculan una media móvil centrada de cinco periodos de X. Y establecen valores faltantes en los extremos de la serie que son promedios de menos de cinco valores. Normalmente, la ventana de tiempo móvil y los operadores de estadísticas acumuladas ignoran los valores faltantes y calculan sus resultados para los valores no perdidos. Cuando precedido por el operador NOMISS, estas funciones producen un resultado faltante si no hay ningún valor dentro de la ventana de tiempo. El operador NOMISS no realiza cálculos, sino que sirve para modificar el funcionamiento del operador de la ventana de tiempo móvil que lo sigue. El operador NOMISS no tiene efecto a menos que sea seguido por un operador de ventana de tiempo móvil. Por ejemplo, la siguiente sentencia calcula una media móvil de cinco períodos de la variable X pero produce un valor faltante cuando falta cualquiera de los cinco valores. La sentencia siguiente calcula la suma acumulada de la variable X pero produce un valor faltante para todos los períodos después del primer valor X faltante. Similar al operador NOMISS, el operador MISSONLY no realiza cálculos (a menos que sea seguido por la opción MEAN), pero sirve para modificar la operación del operador de la ventana de tiempo móvil que la sigue. Cuando se precede por el operador MISSONLY, estos operadores de ventanas de tiempo de movimiento reemplazan cualquier valor faltante con la estadística de movimiento y dejan los valores no perdidos sin cambios. Por ejemplo, la siguiente sentencia sustituye cualquier valor faltante de la variable X por una media móvil exponencialmente ponderada de los valores pasados de X y deja sin cambios los valores no perdidos. Los valores faltantes se interpolan utilizando la media móvil ponderada exponencial especificada. (Esto también se llama suavizado exponencial simple.) La siguiente declaración reemplaza cualquier valor faltante de la variable X con la media general de X. Puede utilizar el operador SETMISS para reemplazar valores perdidos con un número especificado. Por ejemplo, la siguiente declaración reemplaza cualquier valor faltante de la variable X con el número 8.77. Operadores clásicos de descomposición Si se trata de una serie temporal estacional con observaciones por estación, los métodos clásicos de descomposición dividen las series temporales en cuatro componentes: tendencias, ciclos, componentes estacionales e irregulares. Los componentes de tendencia y ciclo a menudo se combinan para formar el componente de ciclo de tendencia. Hay dos formas básicas de descomposición clásica: multiplicativa y aditiva, que se muestran a continuación. Ejemplos de uso Los índices estacionales multiplicativos son 0.9, 1.2. 0,8 y 1,1 para los cuatro trimestres. Sea SEASADJ una variable de series temporales trimestrales que se ha ajustado estacionalmente de manera multiplicativa. Para restablecer la estacionalidad a SEASADJ utilice la siguiente transformación: Los índices estacionales aditivos son 4.4, -1.1, -2.1 y -1.2 para los cuatro trimestres. Sea SEASADJ una variable de series temporales trimestrales que se ha ajustado estacionalmente de manera aditiva. Para restaurar la estacionalidad en SEASADJ, utilice la siguiente transformación: Operadores de conjunto Para los operadores de conjunto, el primer parámetro,, representa el valor a reemplazar y el segundo parámetro,, representa el valor de reemplazo. El reemplazo se puede localizar al principio, medio o final de la serie. Ejemplos de uso Supongamos que una tienda se abrió recientemente y que el historial de ventas se almacena en una base de datos que no reconoce valores perdidos. Aunque la demanda puede haber existido antes de la apertura de los almacenes, esta base de datos asigna el valor de cero. Modelar el historial de ventas puede ser problemático porque el historial de ventas es casi cero. Para compensar esta deficiencia, los valores iniciales cero se deben establecer como ausentes con los valores cero restantes sin cambios (lo que representa ninguna demanda). Asimismo, supongamos que una tienda está cerrada recientemente. La demanda puede todavía estar presente y por lo tanto un valor registrado de cero no refleja con exactitud la demanda real. Operador de escala
No comments:
Post a Comment