Movendo média função em sas


O código de exemplo 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, nas últimas N observações em um conjunto de dados ou nas ú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 o SAS Institute não se responsabiliza por quaisquer danos decorrentes da utilização deste material. 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 o SAS Institute não se responsabiliza por quaisquer danos decorrentes da utilização deste material. 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. Im um iniciante SAS e Im curioso se a seguinte tarefa pode ser feito muito Mais simples como é atualmente na minha cabeça. Eu tenho os seguintes meta metadados (simplificados) 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, dados de exemplo se parece com isto: Agora eu 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 iria obter alguns valores defasados ​​de Anna, que é claro que não deveria acontecer. Agora a minha pergunta: Tenho certeza de 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 Johns, é importante lembrar sobre valores em falta (e sobre o início e fim observações 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 (uma vez que eles não têm pré-história suficiente para calcular a média móvel 5), você pode usar a opção TRIMLEFT 4 dentro TRANSFORMOUT (). Respondido Dec 3 13 at 15: 29Sas FunçõesComputando uma Média Móvel Computando uma Média Móvel Fazer cálculos entre observações em uma etapa DATA é muito mais difícil do que no processamento de observação. Por exemplo, para calcular a média de X1, X2 e X3, em uma única observação, você escreveria: MEANXMEAN (OF X1-X3) ou MEANX (X1X2X3) 3 No entanto, calculando a média de X para a presente observação e Duas observações anteriores apresentam mais de um desafio sem a função LAG, isto é. Economistas muitas vezes calcular um movimento averageto suavizar as tendências em seus dados. Por exemplo, índices de ações, como a Média Dow-Jones pode mudar consideravelmente de mês para mês. Para ver a tendência neste índice, os economistas traçam a média do índice nos últimos três meses para cada mês de interesse. Isso alisa os dados para que as tendências de longo prazo sejam mais aparentes. Neste exemplo, você usa a função LAG Para calcular uma média móvel. LAGn retorna o valor da enésima execução anterior da função LAG. Ou seja, toda vez que a função LAG executa, ela se lembra do valor atual do argumento, que será o valor defasado na próxima vez que a função for executada. Um exemplo tornará isso claro. Aqui está o código para calcular a média móvel que acabamos de descrever: A variável X1 é o valor de X da observação anterior X2 é o valor de X da observação anterior. A função MEAN é usada para calcular a média (média) da Três valores. Para a primeira iteração da etapa DATA, LAG (X) e LAG2 (X) estão ausentes, uma vez que não houve execução anterior da função LAG. Para a segunda iteração da etapa DATA, é atribuído a LAG (X) o valor de X para a observação 1, e LAG2 (X) está ausente. Finalmente, para a terceira até a última iteração do passo DATA, LAG (X) e LAG2 (X) são valores atribuídos. Neste exemplo, você não emite uma observação no novo conjunto de dados, a menos que AVE seja realmente baseado em três valores. A variável N é útil para testar essa condição. Você fornece uma observação para o terceiro através de Última iteração da etapa DATA apenas. Um cuidado especial ao usar a função LAG CUIDADO Não execute a função LAG condicionalmente a menos que você esteja fazendo propositadamente algo muito complicado e realmente saiba o que está fazendo. Para provar o nosso ponto, veja o seguinte código: Quais são os valores de Y Answer: missing, missing, missing, 8, missing.) A instrução IF instrui o sistema a executar a função LAG somente quando X for maior ou igual a 5.It é, portanto, primeiro executado quando a segunda observação (X8) é lida. A próxima vez que a função LAG executa (observação número 4, X9), o valor de LAG (X) é 8, o valor de X a última vez que o Função LAG executada. Você conseguiu esse ponto? Se não, não se preocupe. Isto não é coisa fácil. Neste post, eu mostro um truque para fazer cálculo de média móvel (pode ser estendido para outras operações que exigem funções de janelas) que é super rápido. Muitas vezes, os analistas SAS precisam realizar cálculos de média móvel e existem várias opções pela ordem de preferência: 1. PROC EXPAND 2. DADOS PASSO 3. PROC SQL Mas muitos sites podem não licenciados SASETS para usar PROC EXPAND e fazer média móvel em dados STEP requer alguma codificação e é propenso a erros. PROC SQL é uma escolha natural para programadores júnior e em muitos casos de negócios a única solução, mas o SAS SQL PROC 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 cara e não é uma solução viável para um conjunto de dados de tamanho médio. Neste post, eu mostro um truque para fazer cálculo de média móvel (pode ser estendido para outras operações que exigem funções de janelas) que é super rápido. Considere o cálculo da média móvel mais simples onde as observações K de arrasto estão incluídas no cálculo, a saber MA (K), aqui nós ajustamos K5. Primeiro, geramos um dado de 20 obs, onde a variável ID deve ser usada para o windowing ea variável X deve ser usada no cálculo do MA, e então aplicamos o CROSS JOIN padrão para examinar primeiro os dados resultantes, Non-Grouped, apenas Para entender como alavancar a estrutura de dados. A partir do conjunto de dados resultante, é difícil encontrar uma pista, agora vamos classificar por quotbidquot coluna neste conjunto de dados: A partir desta triada dados, é claro que nós realmente don39t tem CROSS JOIN todo o conjunto de dados originais, mas em vez disso, Podemos gerar um conjunto de dados de quotoperationquot que contém o valor de diferença e deixar o conjunto de dados original CROSS JOIN com este conjunto de dados de quotoperationquot muito menor e todos os dados que precisamos usar para o cálculo de MA estarão lá. Agora vamos fazer isso: CROSS JOIN dados originais com quotoperationquot dados, classificar por (a. idops), que é realmente quotbid39 no conjunto de dados classificados Note que no código acima, é necessário ter ax multiplicar por b. weight para que os dados Pode ser inter-leaved, caso contrário o mesmo valor X da tabela original será saída e MA cálculo será falha. A variável de peso explícito realmente acrescenta mais flexibilidade ao cálculo de MA inteiro. Ao configurá-lo para ser 1 para todos obs resultam em um simples cálculo de MA, atribuir pesos diferentes ajudará a resolver MA mais complexa computação, tais como dar outras observações menos peso para um MA decaído. Se for necessário um parâmetro K diferente nos cálculos de MA (K), somente o conjunto de dados de operação precisa ser atualizado, o que é um trabalho trivial. Agora, o modelo de código real para o cálculo MA (K) será: Com este novo método, é interessante compará-lo com o auto caro CROSS JOIN, bem como a PROC EXPAND. Na minha estação de trabalho (Intel i5 3.8Ghz, 32GB de memória, 1TB 72K HDD), auto CROSS JOIN é proibitivamente longo em tempo de execução (se os dados são grandes), enquanto o novo método usa apenas 2X tanto tempo como PROC EXPAND, ambos os consumos de tempo são Trivial comparando a auto CROSS JOIN. O consumo de tempo mostrado abaixo está em quotsecondquot. Abaixo está o código leitores podem executar e comparar-se. Publicado 10 de maio de 2017 por Liang Xie SAS Programação para Data Mining

Comments

Popular posts from this blog

Perfil do mercado da líbia forex

Pokemon trading card game online usernames e senhas

Abcd forex