2013-11-25 2 views
-1

나는 몇 년에 걸쳐 이동 평균을 계산할 패널 데이터 세트가 있습니다.Stata에서 변수 간 이동 평균

각 연도는 각 주에 대한 관찰이있는 변수이며 매 3 년마다의 평균에 대한 새 변수를 만들고 싶습니다. 예를 들어 는 :

P1947=rmean(v1943 v1944 v1945), P1947=rmean(v1944 v1945 v1946) 

나는 내가 egen 명령으로 foreach 루프를 사용한다 생각,하지만 난 루프 내에서 다른 변수를 참조하는 방법에 대해 확실하지 않다.

모든 안내에 감사드립니다.

+0

It Stata입니다. 이것은 이미 당신에게 지적되었습니다. –

+1

'rmean()'은'egen'에서 작동하지만 Stata 9부터는 문서화되지 않았다는 것에주의하십시오. 문서화 된'egen' 함수 이름은'rowmean()'입니다. –

답변

1

이 데이터 구조는 목적에 맞지 않습니다. 식별자가 id이라고 가정하면 reshape이 필요합니다.

reshape long v, i(id) j(year) 
tsset id year 

그러면 평균 이동이 쉽습니다. tssmooth 또는 단지 generate을 사용하십시오.

gen mave = (L.v + v + F.v)/3 

또는 (더 나은)

데이터 구조가 매우 부적당 이유에
gen mave = 0.25 * L.v + 0.5 * v + 0.25 * F.v 

더 많은 것은 :뿐만 아니라 이동 평균 필요 (반드시 egen을 포함하지 않음) 루프의 계산,하지만 당신은 될 것 몇 가지 새로운 추가 변수를 생성합니다. 후속 분석에서 이들을 사용하는 것은 어색하고 불가능한 사이 어딘가에있을 것입니다.

편집 샘플 루프를 제공 하겠지만 내 태도는 움직이지 않는 반면 기술은 좋지 않습니다. 귀하의 명명 규칙 뒤에 이유가 표시되지 않습니다. P1947은 1943-1945 년을 의미합니다. 그저 오타라고 생각합니다. 우리가 1913-2012 년 동안 자료를 가지고 있다고 가정 해 봅시다. 3 년의 수단으로, 우리는 양쪽에서 1 년을 잃습니다.

forval j = 1914/2011 { 
    local i = `j' - 1 
    local k = `j' + 1  
    gen P`j' = (v`i' + v`j' + v`k')/3 
} 

매크로 내에서 매크로가 혼란 스럽기 때문에 더 간결하게 작성할 수 있습니다. 위와 같이 동일하지 않은 가중치를 사용하는 것은 쉽습니다. egen을 사용하는 유일한 이유는 위와 같은 경우에 누락이 있으면 포기하지 않기 때문입니다. 완전성의 문제로

멀어져 편집, egen에 의지하지 않고에서 missing 취급이 용이 있습니다.

분자입니다

(v`i' + v`j' + v`k') 

(cond(missing(v`i'), 0, v`i') + cond(missing(v`j'), 0, v`j') + cond(missing(v`k'), 0, v`k') 

3 

!missing(v`i') + !missing(v`j') + !missing(v`k') 
0,123,516로 일반화된다 분모로 일반화된다

모든 값이 누락 된 경우 0/0으로 줄어들거나 누락됩니다. 그렇지 않으면 값이 누락 된 경우 분자에 0을 추가하고 분모에 0을 추가합니다. 이는 무시하는 것과 같습니다.당연히 코드는 3 년의 평균에 대해 위와 같이 허용되지만, 그 경우 또는 더 많은 년간 평균을 내면 위의 라인을 루프로 바꿀 것입니다. 이것은 egen입니다.

0

매우 쉽게 사용자가 작성할 수있는 프로그램이 있습니다. mvsumm이라고하며 findit mvsumm

xtset id time 
mvsumm observations, stat(mean) win(t) gen(new_variable) end 
+0

'mvsumm'은 단일 응답 변수를 가정하므로 긴 구조로 유지 된 패널 데이터에만 적용 할 수 있습니다. 여기서 중요한 점은 OP는 광범위한 데이터 구조를 가지고 있다는 것입니다. 이 답변은 내 대답에 자세히 설명되어있는 것처럼 모양을 변경 한 후에 만 ​​OP 데이터에 맞습니다. –

+0

나는 패널 데이터가 넓다는 것을 감독했다. Nick은 물론 그의 대답에서 맞습니다. – user3025970