Saturday 27 January 2018

Sas média móvel de 12 meses


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. 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 (). O código de 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 BY - grupo. 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 limitado à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 limitado à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, nas últimas N observações em um conjunto de dados ou nas últimas N observações dentro de um grupo BY. Este exemplo mostra como calcular as somas rolantes e as médias de rolamento definindo uma matriz Para manter os valores para o número mais recente de períodos desejados. Uma vez que a matriz contém os valores desejados, o cálculo da soma, usando a função SUM ea média, usando a função MEAN, é direto. Um pode simplesmente passar a matriz para qualquer função para obter a estatística desejada: Esta amostra enfatiza a lógica necessária para sempre ter os períodos mais recentes na matriz antes de calcular o próximo conjunto de estatísticas de rolamento. O conceito de remover o valor mais antigo e substituí-lo pelo valor mais recente é comumente referido como FIFO - First In, First Out. Uma vez que a matriz tenha sido preenchida com o número inicial de períodos, as estatísticas de rolamento são calculadas. Uma variável de contador é usada para acompanhar e especificar o elemento na matriz que contém o valor mais antigo e ao qual o novo valor mais recente deve ser atribuído. O novo valor sobrescreve o valor mais antigo. Depois de uma atribuição ser executada, novas estatísticas de rolamento são calculadas. Esse processo continua até que o último valor que contribui para as estatísticas tenha sido lido a partir da fonte de dados. Nota: Outras estatísticas de rolamento também podem ser calculadas. Tal como o desvio padrão: 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. Na primeira etapa de DADOS abaixo, os dados de vendas de amostra são criados por 36 meses. Na segunda etapa DATA, é criada uma matriz com o mesmo número de elementos que o número desejado de períodos a serem usados ​​no cálculo de uma soma e média de rolamento. Uma vez que a matriz inicialmente foi preenchida com o número desejado de períodos, o próximo período substitui o período mais antigo dentro da matriz. Nesta amostra, o número desejado de períodos é 12. Assim, após a soma de rolamento ea média serem calculadas nos primeiros 12 períodos, o 13º período substituirá o 1º período e uma nova soma de rolamento e a média serão calculadas. Então, o 14º período substituirá o 2º período, e uma nova soma de rolamento e média serão então calculadas, etc. 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 aptidão para um propósito particular. 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. Um array pode ser usado para armazenar o último N número de valores de modo que uma soma de rolamento e média pode ser calculada a partir dos valores dentro do array. sas, 12 month rolling sum ajuda por sasnewb raquo Fri, 24 Sep 2004 01:13:17 GMT Tenho um conjunto de dados construído como se segue: valor do mês 200106 13256 200107 4888 200108 67602 200109 529 200110 13743 200111 53340 200112 912 200201 1003 200202 7982 200203 9620 200204 2674 200205 18790 200206 1698 mais observações do valor do mês. Desejo criar uma variável que é a soma móvel de 12 meses para cada mês, por exemplo, mês mth12val 200106 194339 e assim por diante até o mês atual, 200409 para este mês, 200410 para outubro, etc Alguém pode oferecer uma solução para fazer isso. Chuck aka Sasnewb Seja pago. Com seu email livre em zwalletindex. htmlusersasnewb sas gtgt 12 meses que rolam a ajuda da soma por yhuang raquo Fri, 24 Sep 2004 01:34:36 GMT Thu, 23 Sep 2004 17:13:17 0000, Chuck Windsor lt XXXXXXXXX gt mês por exemplo outubro Etc Este tipo de soma de rolagem ou média móvel pode ser tratado facilmente pelo SQL. Assumindo que você não tem mês ausente, e os dados já estão ordenados por ano e mês, então o número de observação pode ser usado para identificar cada mês: dados xx entrada mês valor nn cartões 200106 13256 200107 4888 200108 67602 200109 529 200110 13743 200111 53340 200112 912 200201 1003 200202 7982 200203 9620 200204 2674 200205 18790 200206 1698 proc sql selecione distinto a., Sum (b. value) como rolando de xx a. Xx b onde um lt bn lt a. n12 grupo por um --------- mês valor n rolling ------------------------ -------------- 200106 13256 1 194339 200107 4888 2 182781 200108 67602 3 177893 200109 529 4 110291 200110 13743 5 109762 200111 53340 6 96019 200112 912 7 42679 200201 1003 8 41767 200202 7982 9 40764 200203 9620 10 32782 200204 2674 11 23162 200205 18790 12 20488 200206 1698 13 1698 Se os dados faltam meses, então precisamos usar algumas funções SAS para identificar a janela, o que também não é muito difícil. Sas gtgt 12 meses rolling sum ajuda por diskin raquo Fri, 24 Sep 2004 03:55:07 GMT Ya Ya Huang deu-lhe uma solução SQL puro. (Eu suponho que funciona). No caso como eu, você não é muito selvagem sobre o SQL: Supondo que não há pontos de dados ausentes e os dados estão ordenados triagem ordem decrescente, você pode usar a função de atraso para somar todos os 12 lags cada vez, ou reter a soma e adicionar O novo valor, subtraindo o 13º atraso. O primeiro é mais simples de escrever, mas eu temo, não muito eficiente, mas então você não tem muitos dados. Dados um ano de entrada 1-4 meses 5-6 v cartões 200106 13256 200107 4888 200108 67602 200109 529 200110 13743 200111 53340 200112 912 200201 1003 200202 7982 200203 9620 200204 2674 200205 18790 200206 1698 executar proc classificar dataa por descendente ano descendente mês executar dados B definir uma soma roll (v, lag1 (v), lag2 (v), lag3 (v), lag4 (v), lag5 (v), lag6 (v), lag7 (v), lag8 (V), lag10 (v), lag11 (v)) executar HTH, Dennis Diskin De: Chuck Windsor Enviado: 9232004 1:21:17 PM Para: XXXXXXXXX Assunto: 12 meses rolling sum ajuda Tenho um conjunto de dados construído da seguinte forma: Mês 200106 13256 200107 4888 200108 67602 200109 529 200110 13743 200111 53340 200112 912 200201 1003 200202 7982 200203 9620 200204 2674 200205 18790 200206 1698 mais observações do valor do mês. Desejo criar uma variável que é a soma móvel de 12 meses para cada mês, por exemplo, mês mth12val 200106 194339 e assim por diante até o mês atual, 200409 para este mês, 200410 para outubro, etc Alguém pode oferecer uma solução para fazer isso. Chuck aka Sasnewb

No comments:

Post a Comment