Tuesday, 4 July 2017

Matriz Média Móvel 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, isto é 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 é esse o caso, eu preciso de algum tipo de média móvel que me permita calcular o valor médio e padrão nos últimos 5 anos. Então, se uma empresa tem informações por 7 anos, preciso de algum tipo de código que avaliará o avg e stdev, 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 modo) 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. Seu interior Pois está iterando toda a matriz, então é por isso que você sempre obtém a mesma média (uma para toda a matriz), você deve iterar de 0 para o número atual do exterior para em vez disso. Sua média móvel está sendo atualizada com base em j do seu interior, o que significa que irá anular os valores anteriores de cada novo loop, isso deve estar dentro do exterior para, em vez do interno, usando i como índice. Você está dividindo sumj para calcular médias, cada novo loop interno j você irá dividir por 0 a primeira soma. Eu acredito que você quisesse usar o j1 em vez disso, o índice não é o mesmo que o comprimento atual Dicas para solucionar problemas: Evite usar variáveis ​​para arrays de loop, você deve usar array. length em vez disso. Para uma questão de reproduzir o seu problema, você poderia nos dar o problema isolado em vez do seu código atual. Ou seja: Imagine se o erro está em suas entradas, como podemos acreditar que você realmente as usou, respondidas em 4 de outubro 13 às 20:54 Você está fazendo o loop de todos os dados sempre. Você deve ter para (int j (igtaverageLengthi-averageLength2: 0) jlt iaverageLength2 ampamp jltnumDataPoints j) (ou algo semelhante) para a sua média mais interna. Além disso, moveAverageisumj deve ser modificado para lidar com o caso quando j é 0. Em particular, provavelmente deve ser movingAverageisumaverageLength e deve ser aplicado ao slot movingAveragei fora do loop de média. Respondeu 4 de outubro 13 às 20:42 Na próxima vez, leve os comentários sobre a cessão da questão antes de publicá-la. Mas como você parece muito novo nisso, pense em como você passaria pelos dados, e faria isso. Você deve tentar certificar-se de que cada loop está parando no ponto correto e lembre-se de que se você parar quando não há mais números (como quando você está fazendo o loop interno e você só pode obter mais 3 números em vez de 4) O programa também precisa parar. Verifique se o seu código está a verificar isso. Respondeu 4 de outubro às 20:56 Sem detalhes adicionais, você provavelmente precisa de uma média móvel não ponderada. Em qualquer ponto Ai na matriz de entrada A de comprimento N (com 0ltiltN), isso é simplesmente a média das entradas K anteriores da matriz, até e incluindo Ai. Se não houver valores desse tipo, então, mude os valores (i1) de A0 para Ai. Inclusive. Um pouco de pensamento irá mostrar que você não precisa adicionar todos os valores K sempre. Basta manter a soma e, ao passar para o próximo ponto (esta é uma média móvel), subtrai o valor que está sendo substituído e adiciona o novo valor que irá substituí-lo. (Durante os primeiros pontos K-1, você simplesmente adicionará o novo valor à soma e aumentará seu contador em 1.) Em qualquer ponto desse processo, a média móvel é a soma atual dividida pelo valor atual da contagem. Respondeu 4 de outubro às 21:05 Em uma média móvel, você precisa ter algum tipo de tamanho de janela. O tamanho da sua janela é o comprimento médio, por isso parecerá algo assim: o loop for começa nos dados atuais e volta os pontos de dados da média e adiciona-os. Você só terá uma média móvel quando você tiver quando tiver pontos de dados suficientes e a média será a soma dividida pelo comprimento médio. Nota: Não testado apenas o código sudo, mas essa é a idéia. Respondeu 4 de outubro 13 às 21:05 Sua resposta 2017 Stack Exchange, Inc O código de exemplo na guia Código completo mostra 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 sobre As últimas N observações dentro de um grupo BY. Esses exemplos de arquivos e exemplos de código são fornecidos pelo SAS Institute Inc., tal como está sem garantia de qualquer tipo, expressa ou implícita, incluindo, entre outras, as garantias implícitas de comercialização e adequação para um propósito específico. Os destinatários reconhecem e concordam que o SAS Institute não será responsável por quaisquer danos decorrentes do uso deste material. Além disso, o SAS Institute não fornecerá suporte para os materiais aqui contidos. Esses exemplos de arquivos e exemplos de código são fornecidos pelo SAS Institute Inc., tal como está sem garantia de qualquer tipo, expressa ou implícita, incluindo, entre outras, as garantias implícitas de comercialização e adequação para um propósito específico. Os destinatários reconhecem e concordam que o SAS Institute não será responsável por quaisquer danos decorrentes do uso 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.

No comments:

Post a Comment