문제

다음 루프에서 홀수 동작 (결 측값 만 생성)을 받고 있습니다.

varlist 이름의 foreach x {egen totalcapx'=total(cap) if unit!=0 & name=="x ' ", by (년)}

그러나 내가 그냥해야한다면

egen totalcapsomename = total (캡) If Unit! = 0 & name == "somename", by (Year)

그런 다음 계산 해야하는 숫자를 계산합니다.

이것은 패널 데이터 세트이며, 단위는 특정 발전기 유닛의 발전소 내의 수를 나타냅니다 (단위 0은 플랜트 수준 관측치입니다). 캡 변수가 설치되어 있습니다. 이름 변수는 플랜트를 식별합니다. 이 루프가 필요한 이유를 설명하는 것은 복잡하지만 스테타가 Foreach를 해석하는 방식에 문제가 있습니다.

도움이 되었습니까?

해결책

여기에는 몇 가지 문제가 있습니다. 가장 중요한 것은 첫 번째 루프는 루프 전체에서 "x"대신 "이름"이라는 단어를 평가하는 것입니다. 그래서 그것의 -Egen- 명령을 다음과 같이 실행합니다.

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

나는 이것이 당신이 정말로 원하는 것인지 의심합니다. if 문을 사용했기 때문에 "이름"변수에서 각 항목 (관찰)에 의해 평가하기를 원한다고 생각합니다.x'". So, you need to either get rid of the double quotes around the "X ' ""-IF- 명령문에 또는 로컬 매크로를 설정하고 "이름"변수의 각 항목을 평가하도록 Egen 루프를 설정하십시오.

코드에서 볼 수있는 두 번째 오류는 루프에 "x"에 대한 전방 또는 왼쪽 인용문이 누락된다는 것입니다. "x"가 아닌 "x" "를 읽어야합니다.

다음은 내가 당신이 실행하고 싶다고 생각하는 예입니다. 그림 목적으로, 나는 당신의 루프 및 독립형 -Egen- 명령문을 실행하기 위해 구축 된 "auto.dta"데이터 세트를 사용하고 있습니다.

***********
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)
***********

Stata do-file 에서이 예제를 실행해보십시오. 또한 이러한 종류의 문제가있을 때 (루프가 독립형 명령과 다른 결과를 생성하는 경우), Stata가 루프를 어떻게 평가하는지 확인할 수 있도록 항상 - 세트 추적을 입력하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top