Wednesday 15 November 2017

Como Calcular A Média Móvel Em Sas


Incluí uma captura de tela para ajudar a esclarecer meu problema: Estou tentando calcular algum tipo de média móvel e desvio padrão em movimento. A coisa é eu quero calcular os coeficientes de variação (stdev / avg) para o valor real. Normalmente isso é feito pelo cálculo da stdev e avg nos últimos 5 anos. No entanto, por vezes, haverá observações na minha base de dados para o qual eu não tenho a informação dos últimos 5 anos (talvez apenas 3, 2, etc). É por isso que eu quero um código que irá calcular o avg e stdev mesmo se não houver nenhuma informação para os 5 anos inteiros. Além disso, como você vê nas observações, às vezes eu tenho informações sobre mais de 5 anos, quando este é o caso, eu preciso de algum tipo de média móvel que me permite calcular o avg e stdev para os últimos 5 anos. Então, se uma empresa tem informações por 7 anos eu preciso de algum tipo de código que irá calcular o avg e stdev para, digamos, 1997 (por 1991-1996), 1998 (por 1992-1997) e 1999 (1993-1998). Como im não muito familiarizado com sas comandos que deve olhar (muito, muito grosseiramente) como: Ou algo assim, eu realmente não tenho idéia, eu vou tentar e descobrir, mas vale a pena publicá-lo se eu não vou encontrá-lo myself. The amostra Na guia Código Completo ilustra como calcular a média móvel de uma variável através de um conjunto de dados inteiro, sobre as últimas N observações em um conjunto de dados ou sobre as últimas N observações dentro de um grupo BY. Esses arquivos de amostra e exemplos de código são fornecidos pelo SAS Institute Inc. como é sem garantia de qualquer tipo, expressa ou implícita, incluindo mas não se limitando às garantias implícitas de comercialização e adequação a um propósito específico. Os beneficiários reconhecem e concordam que SAS Institute não será responsável por quaisquer danos decorrentes da utilização destes materiais. Além disso, o SAS Institute não fornecerá suporte para os materiais aqui contidos. Esses arquivos de amostra e exemplos de código são fornecidos pelo SAS Institute Inc. como é sem garantia de qualquer tipo, expressa ou implícita, incluindo mas não se limitando às garantias implícitas de comercialização e adequação a um propósito específico. Os beneficiários reconhecem e concordam que SAS Institute não será responsável por quaisquer danos decorrentes da utilização destes materiais. Além disso, o SAS Institute não fornecerá suporte para os materiais aqui contidos. Calcule a média móvel de uma variável através de um conjunto de dados inteiro, sobre as últimas N observações em um conjunto de dados ou sobre as últimas N observações dentro de um grupo BY. Começando na versão 6.08 do SAS System, PROC EXPAND em SAS / ETS Software pode ser usado para fazer uma variedade de transformações de dados. Essas transformações incluem: leads, atrasos, médias móveis ponderadas e não ponderadas, somas móveis e somas cumulativas, para citar apenas algumas. Muitas novas transformações foram adicionadas na versão 6.12, incluindo especificações separadas para médias centradas e para trás. Essas novas transformações tornaram necessário modificar a sintaxe de algumas das transformações suportadas antes da Versão 6.12. Exemplos de como especificar a sintaxe para médias centradas e para trás movendo usando a versão 6.11 e anterior e versão 6.12 e posterior são dadas abaixo. PROC EXPAND pode calcular uma média móvel centrada ou uma média móvel para trás. Uma média móvel centrada em 5 períodos é calculada pela média de um total de 5 valores consecutivos da série (o valor do período corrente, além dos dois valores imediatamente anteriores e dois valores imediatamente a seguir ao valor actual). Uma média de retrocesso de 5 períodos é calculada pela média do valor do período corrente com os valores dos 4 períodos imediatamente anteriores. A sintaxe a seguir ilustra como usar a especificação TRANSFORM (MOVAVE n) para calcular uma média móvel centrada em 5 períodos usando a Versão 6.11 ou anterior: Para calcular uma média móvel de retrocesso de n períodos usando a Versão 6.11 ou anterior, use TRANSFORM (MOVAVE) N LAG k) especificação, onde k (n-1) / 2 se n é ímpar ou onde k (n-2) / 2 se n é par. A seguinte sintaxe ilustra como usar a especificação TRANSFORM (CMOVAVE n) para calcular uma média móvel centrada em 5 períodos usando a Liberação 6.12 ou Mais tarde: A seguinte sintaxe semelhante ilustra como usar a especificação TRANSFORM (MOVAVE n) para calcular uma média de retrocesso de 5 períodos usando a Versão 6.12 ou posterior: Para obter mais informações, consulte Operações de Transformação no capítulo EXPAND do Guia do Usuário do SAS / ETS . Se você não tiver acesso ao SAS / ETS, poderá calcular uma média móvel na etapa DATA, conforme ilustrado neste programa de exemplo. Sistema Operacional e Informação de LiberaçãoComputar uma média móvel em SAS Este post foi gentilmente contribuído pelo DO Loop - ir lá para comentar e ler o post completo. Uma questão comum nos fóruns de discussão do SAS é como calcular uma média móvel no SAS. Este artigo mostra como usar PROC EXPAND e contém links para artigos que usam a etapa DATA ou macros para calcular médias móveis no SAS. Em um post anterior, eu expliquei como definir uma média móvel e forneci um exemplo, que é mostrado aqui. O gráfico é um gráfico de dispersão do preço de fechamento mensal para ações da IBM durante um período de 20 anos. As três curvas são médias móveis. A curva 8220MA8221 é uma média móvel de cinco pontos (à direita). A curva 8220WMA8221 é uma média móvel ponderada com pesos de 1 a 5. (Ao calcular a média móvel ponderada no tempo t, o valor yt tem peso 5, o valor y t-1 tem peso 4, o valor y t-2 tem peso 3, e assim por diante). A curva 8220EWMA8221 é uma média móvel ponderada exponencialmente com factor de alisamento alfa 0.3. Este artigo mostra como usar o procedimento EXPAND no software SAS / ETS para calcular uma média móvel simples, uma média móvel ponderada e uma média móvel exponencialmente ponderada em SAS. Para uma visão geral do PROC EXPAND e seus muitos recursos, eu recomendo a leitura do artigo curto 8220Stupid Truques Humanos com PROC EXPAND8221 por David Cassell (2010). Como nem todos os clientes SAS têm uma licença para o software SAS / ETS, há links no final deste artigo que mostram como calcular uma média móvel simples no SAS usando a etapa DATA. Criar uma série de tempo de exemplo Antes de poder calcular uma média móvel em SAS, você precisa de dados. A seguinte chamada para PROC SORT cria um exemplo de série temporal com 233 observações. Não há valores em falta. Os dados são classificados pela variável tempo, T. A variável Y contém o preço de fechamento mensal das ações da IBM durante um período de 20 anos. Calcular uma média móvel em SAS usando PROC EXPAND PROC EXPAND calcula muitos tipos de médias móveis e outras estatísticas de rolagem, como desvios padrão de rolamento, correlações e somas acumuladas de quadrados. No procedimento, a instrução ID identifica a variável de tempo, T. Os dados devem ser classificados pela variável ID. A instrução CONVERT especifica os nomes das variáveis ​​de entrada e de saída. A opção TRANSFORMOUT especifica o método e parâmetros que são usados ​​para calcular as estatísticas de rolagem. O exemplo usa três instruções CONVERT: A primeira especifica que MA é uma variável de saída que é calculada como uma média móvel (para trás) que usa cinco valores de dados (k 5). A segunda instrução CONVERT especifica que WMA é uma variável de saída que é uma média móvel ponderada. Os pesos são automaticamente padronizados pelo procedimento, então a fórmula é WMA (t) (5 yt 4 y t-1 3 y t-2 2 y t-3 1 y t-4) / 15. A terceira declaração CONVERT especifica que EWMA é uma variável de saída que é uma média móvel exponencialmente ponderada com parâmetro 0.3. Observe a opção METHODNONE na instrução PROC EXPAND. Por padrão, o procedimento EXPAND ajusta as curvas de spline cúbicas aos valores não-perdidos das variáveis. As opções METHODNONE garantem que os pontos de dados brutos são usados ​​para calcular médias móveis, ao invés de valores interpolados. Visualizando médias móveis Um uso importante de uma média móvel é sobrepor uma curva em um gráfico de dispersão dos dados brutos. Isso permite que você visualize tendências de curto prazo nos dados. A seguinte chamada para PROC SGPOT cria o gráfico na parte superior deste artigo: Para manter este artigo tão simples quanto possível, eu não discuti como lidar com dados em falta ao calcular médias móveis. Consulte a documentação do PROC EXPAND para várias questões relacionadas a dados em falta. Em particular, você pode usar a opção METHOD para especificar como interpolar valores ausentes. Você também pode usar opções de transformação para controlar como as médias móveis são definidas para os primeiros pontos de dados. Criar uma média móvel em SAS usando a etapa DATA Se você não tiver o software SAS / ETS, as seguintes referências mostram como usar a etapa SAS DATA para calcular médias móveis simples usando a função LAG. A Base de Conhecimento da SAS fornece o artigo 8220Compute a média móvel de uma variável.8221 Preoral Vora (2008) compara a etapa DATA com o código PROC EXPAND no papel 8220Easy Rolling Statistics com PROC EXPAND.8221 Ron Cody inclui uma macro SAS em vários de seus Livros. Por exemplo, a Coleção Cody8217s de Tarefas de Programação SAS Populares e Como Contorná-las fornece uma macro chamada movingAve. Você pode fazer o download da macro como parte do 8220Example Code e Data8221 para o livro. A etapa DATA, projetada para lidar com uma observação de cada vez, não é a melhor ferramenta para computação em séries temporais, o que requer naturalmente múltiplas observações (atrasos e derivações). Em uma postagem no blog, vou mostrar como escrever funções SAS / IML que calculam médias móveis simples, ponderadas e exponencialmente ponderadas. A linguagem da matriz em PROC IML é mais fácil de trabalhar com cálculos que requerem acesso a vários pontos de tempo. ff / TheDoLoopdyIl2AUoC8zA / ff / TheDoLoopdqj6IDK7rITs / ff / TheDoLoopicbsotKEf1zY: e5B0sfO55lA: gIN9vFwOqvQ / ff / TheDoLoopicbsotKEf1zY: e5B0sfO55lA: VsGLiPBpWU / ff / TheDoLoopicbsotKEf1zY: e5B0sfO55lA: F7zBnMyn0Lo / ff / TheDoLoopdl6gmwiTKsz0 / FREQUENTE PROC com opção de SPARSE pode fazer a expansão para você mesmo se você Não licença ETS módulo. Aqui está uma solução usando somente SAS / BASE. O cálculo da média móvel é uma tarefa de programação direta. Proc freq datatest noprint tabela itemquarter / sparse outtest2 (renomear (countquantity) droppercent) let k2 / comprimento de sua janela / conjunto test2 por item array x temporário se first. item então fazer i1 para (dim (x) -1) x 0 Fim seqüência xmod (seq, ampk) seq1 seqgtampk e, em seguida, fazer seqgtampk, em seguida, fazer Agora, outra pergunta surgiu: alguns dos meus dados são propositadamente excluídos por anos inteiros. Estou usando o proc expandir converter opção para calcular as médias móveis como indicado anteriormente, mas como faço para obter o procedimento para começar de novo quando os anos não são consecutivos eu pensei sobre a criação de uma variável de contador, mas eu não posso fazer uma declaração if em proc expand. Aqui está um breve exemplo do que quero dizer. Item ano mês valor a 2000 12 a 2007 1 Aqui está o problema: o item só é comprado para estes dois anos, mas eu preciso de média móvel para começar por aqui. Qualquer sugestão seria muito apreciada. Vou continuar a trabalhar para descobrir isso também. Isso pode não ser prático se você tiver muitas séries diferentes de dados com anos diferentes, mas, você poderia incluir uma instrução where onde diz para fazer a expansão onde ano 2000 ou ano 2007. Dependendo de qual método de média móvel você está usando, Um passo de dados, então tem um se que diz se year2007 e month1, em seguida, iniciar a média móvel, ou algo para o efeito. Mas se diferentes séries têm anos diferentes, você teria que começar a executá-los separadamente (uma dor) ou talvez você poderia construir um conjunto de dados que você mescla em que fornece essa informação (uma coluna indicaria o item, outro teria o ano (S) que são relevantes com um registro adicional para cada ano). Em seguida, fazer proc expand / Moving Avg em cada um, em seguida, anexar esses conjuntos de dados. Mas novamente, isso não seria divertido se você tiver séries diferentes com diferentes anos / intervalos de anos.

No comments:

Post a Comment