Thursday 30 November 2017

Moving average code sas


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 obteria 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 (). 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 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 SAS Institute não será responsável por quaisquer danos decorrentes da utilização destes materiais. 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 SAS Institute não será responsável por quaisquer danos decorrentes da utilização destes materiais. 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. Processos de erro de média móvel agressiva (erros ARMA) e outros modelos que envolvem Defasagens de termos de erro podem ser estimadas usando declarações FIT e simuladas ou previstas usando declarações SOLVE. Os modelos ARMA para o processo de erro são freqüentemente usados ​​para modelos com resíduos autocorrelacionados. A macro AR pode ser usada para especificar modelos com processos de erro autorregressivo. A macro MA pode ser usada para especificar modelos com processos de erro de média móvel. Erros Autoregressivos Um modelo com erros autoregressivos de primeira ordem, AR (1), tem a forma enquanto um processo de erro AR (2) tem a forma e assim por diante para processos de ordem superior. Observe que os s são independentes e identicamente distribuídos e têm um valor esperado de 0. Um exemplo de um modelo com um componente AR (2) é e assim por diante para processos de ordem superior. Por exemplo, você pode escrever um modelo de regressão linear simples com MA (2) erros de média móvel, onde MA1 e MA2 são os parâmetros de média móvel. Observe que RESID. Y é automaticamente definido pelo PROC MODEL como A função ZLAG deve ser usada para que os modelos MA trunquem a recursividade dos atrasos. Isso garante que os erros defasados ​​começam em zero na fase de antecipação e não propagam valores ausentes quando faltam as variáveis ​​de período de latência e garantem que os erros futuros sejam zero, em vez de faltarem durante a simulação ou a previsão. Para obter detalhes sobre as funções de atraso, consulte a seção Lag Logic. O modelo geral ARMA (p, q) tem a seguinte forma: Um modelo ARMA (p, q) pode ser especificado da seguinte forma: onde AR i e MA j representam Os parâmetros auto-regressivos e de média móvel para os vários desfasamentos. Você pode usar qualquer nome que desejar para essas variáveis, e há muitas maneiras equivalentes que a especificação poderia ser escrita. Os processos Vector ARMA também podem ser estimados com PROC MODEL. Por exemplo, um processo AR (1) de duas variáveis ​​para os erros das duas variáveis ​​endógenas Y1 e Y2 pode ser especificado da seguinte maneira: Problemas de Convergência com Modelos ARMA Os modelos ARMA podem ser difíceis de estimar. Se as estimativas dos parâmetros não estiverem dentro do intervalo apropriado, os termos residuais dos modelos de média móvel crescem exponencialmente. Os resíduos calculados para observações posteriores podem ser muito grandes ou podem transbordar. Isso pode acontecer porque os valores iniciais inadequados foram usados ​​ou porque as iterações se afastaram de valores razoáveis. Cuidado deve ser usado na escolha de valores iniciais para ARMA parâmetros. Os valores iniciais de 0,001 para os parâmetros ARMA normalmente funcionam se o modelo se encaixa bem nos dados e o problema está bem condicionado. Note-se que um modelo MA pode muitas vezes ser aproximado por um modelo de alta ordem AR, e vice-versa. Isso pode resultar em alta colinearidade em modelos ARMA mistos, o que por sua vez pode causar grave mal-condicionamento nos cálculos e instabilidade das estimativas dos parâmetros. Se você tiver problemas de convergência ao estimar um modelo com processos de erro ARMA, tente estimar em etapas. Primeiro, use uma instrução FIT para estimar apenas os parâmetros estruturais com os parâmetros ARMA mantidos a zero (ou a estimativas anteriores razoáveis, se disponível). Em seguida, use outra instrução FIT para estimar os parâmetros ARMA somente, usando os valores de parâmetro estrutural da primeira execução. Uma vez que os valores dos parâmetros estruturais são susceptíveis de estar perto de suas estimativas finais, as estimativas ARMA parâmetro agora pode convergir. Finalmente, use outra instrução FIT para produzir estimativas simultâneas de todos os parâmetros. Uma vez que os valores iniciais dos parâmetros são agora provavelmente muito próximos de suas estimativas conjuntas finais, as estimativas devem convergir rapidamente se o modelo for apropriado para os dados. AR Condições iniciais Os retornos iniciais dos termos de erro dos modelos AR (p) podem ser modelados de diferentes maneiras. Os métodos de inicialização de erros autorregressivos suportados pelos procedimentos SAS / ETS são os seguintes: mínimos quadrados condicionais (procedimentos ARMA e MODELO) mínimos máximos incondicionais (procedimentos AUTOREG, ARIMA e MODELO) Yule-Walker (Procedimento AUTOREG somente) Hildreth-Lu, que exclui as primeiras p observações (procedimento MODEL somente) Consulte o Capítulo 8, O Procedimento AUTOREG, para uma explicação e discussão dos méritos de vários métodos de inicialização AR (p). As inicializações de CLS, ULS, ML e HL podem ser realizadas pelo PROC MODEL. Para erros de AR (1), estas inicializações podem ser produzidas como mostrado na Tabela 18.2. Estes métodos são equivalentes em amostras grandes. Tabela 18.2 Inicializações Executadas por PROC MODEL: AR (1) ERROS Os retornos iniciais dos termos de erro dos modelos MA (q) também podem ser modelados de diferentes maneiras. Os seguintes paradigmas de inicialização de erros de média móvel são suportados pelos procedimentos ARIMA e MODELO: mínimos quadrados condicionais mínimos incondicionais O método de mínimos quadrados condicionais de estimativa de termos de erros de média móvel não é ótimo porque ignora o problema de inicialização. Isso reduz a eficiência das estimativas, embora permaneçam imparciais. Os resíduos atrasados ​​iniciais, que se estendem antes do início dos dados, são assumidos como 0, o seu valor esperado incondicional. Isso introduz uma diferença entre esses resíduos e os resíduos de mínimos quadrados generalizados para a covariância da média móvel, que, ao contrário do modelo autorregressivo, persiste através do conjunto de dados. Normalmente, esta diferença converge rapidamente para 0, mas para processos de média móvel quase não-reversíveis a convergência é bastante lenta. Para minimizar esse problema, você deve ter abundância de dados, e as estimativas de parâmetros de média móvel devem estar bem dentro da faixa de inversão. Este problema pode ser corrigido à custa de escrever um programa mais complexo. As estimativas de mínimos quadrados incondicionais para o processo MA (1) podem ser produzidas especificando o modelo da seguinte maneira: Erros de média móvel podem ser difíceis de estimar. Você deve considerar usar uma aproximação AR (p) para o processo de média móvel. Um processo de média móvel geralmente pode ser bem aproximado por um processo autorregressivo se os dados não tiverem sido suavizados ou diferenciados. A macro AR A macro SAS gera instruções de programação para MODELO PROC para modelos autorregressivos. A macro AR é parte do software SAS / ETS, e nenhuma opção especial precisa ser definida para usar a macro. O processo autorregressivo pode ser aplicado aos erros de equações estruturais ou às próprias séries endógenas. A macro AR pode ser usada para os seguintes tipos de auto-regressão: auto-regressão vetorial irrestrita auto-regressão vetorial restrita Autoregressão Univariada Para modelar o termo de erro de uma equação como um processo autorregressivo, use a seguinte instrução após a equação: Por exemplo, suponha que Y seja a Linear de X1, X2 e um erro de AR (2). Você escreveria este modelo da seguinte maneira: As chamadas para AR devem vir depois de todas as equações às quais o processo se aplica. A invocação de macro precedente, AR (y, 2), produz as instruções mostradas na saída LIST na Figura 18.58. Figura 18.58 Saída de opção LIST para um modelo AR (2) As variáveis ​​prefixadas PRED são variáveis ​​de programa temporárias usadas para que os atrasos dos resíduos sejam os resíduos corretos e não os redefinidos por esta equação. Observe que isso é equivalente às instruções explicitamente escritas na seção Formulário Geral para Modelos ARMA. Você também pode restringir os parâmetros autorregressivos a zero em defasagens selecionadas. Por exemplo, se você quisesse parâmetros autorregressivos nos retornos 1, 12 e 13, você pode usar as seguintes instruções: Estas instruções geram a saída mostrada na Figura 18.59. Figura 18.59 Saída de Opção LIST para um Modelo AR com Lags em 1, 12 e 13 O MODELO Procedimento Lista de Código de Programa Compilado como Parsed PRED. yab x1 c x2 RESID. y PRED. y - ACTUAL. y ERROR. y PRED. Y - y OLDPRED. y PRED. y yl1 ZLAG1 (y - perdy) il12 ZLAG12 (y - perdy) il13 ZLAG13 (y - perdy) RESID. y PRED. y - ACTUAL. y PRED. y - y Existem Variações no método dos mínimos quadrados condicionais, dependendo se as observações no início da série são usadas para aquecer o processo AR. Por padrão, o método de mínimos quadrados condicionais AR usa todas as observações e assume zeros para os retornos iniciais de termos autorregressivos. Usando a opção M, você pode solicitar que AR use o método de mínimos quadrados incondicionais (ULS) ou de máxima verossimilhança (ML). Por exemplo, as discussões sobre esses métodos são fornecidas na seção AR Condições iniciais. Usando a opção MCLS n, você pode solicitar que as primeiras n observações sejam usadas para calcular estimativas dos atrasos autorregressivos iniciais. Neste caso, a análise começa com a observação n 1. Por exemplo: Você pode usar a macro AR para aplicar um modelo autorregressivo à variável endógena, em vez de ao termo de erro, usando a opção TYPEV. Por exemplo, se você quiser adicionar os cinco atrasos anteriores de Y à equação no exemplo anterior, você pode usar AR para gerar os parâmetros e os retornos usando as seguintes instruções: As instruções anteriores geram a saída mostrada na Figura 18.60. Figura 18.60 Saída de opção LIST para um modelo AR de Y Este modelo prediz Y como uma combinação linear de X1, X2, uma interceptação e os valores de Y nos cinco períodos mais recentes. Auto-regressão vetorial irrestrita Para modelar os termos de erro de um conjunto de equações como um processo autorregressivo de vetor, use a seguinte forma da macro AR após as equações: O valor processname é qualquer nome que você fornecer para AR usar para fazer nomes para o autorregressivo Parâmetros. Você pode usar a macro AR para modelar vários processos AR diferentes para diferentes conjuntos de equações usando diferentes nomes de processo para cada conjunto. O nome do processo garante que os nomes de variáveis ​​usados ​​são exclusivos. Use um valor de processname curto para o processo se as estimativas de parâmetros forem gravadas em um conjunto de dados de saída. A macro AR tenta construir nomes de parâmetro menor ou igual a oito caracteres, mas isso é limitado pelo comprimento de processname. Que é usado como um prefixo para os nomes de parâmetro AR. O valor da lista de variáveis ​​é a lista de variáveis ​​endógenas para as equações. Por exemplo, suponha que erros para as equações Y1, Y2 e Y3 sejam gerados por um processo autorregressivo de vetor de segunda ordem. Você pode usar as seguintes instruções: que geram o seguinte para Y1 e código semelhante para Y2 e Y3: Somente o método de mínimos quadrados condicional (MCLS ou MCLS n) pode ser usado para processos vetoriais. Você também pode usar o mesmo formulário com restrições de que a matriz de coeficientes seja 0 em intervalos selecionados. Por exemplo, as seguintes afirmações aplicam um processo vetorial de terceira ordem aos erros de equação com todos os coeficientes com atraso 2 restrito a 0 e com os coeficientes nos retornos 1 e 3 sem restrições: Você pode modelar as três séries Y1Y3 como um processo autorregressivo de vetor Nas variáveis ​​em vez de nos erros usando a opção TYPEV. Se você quiser modelar Y1Y3 como uma função de valores passados ​​de Y1Y3 e algumas variáveis ​​exógenas ou constantes, você pode usar AR para gerar as declarações para os termos de atraso. Escreva uma equação para cada variável para a parte não autorregressiva do modelo e, em seguida, chame AR com a opção TYPEV. Por exemplo, a parte não autorregressiva do modelo pode ser uma função de variáveis ​​exógenas, ou pode ser parâmetros de interceptação. Se não houver componentes exógenos para o modelo de auto-regressão do vetor, incluindo sem interceptações, então atribua zero a cada uma das variáveis. Deve haver uma atribuição para cada uma das variáveis ​​antes de AR é chamado. Este exemplo modela o vetor Y (Y1 Y2 Y3) como uma função linear apenas do seu valor nos dois períodos anteriores e um vetor de erro de ruído branco. O modelo tem 18 (3 3 3 3) parâmetros. Sintaxe da Macro AR Existem dois casos da sintaxe da macro AR. Quando as restrições em um processo AR vetorial não são necessárias, a sintaxe da macro AR tem a forma geral especifica um prefixo para AR a ser usado na construção de nomes de variáveis ​​necessários para definir o processo AR. Se o endolist não é especificado, a lista endógena padrão é nome. Que deve ser o nome da equação à qual o processo de erro AR deve ser aplicado. O valor de nome não pode exceder 32 caracteres. É a ordem do processo AR. Especifica a lista de equações às quais o processo AR deve ser aplicado. Se for dado mais de um nome, é criado um processo vetorial sem restrições com os resíduos estruturais de todas as equações incluídas como regressores em cada uma das equações. Se não for especificado, o endolist predefinirá o nome. Especifica a lista de defasagens em que os termos AR devem ser adicionados. Os coeficientes dos termos em intervalos não listados são definidos como 0. Todos os atrasos listados devem ser menores ou iguais a nlag. E não deve haver duplicatas. Se não for especificado, o laglist padrão para todos os atrasos 1 através de nag. Especifica o método de estimação a ser implementado. Valores válidos de M são CLS (estimativas de mínimos quadrados condicionais), ULS (estimativas de mínimos quadrados incondicionais) e ML (estimativas de máxima verossimilhança). MCLS é o padrão. Somente o MCLS é permitido quando mais de uma equação é especificada. Os métodos ULS e ML não são suportados para modelos AR de AR por AR. Especifica que o processo AR deve ser aplicado às próprias variáveis ​​endógenas em vez de aos resíduos estruturais das equações. Auto-regressão vetorial restrito Você pode controlar quais parâmetros são incluídos no processo, restringindo a 0 aqueles parâmetros que você não inclui. Primeiro, use AR com a opção DEFER para declarar a lista de variáveis ​​e definir a dimensão do processo. Em seguida, use chamadas AR adicionais para gerar termos para equações selecionadas com variáveis ​​selecionadas em intervalos selecionados. Por exemplo, as equações de erro produzidas são as seguintes: Este modelo estabelece que os erros para Y1 dependem dos erros de Y1 e Y2 (mas não Y3) nos dois intervalos 1 e 2 e que os erros para Y2 e Y3 dependem de Os erros anteriores para todas as três variáveis, mas apenas com atraso 1. AR Macro Sintaxe para AR Restrito AR Um uso alternativo de AR é permitido para impor restrições em um processo AR vetorial chamando AR várias vezes para especificar diferentes AR termos e defasagens para diferentes Equações. A primeira chamada tem a forma geral especifica um prefixo para AR para usar na construção de nomes de variáveis ​​necessárias para definir o vetor AR processo. Especifica a ordem do processo AR. Especifica a lista de equações às quais o processo AR deve ser aplicado. Especifica que AR não é para gerar o processo AR mas é esperar por mais informações especificadas em chamadas AR mais tarde para o mesmo valor de nome. As chamadas subsequentes têm a forma geral é o mesmo que na primeira chamada. Especifica a lista de equações às quais as especificações nesta chamada AR devem ser aplicadas. Somente os nomes especificados no valor endolist da primeira chamada para o valor de nome podem aparecer na lista de equações na lista de eqlist. Especifica a lista de equações cujos resíduos estruturais retardados devem ser incluídos como regressores nas equações da lista de equações. Somente nomes no endolist da primeira chamada para o valor de nome podem aparecer em varlist. Se não for especificado, varlist padrão para endolist. Especifica a lista de defasagens em que os termos AR devem ser adicionados. Os coeficientes dos termos em intervalos não listados são definidos como 0. Todos os atrasos listados devem ser menores ou iguais ao valor de nlag. E não deve haver duplicatas. Se não for especificado, o laglist irá usar todos os intervalos 1 a nlag. A macro MA A macro SAS MA gera instruções de programação para MODELO PROC para modelos de média móvel. A macro MA faz parte do software SAS / ETS e não são necessárias opções especiais para utilizar a macro. O processo de erro de média móvel pode ser aplicado aos erros da equação estrutural. A sintaxe da macro MA é o mesmo que a macro AR, exceto que não há argumento TYPE. Quando você estiver usando as macros MA e AR combinadas, a macro MA deve seguir a macro AR. As seguintes instruções SAS / IML produzem um processo de erro ARMA (1, (1 3)) e salvam-no no conjunto de dados MADAT2. As seguintes instruções PROC MODEL são usadas para estimar os parâmetros deste modelo usando a estrutura de erro de máxima verossimilhança: As estimativas dos parâmetros produzidos por esta execução são mostradas na Figura 18.61. Figura 18.61 Estimativas de um processo ARMA (1, (1 3)) Existem dois casos da sintaxe para a macro MA. Quando as restrições em um processo MA de vetor não são necessárias, a sintaxe da macro MA tem a forma geral especifica um prefixo para MA usar na construção de nomes de variáveis ​​necessárias para definir o processo MA e é o endolist padrão. É a ordem do processo MA. Especifica as equações às quais o processo MA deve ser aplicado. Se for dado mais de um nome, a estimativa de CLS é usada para o processo de vetor. Especifica os atrasos em que os termos MA devem ser adicionados. Todos os atrasos listados devem ser menores ou iguais a nlag. E não deve haver duplicatas. Se não for especificado, o laglist padrão para todos os atrasos 1 através de nag. Especifica o método de estimação a ser implementado. Valores válidos de M são CLS (estimativas de mínimos quadrados condicionais), ULS (estimativas de mínimos quadrados incondicionais) e ML (estimativas de máxima verossimilhança). MCLS é o padrão. Somente o MCLS é permitido quando mais de uma equação é especificada no endolist. MA Sintaxe de Macro para Movimentação-Média de Vetores Restrita Um uso alternativo de MA é permitido para impor restrições em um processo de MA de vetor chamando MA várias vezes para especificar diferentes termos de MA e defasagens para equações diferentes. A primeira chamada tem a forma geral especifica um prefixo para MA para usar na construção de nomes de variáveis ​​necessárias para definir o vetor MA processo. Especifica a ordem do processo MA. Especifica a lista de equações às quais o processo MA deve ser aplicado. Especifica que MA não é para gerar o processo de MA mas é aguardar informações adicionais especificadas em chamadas de MA posterior para o mesmo valor de nome. As chamadas subsequentes têm a forma geral é o mesmo que na primeira chamada. Especifica a lista de equações às quais as especificações nesta chamada MA devem ser aplicadas. Especifica a lista de equações cujos resíduos estruturais retardados devem ser incluídos como regressores nas equações da lista de equações. Especifica a lista de defasagens em que os termos MA devem ser adicionados. Médias / média móvel simples Médias / média móvel simples Você é encorajado a resolver esta tarefa de acordo com a descrição da tarefa, usando qualquer linguagem que você conheça. Calculando a média móvel simples de uma série de números. Criar uma função stateful / classe / instância que leva um período e retorna uma rotina que leva um número como argumento e retorna uma média móvel simples de seus argumentos até agora. Uma m�ia m�el simples �um m�odo para calcular uma m�ia de um fluxo de n�eros calculando apenas a m�ia dos �timos n�eros de 160 P 160 a partir do fluxo 160, em que 160 P 160 �conhecido como o per�do. Ele pode ser implementado chamando uma rotina de iniciação com 160 P 160 como argumento, 160 I (P), 160 que deve retornar uma rotina que, quando chamada com membros individuais, sucessivos de um fluxo de números, calcula a média de Para), os últimos 160 P 160 deles, vamos chamar este 160 SMA (). A palavra 160 estado 160 na descrição da tarefa refere-se à necessidade de 160 SMA () 160 lembrar determinadas informações entre as chamadas para ele: 160 O período, 160 P 160 Um recipiente ordenado de pelo menos os últimos 160 P 160 números de cada um dos Suas chamadas individuais. Stateful 160 também significa que chamadas sucessivas para 160 I (), 160 o inicializador, 160 devem retornar rotinas separadas que não 160 não compartilham o estado salvo para que possam ser usadas em dois fluxos de dados independentes. Pseudo-código para uma implementação de 160 SMA 160 é: Esta versão usa uma fila persistente para conter os valores p mais recentes. Cada função retornada de init-moving-average tem seu estado em um átomo contendo um valor de fila. Esta implementação usa uma lista circular para armazenar os números dentro da janela no início de cada ponteiro de iteração refere-se à célula de lista que mantém o valor apenas movendo para fora da janela e para ser substituído com o valor apenas adicionado. Usando um fechamento editar Atualmente este sma não pode ser nogc porque ele aloca um encerramento no heap. Alguma análise de escape pode remover a alocação de heap. Usando uma edição de estrutura Esta versão evita a alocação de heap do fechamento mantendo os dados no quadro de pilha da função principal. Mesmo resultado: Para evitar que as aproximações de ponto flutuante sigam se acumulando e crescendo, o código poderia executar uma soma periódica em toda a matriz de filas circulares. Esta implementação produz dois estados de compartilhamento de objetos (função). É idiomático em E separar a entrada da saída (ler a partir da escrita) em vez de combiná-los em um objeto. A estrutura é a mesma que a implementação do Desvio PadrãoE. O programa elixir abaixo gera uma função anônima com um período embutido p, que é usado como o período da média móvel simples. A função de execução lê entrada numérica e passa para a função anônima recém-criada e, em seguida, inspeciona o resultado para STDOUT. A saída é mostrada abaixo, com a média, seguida pela entrada agrupada, formando a base de cada média móvel. Erlang tem fechamentos, mas variáveis ​​imutáveis. Uma solução então é usar processos e uma simples mensagem passando API baseada. As linguagens de matriz têm rotinas para calcular os avarages deslizando para uma determinada seqüência de itens. É menos eficiente para loop como nos comandos a seguir. Solicita continuamente uma entrada I. Que é adicionado ao final de uma lista L1. L1 pode ser encontrado pressionando 2ND / 1, e a média pode ser encontrada em List / OPS Pressione ON para terminar o programa. Função que retorna uma lista contendo os dados médios do argumento fornecido Programa que retorna um valor simples em cada invocação: list é a média da lista: p é o período: 5 retorna a lista média: Exemplo 2: Usando o programa movinav2 (i , 5) - Inicializando o cálculo da média móvel e definindo o período de 5 movinav2 (3, x): x - novos dados na lista (valor 3), e o resultado será armazenado na variável x e exibido movinav2 (4, x) : X - novos dados (valor 4), eo novo resultado será armazenado na variável x, e exibido (43) / 2. Descrição da função movinavg: variável r - é o resultado (a lista média) que será retornada variável i - é a variável de índice, e aponta para o fim da sub-lista a lista sendo calculada a média. Variável z - uma variável auxiliar A função usa a variável i para determinar quais valores da lista serão considerados no cálculo da média seguinte. Em cada iteração, a variável i aponta para o último valor na lista que será utilizado no cálculo médio. Portanto, só precisamos descobrir qual será o primeiro valor na lista. Geralmente bem tem que considerar p elementos, então o primeiro elemento será o indexado por (i-p1). No entanto, nas primeiras iterações, esse cálculo será normalmente negativo, de modo que a seguinte equação evitará índices negativos: max (i-p1,1) ou, arranjar a equação, max (i-p, 0) 1. Mas o número de elementos nas primeiras iterações também será menor, o valor correto será (índice final - índice de início 1) ou, arranjar a equação, (i - (max (ip, 0) 1) e então , (I-max (ip, 0)). A variável z detém o valor comum (max (ip), 0) então o beginindex será (z1) e os numberofelements serão (iz) mid (list, z1, iz) retornará a lista de valor que será a soma média .) Irá somá-los soma (.) / (Iz) ri irá média deles e armazenar o resultado no lugar apropriado na lista de resultados Usando um encerramento e criando uma função Eu sou um pouco novo em usar e escrever código SAS, e estou tentando Criar um cálculo da média móvel. Ive encontrado exemplos e com base no que eu li e tentei, eu não consigo obter os meus dados para produzir os resultados desejados. Aqui está um exemplo dos meus dados. Ano Mês Vendas Executando Soma 2017 Jan 100 100 2017 Feb 250 350 2017 Março 200 550 2017 Jan 175 175 2017 Feb 300 475 2017 março 225 700 2017 janeiro 150 150 2017 fevereiro 275 425 2017 março 250 675 Eu tenho ano, mês, vendas e Uma soma corrente das vendas mensais para cada ano. Gostaria de ser capaz de comparar a soma corrente de vendas através do mês atual e compará-lo com a média dos últimos anos até o mesmo mês. Eu tentei usar PROC EXPAND, e que parece funcionar, mas apenas quando o meu dataset tem Ano e Vendas. Obrigado pela ajuda. É muito apreciado. 2017 Jan 100 100. 2017 fev 250 350. 2017 Março 200 550. 2017 Jan. 175 175 100 2017 Fev 300 475 350 2017 março 225 700 550 2017 janeiro 150 150 138 ((175100) / 2) 2017 fev 275 425 413 ((475350) / 2) 2017 março 250 675 625 ((700550) / 2 ) A coluna Média calcula a Soma Corrente ao longo de cada mês e divide esse valor pelo número de períodos anteriores. Veja os cálculos entre parênteses. Im realmente tentando calcular uma média de quatro anos, mas eu sei que não incluíram dados suficientes na minha amostra para calcular os quatro anos completos. Eu sou capaz de usar PROC EXPAND para calcular uma média móvel, mas eu só obter o código para trabalhar quando eu tinha o ano e vendas (no total cumulativo) colunas no meu conjunto de dados. As vendas foram para o ano inteiro, não quebrado por mês. Para 2017, as vendas foram 550. Para 2017, as vendas foram 700. Então, como faço para calcular a média móvel com mais de duas colunas na minha tabela Espero que esta explicação ajuda a responder às suas perguntas. Obrigado novamente. Uma solução (entre outros) usando DATA STEP simples. Eu adicionei anos 2017 e 2017 para ver se eu entendi a pergunta. Dados dados input ano mês vendas cartões 2017 Jan 100 2017 Feb 250 2017 Mar 200 2017 Jan 175 2017 Feb 300 2017 Mar 225 2017 Jan 150 2017 Feb 275 2017 Mar 250 2017 Jan 125 2017 Feb 200 2017 Mar 175 2017 Jan 105 2017 Feb 210 2017 Mar 275 dados twant (keepyear mês vendas Rsum Ravg) conjunto thave comprimento Rsum Ravg 8. reter Rsum Ravg Ssum Si Crow array zMth (3) por ano se first. year então fazer Crow0 Si1 Rsum0 fim Crow1 RsumSales if (Si gt 1) then Ravg redondo (zMth (Corvo) / (Si-1), 0,01) mais Ravg. ZMth (Corvo) Rsum proc print datatwant executar 1 2017 Jan 100 100. 2 2017 Feb 250 350. 3 2017 Mar 200 550. 4 2017 Jan 175 175 100,00 5 2017 Feb 300 475 350,00 6 2017 Mar 225 700 550,00 7 2017 Jan 150 150 137,50 8 2017 Feb 275 425 412,50 9 2017 Mar 250 675 625,00 10 2017 Jan 125 125 141,67 (100175150) / 3 11 2017 Fev 200 325 416,67 (350475425) / 3 12 2017 Mar 175 500 641,67 (550700675) / 3 13 2017 Jan 105 105 137,50 (100175150125) / 4 14 2017 Feb 210 315 393,75 (350475425325) / 4 15 2017 Mar 275 590 606,25 (550700675500) / 4

No comments:

Post a Comment