Wednesday, October 5, 2016

Compute Moving Average In Sas

El código de ejemplo en la ficha de código completo ilustra cómo calcular la media móvil de una variable a través de todo un conjunto de datos, en los últimos N observaciones en un conjunto de datos, o en los últimos N observaciones dentro de un sub-grupo. Estos archivos de ejemplo y ejemplos de código son proporcionados por SAS Institute Inc. tal cual, sin garantía de ningún tipo, ya sea expresa o implícita, incluyendo, pero no limitado a, las garantías implícitas de comerciabilidad y adecuación para un propósito particular. Los beneficiarios reconocen y aceptan que SAS Institute no será responsable por cualquier daño que surja de su uso de este material. Además, SAS Institute no proporcionará soporte técnico para los materiales contenidos en este documento. Estos archivos de ejemplo y ejemplos de código son proporcionados por SAS Institute Inc. tal cual, sin garantía de ningún tipo, ya sea expresa o implícita, incluyendo, pero no limitado a, las garantías implícitas de comerciabilidad y adecuación para un propósito particular. Los beneficiarios reconocen y aceptan que SAS Institute no será responsable por cualquier daño que surja de su uso de este material. Además, SAS Institute no proporcionará soporte técnico para los materiales contenidos en este documento. Calcular la media móvil de una variable a través de todo un conjunto de datos, en los últimos N observaciones en un conjunto de datos, o en los últimos N observaciones dentro de un sub-group. Beginning en Release 6.08 del Sistema SAS, Proc expandirse en SAS / ETS software se puede usar para hacer una variedad de transformaciones de datos. Estas transformaciones incluyen: cables, retrasos, los promedios móviles ponderados y no ponderados, sumas y sumas acumuladas en movimiento, para nombrar unos pocos. Muchas de las nuevas transformaciones se añadieron en la versión 6.12, que incluye especificaciones distintas para los promedios móviles centrados y hacia atrás. Estas nuevas transformaciones hicieron necesario modificar la sintaxis para algunas de las transformaciones soportadas antes de la Release 6.12. Los ejemplos de cómo especificar la sintaxis de las medias móviles centradas y hacia atrás utilizando Release 6.11 y anteriores y Release 6.12 y más tarde se dan a continuación. PROC Expand puede calcular ya sea un CENTRADO media móvil o un promedio móvil hacia atrás. A 5-periodo centrado media móvil 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 después del valor actual). Un período de 5-media móvil hacia atrás se calcula promediando el valor del período actual con los valores de los 4 períodos inmediatamente anteriores. La siguiente sintaxis muestra cómo utilizar la especificación TRANSFORM (MOVAVE n) para calcular un 5 periodos centrada media móvil utilizando Release 6.11 o anterior: Para calcular un periodo n se mueve hacia atrás promedio utilizando Release 6.11 o anterior, hacer uso de la transformada (MOVAVE n LAG k) la especificación, en donde k (n-1) / 2 si n es par o k donde (n-2) / 2 si n es par. Por ejemplo, la sintaxis siguiente ilustra cómo calcular a 5 periodo medio hacia atrás en movimiento utilizando Release 6.11 o anterior: La siguiente sintaxis muestra cómo utilizar la especificación TRANSFORM (CMOVAVE n) para calcular un 5 periodos centrado de media usando Release 6.12 o en movimiento más tarde: la siguiente sintaxis similar ilustra cómo utilizar la especificación TRANSFORM (MOVAVE n) para calcular un 5 periodo medio hacia atrás en movimiento utilizando Release 6.12 o posterior: para obtener más información, consulte operaciones de transformación en el capítulo de la extensión de la Guía de SAS / ETS Usuarios . Si usted no tiene acceso a SAS / ETS, se puede calcular un promedio móvil en el paso de datos como se ilustra en este programa de ejemplo. Sistema operativo y el lanzamiento InformationCompute un promedio móvil en el SAS 27 de de enero de, 2016 (Este artículo fue publicado originalmente en The Loop DO. Sindicado y en StatsBlogs.) Una pregunta común en los foros de discusión SAS es cómo calcular un promedio móvil en el SAS. En este artículo se muestra cómo utilizar PROC expandir y contiene enlaces a artículos que utilizan el paso DATA o macros para calcular medias móviles en el SAS. En un post anterior, he explicado cómo definir una media móvil y proporciona un ejemplo, que se muestra aquí. El gráfico es un gráfico de dispersión de los precios de cierre mensual de las acciones de IBM durante un período de 20 años. Las tres curvas son las medias móviles. La curva de MA es una de cinco puntos (de salida) de media móvil. La curva de WMA es una media móvil ponderada con pesos de 1 a 5. (Cuando se calcula la media móvil ponderada en el tiempo t. El valor yt tiene un peso 5, el valor y t-1 tiene un peso de 4, el valor y t-2 tiene un peso 3, y así sucesivamente.) La curva EWMA es un promedio móvil ponderado exponencialmente con suavizado factor alfa 0,3. En este artículo se muestra cómo utilizar el procedimiento EXPAND en el software / ETS SAS para calcular una media móvil simple, una media móvil ponderada, y un promedio móvil ponderado exponencialmente en el SAS. Para una visión general de PROC se expanden y sus múltiples capacidades, recomiendo la lectura del documento corto trucos estúpidos humanos con PROC EXPAND por David Cassell (2010). Debido a que no todas las SAS cliente tiene una licencia para el software SAS / ETS, hay enlaces al final de este artículo que muestran cómo calcular una media móvil simple en SAS utilizando el paso DATOS. Crear una serie temporal ejemplo Antes de poder calcular un promedio móvil en el SAS, necesita datos. La siguiente llamada para ordenar PROC crea una serie temporal ejemplo, con 233 observaciones. No hay valores que faltan. Los datos están ordenados por la variable tiempo, T. La variable Y contiene el precio mensual de cierre de las acciones de IBM durante un período de 20 años. Calcular un promedio móvil en SAS utilizando PROC PROC EXPAND EXPAND calcula muchos tipos de medias móviles y otras estadísticas de rodadura, tales como rodar desviaciones estándar, correlaciones y sumas acumuladas de los cuadrados. En el procedimiento, la cuenta de ID identifica la variable tiempo, T. Los datos deben ser ordenadas por la variable de identificación. La declaración CONVERTIR especifica los nombres de las variables de entrada y de salida. La opción TRANSFORMOUT especifica el método y los parámetros que se utilizan para calcular las estadísticas de rodadura. El ejemplo utiliza tres estados convertir: El primero especifica que MA es una variable de salida que se calcula como (hacia atrás) de media móvil que utiliza cinco valores de datos (K 5). La segunda instrucción CONVERTIR especifica que WMA es una variable de salida que es una media móvil ponderada. Los pesos están estandarizados automáticamente por el procedimiento, por lo que la fórmula es WMA (t) (5 yt 4 y t-1 y t-3 2 2 y T-3 1 y t-4) / 15. La tercera declaración especifica que CONVERT EWMA es una variable de salida que es un promedio móvil ponderado exponencialmente con el parámetro 0.3. Observe la opción METHODNONE en la declaración PROC expandirse. Por defecto, el procedimiento se ajusta EXPAND curvas spline cúbicas a los valores no perdidos de las variables. Las opciones METHODNONE asegura que los puntos de datos en bruto se utilizan para calcular las medias móviles, en lugar de los valores interpolados. La visualización de las medias móviles Un uso importante de un promedio móvil es superponer una curva en un gráfico de dispersión de los datos en bruto. Esto le permite visualizar las 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 tan simple como sea posible, no he hablado de cómo manejar los datos que faltan cuando se calculan las medias móviles. Consulte la documentación para PROC EXPAND para diversas cuestiones relacionadas con los datos que faltan. En particular, se puede utilizar la opción método para especificar cómo interpolar los valores perdidos. También puede utilizar las opciones de transformación para controlar cómo medias móviles se define para los primeros puntos de datos. Crear una media móvil en el SAS mediante el paso de datos si usted no tiene el software SAS / ETS, las siguientes referencias muestran cómo utilizar el paso de datos SAS para calcular medias móviles simples mediante el uso de la función LAG. La Base de Conocimientos de SAS proporciona el artículo de computar la media móvil de una variable. Premal Vora (2008) compara el paso DATA para PROC EXPAND código en el papel de los Rolling Fácil Estadística con PROC expandirse. Ron Cody incluye una macro de SAS en varios de sus libros. Por ejemplo, Codys colección de Popular SAS tareas de programación y la manera de abordarlos proporciona una macro denominada movingAve. Puede descargar la macro como parte del Código de Ejemplo y Datos para el libro. El paso DATA, que está diseñado para manejar una observación a la vez, no es la mejor herramienta para cálculos de series temporales, que requieren, naturalmente, múltiples observaciones (GAL) y clientes potenciales. En otro post, voy a mostrar cómo escribir funciones SAS / IML que calculan sencilla, pesan y promedios móviles ponderados exponencialmente. El lenguaje de la matriz en PROC IML es más fácil trabajar con para los cálculos que requieren el acceso a múltiples puntos de tiempo. ff / TheDoLoopdyIl2AUoC8zA / ff / TheDoLoopdqj6IDK7rITs / ff / TheDoLoopicbsotKEf1zY: e5B0sfO55lA: gIN9vFwOqvQ / ff / TheDoLoopicbsotKEf1zY: e5B0sfO55lA: VsGLiPBpWU / ff / TheDoLoopicbsotKEf1zY: e5B0sfO55lA: F7zBnMyn0Lo / ff / TheDoLoopdl6gmwiTKsz0 / Sírvanse formular observaciones sobre el artículo aquí: La DO Loopi estoy tratando de calcular medias móviles trimestrales dentro de un grupo de sin embargo, hay un número diferente de observaciones dentro de cada grupo. He visto algunos ejemplos, pero adquieren deben ser promediados a lo largo del mismo número de observaciones. He aquí un ejemplo: Los artículos a y d se compran en cada trimestre, pero el artículo B sólo se adquiere en el segundo y tercer trimestres, mientras que el punto c se compra solamente en cuartos de 4. Así, el grupo estaría por artículo por artículo cuarto trimestre Cantidad El ejemplo anterior es una especie de versión aguada. Estoy utilizando datos de series de tiempo y a pesar de que se compra un artículo cada trimestre en un año, no se pueden comprar cada trimestre en otro año, o que no se pueden comprar en absoluto para un año en particular. ¿Hay una forma sencilla de calcular los promedios móviles de este tipo de datos sin interpolación Si es posible, se puede incluir también un ejemplo con la interpolación Cualquier ayuda sería muy apreciada. He tratado de ampliar los datos para incluir los valores que faltan para que las medias móviles se pueden calcular como paigemiller ha sugerido. Estoy trabajando con SAS / ETS, por cierto. Estoy utilizando datos mensuales y la variable de fecha tiene el formato de monyy. Aquí está el código que estoy usando para expandir los datos: datafisher3 proc ordenar por artículo de la clase fecha de ejecución proc ampliar datafisher3 methodnone outfshrexp frommonth por artículo de la clase no incluyen la fecha en por grupos de aquí o no lo puedo Pregunta trabajo: pensé que esto resuelve mi falta valores problema, sin embargo, cuando hay valores perdidos en el inicio / final de la serie (ej. los valores para la salida variable en marzo en lugar de enero y pueden terminar en octubre, en lugar de diciembre), estos valores permanecen desaparecidos (no se muestran en el conjunto de datos expandido) aunque el resto de la serie está expandido. ¿Hay alguna manera, o una opción en proc expanda, para obtener SAS para indicar que estos valores están perdiendo así también, aquí está el código básico que estoy usando para calcular las medias móviles. A pesar de que necesito para corregir el problema los valores perdidos, este código funciona bastante bien. Usted puede convertir múltiples VARs a la vez y utilizar varias instrucciones Convert para crear diferentes medias móviles a la vez para los VARs. proc tipo dataold por artículo de la clase fecha de ejecución proc ampliar dataold outnew convertir var1movingaverage / transformout methodnone (movave 3) PROC FREQ con la opción escasas pueden hacer la expansión para usted, incluso si usted no licenciar módulo de ETS. Aquí está una soluation utilizando SAS / única base. El cálculo de la media móvil es una tarea de programación directa. proc frec DataTest mesa noprint itemquarter / outtest2 escasa (renombrar (countquantity) droppercent) dejar que k2 / longitud de la ventana / test2 establecido por elemento del array x temporal si first. item continuación Qué hacen i1 a (dim (x) -1) x 0 xmod extremo (ss, la AMPK) seq1 cantidad si seqgtampk luego hacer si seqgtampk luego hacer otra pregunta Ahora ha llegado: algunos de mis datos están excluidos a propósito de años enteros. Estoy utilizando la opción de convertir el proc ampliar para calcular las medias móviles como se ha indicado anteriormente, pero ¿cómo consigo el procedimiento para empezar de nuevo cuando los años no son consecutivas pensé en crear una variable de contador, pero no puedo hacer una sentencia if en proc expanda. He aquí un breve ejemplo de lo que quiero decir. Artículo Valor mes año 2000 un 12 a 2007 1 Aquí está el problema: el artículo se compra solamente para estos dos años pero necesito media móvil de empezar de nuevo aquí. Cualquier sugerencia sería muy apreciada. Ill seguir trabajando en calcular esto también. Esto podría no ser práctico si tiene muchas series de datos diferentes con diferentes años, pero, podría incluir una declaración donde dice que para hacer la expansión en el año 2000 o el año 2007. En función de lo que se mueve usted está usando método de la media, si es en un paso de datos, a continuación, si tienes una que dice que si year2007 y mes1 a continuación, iniciar la media móvil más, o algo por el estilo. Pero si diferentes series tienen diferentes años, usted o bien tienen que empezar a correr por separado (un dolor) o tal vez usted podría construir un conjunto de datos que se fusionan en que proporciona esa información (una columna indicaría el artículo, otra tendría el año (s) que son relevantes con un registro adicional por cada año). Entonces proc ampliar / media en movimiento en cada uno, tiene que poner esos conjuntos de datos. Pero, de nuevo, eso no sería divertido si tienes series diferentes con diferentes rangos de años / años.


No comments:

Post a Comment