Pergunta

Estou recebendo um comportamento estranho (ele gera apenas valores em falta) a partir do seguinte loop -

foreach x do nome varlist {egen totalcapx'=total(cap) if unit!=0 & name=="x '", de (ano)}

Mas, se eu fosse fazer apenas

= egen totalcapSOMENAME total (cap) se unidade! = 0 & nome == "somename", de (ano)

, em seguida, ele calcula os números que ele é suposto computação.

Trata-se de um painel de dados, o número de unidades dentro designa um motor de uma unidade de gerador especial (unidades numeradas de 0 são observações de nível de planta). A variável tampa é a capacidade instalada. A variável nome identifica a planta. É complicado para explicar por que eu preciso deste loop, mas o problema é claramente com a maneira como STATA interpreta foreach.

Foi útil?

Solução

Você tem um par de questões aqui. Mais importante ainda, o seu primeiro ciclo está avaliando a palavra "nome" no lugar de "x" em todo o seu ciclo. Portanto, a sua execução de seu comando -egen- como:

foreach x of varlist name {
     egen totalcapname = total(cap) if unit!=0 and name=="name", by(year)
}

Eu duvido que isso é o que você realmente quer - Eu acho que você quer que ele para avaliar por cada item (observação) na variável "nome" desde que você usou o se nome de instrução == "x'". So, you need to either get rid of the double quotes around the "x '" em sua -if- declaração ou configurar uma macro local e ajuste o circuito egen para avaliar para cada item na sua variável "nome".

O segundo erro que eu vejo em seu código é que você está faltando a citação para a frente ou para a esquerda para o "x" no loop -. Deve ler-se "` x '", não" x'

Aqui está um exemplo do que eu acho que você deseja executar. Para fins de ilustração, eu estou usando o Stata embutido "auto.dta" conjunto de dados para executar o seu ciclo e autônomo declaração -egen- ... Por favor, note que eu renomear as variáveis ??no auto.dta aos nomes de suas variáveis:

***********
clear
sysuse auto


**
//this section renames the auto.dta variables to the name of your variables//

gen year = [_n]
rename mpg cap
rename price unit
rename make name
**NOTE:  your "SOMENAME" will be "Subaru" in this example!**
**

//here's the loop you should be running//

foreach x of varlist name {
 egen totalcap`x'=total(cap) if unit!=0 & name==`x', by(year) 
 }

//without the loop//

egen totalcapSOMENAME=total(cap) if unit!=0 & name=="Subaru", by(year)

//Display the results//

li name unit cap totalcap* if !missing(totalcapSOMENAME)
***********

Tente executar este exemplo em um arquivo .do Stata. Além disso, quando você tem este tipo de questões (onde o laço cria um resultado diferente do que a sós comando suporte), sempre tentar digitação -conjunto traçar on- de modo que você pode ver como Stata está avaliando o seu loop.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top