Friday 27 October 2017

Calculate Moving Average In Sas


Eu 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 móvel. A coisa é que eu quero calcular os coeficientes de variação (stdevavg) para o valor real. Normalmente isso é feito calculando o stdev e o avg nos últimos 5 anos. No entanto, às vezes, haverá observações no meu banco de dados para o qual não tenho informações 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 que não haja informações durante os 5 anos inteiros. Além disso, como você vê nas observações, às vezes eu tenho informações durante mais de 5 anos, quando este é o caso, eu preciso de algum tipo de média móvel que me permita calcular o avg e stdev nos últimos 5 anos. Então, se uma empresa tem informações por 7 anos, preciso de algum tipo de código que calculará o avg e stdev para, digamos, 1997 (em 1991-1996), 1998 (em 1992-1997) e 1999 (1993-1998). Como não estou muito familiarizado com os comandos sas, deve parecer (muito muito grosso) como: Ou algo assim, eu realmente não tenho idéia, vou tentar descobrir, mas vale a pena publicá-lo se eu não o encontrar. Posto, mostro um truque para fazer o cálculo da média móvel (pode ser estendido para outras operações que requerem funções de janelas) que é super rápido. Muitas vezes, os analistas do SAS precisam realizar o cálculo da média móvel e existem várias opções pela ordem de preferência: 1. PROC EXPAND 2. DATA STEP 3. PROC SQL Mas muitos sites podem não licenciar SASETS para usar PROC EXPAND e fazer a média móvel em DATA STEP requer alguma codificação e é propenso a erros. PROC SQL é uma escolha natural para programadores júnior e em muitos casos comerciais a única solução, mas o PROC SQLs da SAS não possui funções de janelas que estão disponíveis em muitos DBs para facilitar o cálculo da média móvel. Uma técnica que as pessoas costumam usar é CROSS JOIN, que é muito caro e não é uma solução viável para um conjunto de dados de tamanho médio. Nesta publicação, mostro um truque para fazer o cálculo da média móvel (pode ser estendido para outras operações que requerem funções de janelas) que é super rápido. Considere o cálculo da média móvel mais simples, onde as observações K que se seguem estão incluídas no cálculo, ou seja, MA (K), aqui estabelecemos K5. Geramos primeiro um dado de amostra de 20obs, onde ID de variável deve ser usada para janelas e a variável X deve ser usada no cálculo de MA e, em seguida, aplicamos o padrão CROSS JOIN para primeiro examinar os dados resultantes, não agrupados, apenas Para entender como alavancar a estrutura de dados. A partir do conjunto de dados resultante, é difícil encontrar uma pista, agora let39s classificar por quotbidquot coluna neste conjunto de dados: A partir desses dados ordenados, é claro que, na verdade, não precisamos CROSS JOIN the whole original data set, mas, em vez disso, Podemos gerar um conjunto de dados quotoperationquot que contém o valor da diferença e deixar o conjunto de dados original CROSS JOIN com este conjunto de dados quotoperationquot muito menor e todos os dados que precisamos usar para o cálculo de MA estarão lá. Agora vamos fazer: CROSS JUNTE os dados originais com dados quotoperationquot, classifique por (a. idops), que é realmente quotbid39 no conjunto de dados ordenados. Observe que, no código acima, é necessário que o machado multiplique por b. weight para que os dados Pode ser inter-folhas, caso contrário, o mesmo valor X da tabela original será gerado e o cálculo MA será falhado. A variável de peso explícita realmente acrescenta mais flexibilidade ao cálculo do MA inteiro. Ao definir isso como sendo 1 para todos os resultados de obs em um cálculo de MA simples, atribuir pesos diferentes ajudará a resolver uma computação de MA mais complexa, como dar mais observações menos peso para um MA decadente. Se o parâmetro K diferente em cálculos MA (K) for necessário, apenas o conjunto de dados da operação precisa ser atualizado, o que é um trabalho trivial. Agora, o modelo de código real para o cálculo de MA (K) será: com este novo método, é interessante compará-lo com o auto caro CROSS JOIN, bem como para PROC EXPAND. Na minha estação de trabalho (Intel i5 3.8Ghz, memória de 32GB, 1TB 72K HDD), self CROSS JOIN é proibitivamente longo no tempo de execução (se os dados são grandes) enquanto o novo método usa apenas 2X quanto tempo como PROC EXPAND, ambos os consumos de tempo são Comparação trivial com auto CROSS JOIN. O consumo de tempo mostrado abaixo é em quotecondquot. Abaixo está o código que os leitores podem executar e comparar-se. Postado em 10 de maio de 2015 pela Liang Xie SAS Programming for Data MiningBeginning 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