Moving average using proc expand


Im um novato de SAS e Im curioso se a seguinte tarefa puder ser feita muito mais simples como está atualmente em minha cabeça. Tenho os seguintes meta dados em uma tabela chamada userdatemoney: Usuário - Data - Dinheiro com vários usuários e datas para cada dia do calendário (nos últimos 4 anos). Os dados são ordenados pelo usuário ASC e Data ASC, os dados de exemplo se parece com isso: Eu agora quero calcular uma média móvel de cinco dias para o dinheiro. Eu comecei com o apprach muito popular com a função lag () como este: como você vê, o problema com este método ocorre se lá se a etapa de dados é executado em um novo usuário. Aron receberia alguns valores defasados ​​de Anna que, naturalmente, não deveria acontecer. Agora a minha pergunta: Tenho certeza que você pode lidar com o usuário mudar adicionando alguns campos extras como laggeduser e redefinindo as variáveis ​​N, Soma e Média se você notar tal interruptor, mas: Isso pode ser feito de uma maneira mais fácil Talvez usando o Por Cláusula de qualquer maneira Obrigado por suas idéias e ajuda Eu acho que a maneira mais fácil é usar PROC EXPAND: E como mencionado no comentário de Johns, é importante lembrar sobre valores faltantes (e sobre observações de começo e término também). Eu adicionei SETMISS opção para o código, como você deixou claro que você deseja zerofy valores em falta, não ignorá-los (comportamento padrão MOVAVE). E se você quiser excluir as primeiras 4 observações para cada usuário (já que elas não têm pré-histórico suficiente para calcular a média móvel 5), você pode usar a opção TRIMLEFT 4 dentro de TRANSFORMOUT (). Respondido Dec 3 13 at 15: 29 Começando na versão 6.08 do sistema SAS, PROC EXPAND no software SAS / ETS 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. Informações do Sistema Operacional e de Liberação As operações que podem ser usadas nas opções TRANSFORMIN e TRANSFORMOUT são mostradas na Tabela 14.1. As operações são aplicadas a cada valor da série. Cada valor da série é substituído pelo resultado da operação. Na Tabela 14.1. Ou x representa o valor da série em um determinado período de tempo t antes que a transformação seja aplicada, representa o valor da série de resultados e N representa o número total de observações. A notação n indica que o argumento n é opcional, o padrão é 1. A janela de notação é usada como o argumento para os operadores de estatísticas móveis e indica que você pode especificar um número inteiro de períodos n ou uma lista de n pesos em parênteses. A seqüência de notação é usada como o argumento para os operadores de seqüência e indica que você deve especificar uma seqüência de números. A notação s indica o comprimento da sazonalidade, e é um argumento exigido. Tabela 14.1 Operações de Transformação Movendo Operadores de Janela de Tempo Alguns operadores calculam estatísticas para um conjunto de valores dentro de uma janela de tempo em movimento, estes são chamados de operadores de janela de tempo em movimento. Existem versões centradas e para trás desses operadores. Os operadores de janela de tempo em movimento centrado são CMOVAVE, CMOVCSS, CMOVGMEAN, CMOVMAX, CMOVMED, CMOVMIN, CMOVPROD, CMOVRANGE, CMOVRANK, CMOVSTD, CMOVSUM, CMOVTVALUE, CMOVUSS e CMOVVAR. Estes operadores calculam as estatísticas dos valores das observações. Os operadores de janela de tempo de movimento para trás são MOVAVE, MOVCSS, MOVGMEAN, MOVMAX, MOVMED, MOVIM, MOVPROD, MOVRANGE, MOVRANK, MOVSTD, MOVSUM, MOVTVALUE, MOVUSS e MOVVAR. Estes operadores calculam estatísticas dos valores. Todos os operadores de janela de tempo em movimento aceitam um argumento especificando o número de períodos a serem incluídos na janela de tempo. Por exemplo, a seguinte instrução calcula uma média móvel de retrocesso de cinco períodos de X. Neste exemplo, a transformação resultante é A seguinte instrução calcula uma média móvel centrada de cinco períodos de X. Neste exemplo, a transformação resultante é Se a janela com um operador de janela de tempo móvel em movimento não for um número ímpar, um valor mais atrasado que o valor de chumbo é incluído na janela de tempo. Por exemplo, o resultado do operador CMOVAVE 4 é Você pode calcular uma operação de janela de tempo de movimento em frente combinando um operador de janela de tempo de movimento para trás com o operador REVERSE. Por exemplo, a seguinte instrução calcula uma média móvel forward de cinco períodos de X. Neste exemplo, a transformação resultante é Alguns dos operadores de janela de tempo móvel permitem especificar uma lista de valores de peso para calcular estatísticas ponderadas. Estes são CMOVAVE, CMOVCSS, CMOVGMEAN, CMOVPROD, CMOVSTD, CMOVTVALUE, CMOVUSS, CMOVVAR, MOVAVE, MOVCSS, MOVGMEAN, MOVPROD, MOVSTD, MOVTVALUE, MOVUSS e MOVVAR. Para especificar um operador de janela de tempo de movimento ponderado, insira os valores de peso entre parênteses após o nome do operador. A largura da janela é igual ao número de pesos que você especificar não especificar. Por exemplo, a seguinte instrução calcula uma média móvel ponderada de cinco períodos centrada de X. Neste exemplo, a transformação resultante é. Os valores de peso devem ser maiores que zero. Se os pesos não somarem 1, os pesos especificados são divididos pela sua soma para produzir os pesos usados ​​para calcular a estatística. Uma janela de tempo completo não está disponível no início da série. Para os operadores centrados uma janela completa também não está disponível no final da série. O cálculo dos operadores de janela de tempo móvel é ajustado para estas condições de contorno como se segue. Para operadores de janela que se movem para trás, a largura da janela de tempo é encurtada no início da série. Por exemplo, os resultados do operador MOVSUM 3 são valores ausentes Você pode truncar o comprimento da série de resultados usando os operadores TRIM, TRIMLEFT e TRIMRIGHT para definir valores a serem faltando no início ou no final da série. Você pode usar essas funções para aparar os resultados dos operadores de janela de tempo em movimento para que a série de resultados contenha apenas valores calculados a partir de uma janela de tempo de largura total. Por exemplo, as seguintes instruções calculam uma média móvel de cinco períodos centrada de X. E eles definem valores faltando nas extremidades da série que são médias de menos de cinco valores. Normalmente, a janela de tempo móvel e os operadores de estatísticas cumulativas ignoram os valores em falta e calculam os respectivos resultados para os valores não perdidos. Quando precedido pelo operador NOMISS, estas funções produzem um resultado em falta se qualquer valor dentro da janela de tempo estiver em falta. O operador NOMISS não executa quaisquer cálculos, mas serve para modificar a operação do operador da janela de tempo móvel que a segue. O operador NOMISS não tem efeito a menos que seja seguido por um operador de janela de tempo móvel. Por exemplo, a instrução a seguir calcula uma média móvel de cinco períodos da variável X, mas produz um valor ausente quando qualquer um dos cinco valores está faltando. A instrução a seguir calcula a soma cumulativa da variável X, mas produz um valor ausente para todos os períodos após o primeiro valor X em falta. Semelhante ao operador NOMISS, o operador MISSONLY não executa quaisquer cálculos (a menos que seja seguido pela opção MEAN), mas serve para modificar a operação do operador da janela de tempo móvel que a segue. Quando precedido pelo operador MISSONLY, estes operadores de janela de tempo de movimento substituem quaisquer valores em falta pela estatística de movimento e deixam valores não perdidos inalterados. Por exemplo, a instrução a seguir substitui quaisquer valores ausentes da variável X por uma média móvel exponencialmente ponderada dos valores passados ​​de X e deixa inalterados os valores não-perdidos. Os valores em falta são interpolados utilizando a média móvel exponencialmente ponderada especificada. (Isso também é chamado de suavização exponencial simples.) A seguinte declaração substitui quaisquer valores ausentes da variável X pela média geral de X. Você pode usar o operador SETMISS para substituir valores ausentes por um número especificado. Por exemplo, a seguinte declaração substitui quaisquer valores ausentes da variável X pelo número 8.77. Operadores de Decomposição Clássica Se é uma série temporal sazonal com observações por estação, os métodos clássicos de decomposição dividem as séries temporais em quatro componentes: tendência, ciclo, sazonalidade e componentes irregulares. Os componentes de tendência e ciclo são frequentemente combinados para formar a componente tendência-ciclo. Existem duas formas básicas de decomposição clássica: multiplicativa e aditiva, que são mostradas abaixo. Exemplos de Uso Os índices sazonais multiplicativos são 0,9, 1,2. 0,8 e 1,1 para os quatro trimestres. Seja SEASADJ uma variável de séries temporais trimestral que tenha sido ajustada sazonalmente de forma multiplicativa. Para restaurar a sazonalidade para SEASADJ use a seguinte transformação: Os índices sazonais aditivos são 4,4, -1,1, -2,1 e -1,2 para os quatro trimestres. Seja SEASADJ uma variável de séries temporais trimestrais que tenha sido ajustada sazonalmente de forma aditiva. Para restaurar a sazonalidade para SEASADJ use a seguinte transformação: Set Operators Para os operadores set, o primeiro parâmetro,, representa o valor a ser substituído eo segundo parâmetro,, representa o valor de substituição. A substituição pode ser localizada para o início, meio ou fim da série. Exemplos de uso Suponha que uma loja tenha sido aberta recentemente e que o histórico de vendas esteja armazenado em um banco de dados que não reconheça valores ausentes. Mesmo que a demanda possa ter existido antes da abertura das lojas, esse banco de dados atribui o valor de zero. Modelar o histórico de vendas pode ser problemático porque o histórico de vendas é quase zero. Para compensar esta deficiência, os valores zero iniciais devem ser definidos como faltando com os valores zero restantes inalterados (representando nenhuma demanda). Da mesma forma, suponha que uma loja esteja fechada recentemente. A demanda pode ainda estar presente e, portanto, um valor registrado de zero não reflete com precisão a demanda real. Operador de Escala

Comments

Popular Posts