Sunday 30 July 2017

Moving Average Using Proc Expand


Eu sou um iniciante do SAS e estou curioso se a seguinte tarefa pode ser feita muito mais simples, pois atualmente está na minha cabeça. Eu tenho os seguintes metadados (simplificados) em uma tabela chamada userdatemoney: Usuário - Data - Dinheiro com vários usuários e datas para cada dia de calendário (nos últimos 4 anos). Os dados são ordenados pelo Usuário ASC e Data ASC, os dados da amostra são assim: agora eu quero calcular uma média móvel de cinco dias para o Money. Eu comecei com o apprach bastante popular com a função lag () como esta: como você vê, o problema com este método ocorre se houver se o passo de dados se deparar com um novo usuário. Aron obteria alguns valores retardados de Anna, o que, é claro, não deveria acontecer. Agora, minha pergunta: eu tenho certeza de que você pode lidar com a mudança do usuário, adicionando alguns campos extras, como o laggeduser e redefinindo as variáveis ​​N, Soma e Média, se você notar essa mudança, mas: Isso pode ser feito de maneira mais fácil. POR Cláusula de alguma forma Obrigado por suas idéias e ajuda, acho que a maneira mais fácil é usar PROC EXPAND: E como mencionado no comentário de Johns, é importante lembrar sobre os valores faltantes (e sobre as observações iniciais e finais também). Eu adicionei a opção SETMISS ao código, como você deixou claro que deseja esconder valores faltantes, não ignorá-los (comportamento MOVAVE padrão). E se você deseja excluir as primeiras 4 observações para cada usuário (uma vez que 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 em 3 de dezembro às 15: 29. Começando na Versão 6.08 do Sistema SAS, o PROC EXPAND no software SASETS 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 em movimento e somas cumulativas, para citar alguns. Muitas novas transformações foram adicionadas na versão 6.12, incluindo especificações separadas para médias movidas centradas e para trás. Essas novas transformações tornaram necessário modificar a sintaxe para algumas das transformações suportadas antes da versão 6.12. Exemplos de como especificar a sintaxe para médias móveis centradas e para trás, usando o Release 6.11 e versões anteriores e a versão 6.12 e posterior, são fornecidos 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 5 valores consecutivos da série (o valor do período atual além dos dois valores imediatamente precedentes e dois valores imediatamente após o valor atual). Uma média móvel retroativa de 5 períodos é calculada pela média do valor do período atual 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 centralizada de 5 períodos usando a Versão 6.11 ou anterior: Para calcular uma média móvel de atraso n com a Versão 6.11 ou anterior, faça uso da TRANSFORM (MOVAVE N LAG k), onde k (n-1) 2 se n for estranho ou onde k (n-2) 2 se n for igual. Por exemplo, a seguinte sintaxe ilustra como calcular uma média móvel de 5 períodos com a versão 6.11 ou anterior. 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 Versão 6.12 ou Mais tarde: A seguinte sintaxe semelhante ilustra como usar a especificação TRANSFORM (MOVAVE n) para calcular uma média móvel retroativa 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 SASETS. Se você não tiver acesso a SASETS, você pode calcular uma média móvel na etapa DATA conforme ilustrado neste programa de exemplo. Sistema operacional e informações de versão

No comments:

Post a Comment