Monday 27 November 2017

Substitua As Variáveis Que Faltam No Stata Forex


Estou tentando escrever um loop foreach em Stata que substitui automaticamente todos os n. a. Valores que eu tenho no meu banco de dados com valores em falta (.a). Eu tenho o seguinte código: eu defini minha varlist com todas as variáveis ​​no meu conjunto de dados, mas eu recebo um erro de incompatibilidade de tipo. Eu tentei o comando substituir com apenas uma variável e percebo que o erro está relacionado a variáveis ​​numéricas. Alguma idéia de como posso fazer isso funcionar com todas as variáveis ​​Ou preciso selecionar apenas variáveis ​​de string solicitadas em Nov 6 14 às 22:35 O código realmente só se aplica às variáveis ​​de string. Considere a linha O erro de incompatibilidade de tipo é retornado sob duas condições nesta linha: de tentar atribuir a seqüência de caracteres. a (que é diferente do valor ausente. a) para uma variável numérica e tentando examinar se uma variável numérica equivale a Corda na . O código a seguir evita o problema escolhendo apenas variáveis ​​de string (Obrigado a Nick Cox por sugestões para simplificar). Este aviso útil é de Nick Cox: Além disso, fique atento ao usar sinais de igual para atribuir uma string a uma macro local. Em muitas versões do Stata, a string seria truncada devido a um limite no comprimento das expressões de string. Adicionado depois de ler Robertos resposta Robertos exemplos são realmente úteis. Particularmente, não pensei na questão da n. a. Como rótulos de valor. Eu me expandi em um exemplo e para um código que substitui valores rotulados como n. a. Com o valor ausente. a. Considere alguns exemplos. A variável é numérica, mas tem rótulos anexados. Observações com um rótulo de n. a. Foram substituídos por missings. A variável é tipo de string. As cordas foram substituídas por outras cordas. Não são realmente falhas, tanto quanto a Stata. É apenas um texto sem significado especial. O seguinte não funciona e talvez seja seu caso. Você tem uma variável numérica (novamente com rótulos) e você está pedindo a Stata para verificar se há caracteres de cadeia. Assim, existe uma incompatibilidade de tipo. Como está, seu código está abordando as variáveis ​​como se fossem tipo de string (por causa das cotações usadas no loop). Se você quiser usar os valores ausentes estendidos (.a), a variável deve ser numérica. As missões do sistema e as missões prolongadas só se aplicam a eles. A única falta para tipos de string é um espaço em branco (). Parece que você tem variáveis ​​numéricas devido ao erro que você denuncia. Se suas variáveis ​​fossem todas tipo de string, então você não obteria um erro de incompatibilidade de tipo. No entanto, você menciona alguns n. a .. que eu considero serem rótulos de valor. Subjacente ao rótulo do valor, é algum valor numérico. Você pode ver a lista de execução, nolabel. Se for esse o caso, você pode substituir os valores numéricos correspondentes a rótulos de valores iguais a n. a., com algo como: Observe que para variável x. O rótulo de valor n. a. É mapeado para o valor 3, enquanto que para a variável y. É mapeado para o valor 4. Assim, para uma variável que deseja substituir valores de 3, e para o outro, valores de 4. O código irá cuidar disso automaticamente. Além disso, a Stata agora reconhece os valores substituídos como falhas. Veja os rótulos de ajuda. Help missing and stackoverflowa259425202077064. O que explica mais sobre como a condição dentro da substituição está funcionando. Se você precisa selecionar um tipo específico de variáveis, o Aspen Chen já mencionou ds. Outras opções podem ser encontradas no The Stata Journal (2010) 10, Número 2, pp. 281296, Speaking Stata: Encontrar variáveis. Por Nick Cox. (Livre disponível na web.) Você é bem-vindo. Eu ainda acho que seu problema não é com o loop foreach, mas com os conceitos de rótulos, falhas e tipos variáveis ​​em Stata. Se você tem variáveis ​​de string às quais você atribui quot. aquot para denotar missings, essa é sua escolha e pode ser processada em última instância. Mas eu só quero enfatizar que Stata não reconhece que, como ausente e, portanto, não parece ser o caminho natural. Para ser sincero, eu ainda não tenho certeza do seu problema e minha resposta é baseada em um palpite. Não sei, no entanto, se esse palpite estiver correto. Seria útil para futuros leitores deixar isso claro. Ndash Roberto Ferrer 7 de novembro 14 às 15:50 Eu tenho um banco de dados com quotn. a.quot: não disponível não é aplicável. Eu usei o loop foreach para substituí-los e criar diferentes códigos ausentes. Quot. aquot, quot. bbot. Depois, usei destring. Eu resolvo o meu problema, a esperança está clara agora. Mas eu não quero incomodá-lo com os detalhes do meu banco de dados, apenas obtenha a idéia básica, que você explica muito bem e trabalhe a partir daí. Então, foi muito útil, obrigado novamente. A esperança é clara agora. Ndash Emanuel Nov 7 14 em 16: 20Stata: Análise de dados e software estatístico Nicholas J. Cox, Universidade de Durham, Reino Unido 1. Os problemas Os usuários geralmente querem substituir os valores perdidos por valores vizinhos não transmissíveis, particularmente quando as observações ocorrem em alguma ordem definida, muitas vezes (Mas nem sempre) uma ordem do tempo. Normalmente, isso ocorre quando os valores de alguma variável devem ser idênticos em blocos de observações, mas, por algum motivo, os valores são explicitamente irrelevantes dentro do conjunto de dados apenas para certas observações, na maioria das vezes o primeiro. Portanto, há um desejo de copiar valores dentro de blocos de observações. Alternativamente, os usuários geralmente querem substituir valores em falta em uma seqüência, geralmente em uma seqüência de tempo. Esses problemas podem ser resolvidos com métodos semelhantes. Uma situação diferente, não abordada diretamente nesta FAQ, é quando os valores de alguma variável variável no tempo são conhecidos apenas para certas observações. Existe então uma necessidade de imputação ou interpolação entre valores conhecidos. Copiar o último valor para a frente é improvável que seja um bom método de interpolação, a menos que, como acabamos de dizer, é sabido que os valores permaneceram constantes em um nível declarado até o próximo nível indicado. De qualquer forma, os usuários que aplicam os métodos descritos aqui para imputação ou interpolação assumem a responsabilidade pelo que fazem. 2. Sem tsset: copiando valores de não-permissão Vamos primeiro olhar para o caso em que você não apresentou seus dados (veja, por exemplo, TS tsset para uma explicação), mas assumiremos que os dados foram colocados na ordem de classificação correta , Digamos, digitando Se os valores em falta ocorreram individualmente, eles poderiam ser substituídos pelo valor anterior ou pelo seguinte valor. Aqui, a notação de subscrito usada é que n se refere sempre a qualquer observação dada, nminus1 à observação anterior e n1 à seguinte Observação, dada a ordem de classificação atual. Não há, é claro, qualquer observação antes da primeira, ou após a última, então myvar0 sempre está faltando, assim como myvar para qualquer número de observação que seja negativo ou maior do que o número de observações nos dados. Consulte U 13.7 Subscritos explícitos para obter mais informações sobre subscritos. Faltando (myvar) apanha missões numéricas e falhas de cordas. Se myvar for numérico, você poderia escrever porque. Lt. a lt. b lt. Lt. z são os valores em falta numéricos. A maioria dos problemas envolve valores numéricos em falta, portanto, a partir de agora, os exemplos serão apenas para variáveis ​​numéricas. No entanto, se myvar fosse string, seria a sintaxe correta, e não o comando anterior, porque a string vazia está perdida. 3. Copiando os valores anteriores para baixo: o efeito em cascata Os valores ausentes podem ocorrer em blocos de dois ou mais. Suponha que você queira substituir as faltas pelo valor anterior não faltando, sempre que ocorreu, de modo que, quando quiser substituir não somente myvar2. Mas também myvar3 com 42. é uma solução interativa, mas, para conjuntos de dados maiores, você precisa de uma maneira mais sistemática de proceder. Para obter isso, ajuda a saber que a substituição sempre usa a ordem de classificação atual: o valor para a observação 2 sempre é substituído antes da observação 3, portanto, o valor de reposição para 2 pode ser usado no cálculo do valor de substituição para 3. atinge isso Propósito. Myvar1 está inalterado, porque myvar1 não está faltando. Myvar2 é substituído pelo valor de myvar1. 42, porque myvar2 está faltando. Mas myvar3 é substituído pelo novo valor de myvar2. 42, não seu valor original, faltando (.). Desta forma, os valores não transmissíveis são copiados em cascata pela ordem de classificação atual. Naturalmente, um ou mais valores faltantes no início dos dados não podem ser substituídos dessa maneira, pois nenhum valor sem aviso prévio precede qualquer um deles. E se você quiser usar apenas o valor anterior e não quiser este efeito em cascata Você precisa copiar a variável e substituir por isso: Nenhuma substituição está sendo feita na mycopy. Então não há efeito em cascata. Substitua apenas olhe para a minha cópia e volte uma observação. 4. Copiando os seguintes valores para cima O caso oposto é substituído pelos seguintes valores, mas, porque substituir respeita a ordem de classificação atual, esta não é apenas a imagem espelhada de substituição por valores anteriores. Na prática, é mais fácil reverter a série e trabalhar de outra maneira. Gsort permite que você obtenha ordem de classificação reversa veja D gsort. O tempo de ordenação de classificação coloca os valores mais altos por último, enquanto que gsort minustime coloca os valores mais altos primeiro. É como se você tivesse gerado uma variável multiplicada por menos1 e classificada nela e, de fato, isso é exatamente o que o gsort faz nos bastidores, embora a variável seja temporária e tenha caído após ter servido o objetivo. Não produz um efeito em cascata. Myvar2 seria substituído por myvar3 existente. Myvar3 seria substituído por myvar4 existente. e assim por diante. No máximo, um de qualquer bloco de valores faltantes seria substituído. Isso pode, é claro, ser exatamente o que você deseja. Mais uma vez, nada pode ser feito sobre quaisquer valores faltantes no final da série (colocados no início após o gsort). Após a substituição, você provavelmente irá reverter a classificação novamente em 5. Complicações: várias variáveis ​​e estrutura do painel Duas complicações comuns Você deseja fazer isso com várias variáveis: use foreach. Classifique ou gsort uma vez, substitua todas as variáveis ​​usando foreach. E, se necessário, reordenar novamente. Você tem dados do painel, de modo que a substituição apropriada é um valor vizinho não relacionado para cada indivíduo no painel. Suponha que os indivíduos sejam identificados por id. Há apenas alguns detalhes extras a serem revisados, como a chave para muitos problemas de gerenciamento de dados com dados do painel está na sequência de classificação por alguns cálculos por:. Para mais informações, veja as seções do manual indexadas por:. 6. Com tsset Se você tiver tsset seus dados, digamos, ao digitar tem o efeito de copiar em cascata, enquanto não tem esse efeito. O valor de tsset é que ele leva em conta lacunas em seus dados e (se você declarou uma variável de painel) de qualquer estrutura de painel para seus dados. 7. Valores faltantes em seqüências Em alguns conjuntos de dados, as variáveis ​​de tempo vêm com lacunas, algo como Nós podemos usar um método semelhante e confiar em cascata: a diferença é simplesmente que cada valor é mais do que o anterior. Se os dados fossem uma vez por década, cada valor seria de mais 10, e assim por diante. Novamente os valores faltantes no início de uma seqüência precisam de cirurgia especial, como mostrado aqui. Com os dados do painel tsset, use L. year 1 em vez de yearn-1 1.

No comments:

Post a Comment