2017-10-17 7 views
0

일반 문제 : 다른 그룹의 조건을 기반으로 값을 만드는 방법을 이해하지 못합니다. 내가 좋아하는 일을하고 싶습니다 :다른 그룹의 데이터를 기반으로 한 그룹의 조건부 플래그 행

gen x = cond(cond1==1 & cond2==1, value[**of some other row in a different group**], other_value) 

특정 문제 : 절대 변경 id에 따라 그룹이 대규모 데이터 세트 및 않는 보조 ID (co_id)을 감안할 때. 각 그룹에는 time에서 반복되는 여러 행이 있습니다. 각 행은 특정 시간에 다른 그룹 (즉, id)과의 관계를 나타내는 플래그 (is_a)를 갖는다. 그 관계는 co_id으로 변경되어 표시되므로 다른 그룹과 같습니다. 올해 플래그가 지정된 행 (is_a == 1) 새로운 co_id가 속한 그룹의 id을 찾기위한

  1. 하고, 다른 그룹에 대해
  2. , 플래그 :

    나는이 일을하려고 접속이 상술 한 예에서는

enter image description here

에게 만들어진 것을 GROU p 11111 시간에 그룹 222에 연결되었습니다 (한 번만 연결됨). 새로운 co_id'xzx'을 기반으로 그때부터 id222임을 나타내려고합니다. 다른 그룹에는 co_id이있을 수 있지만 올바른 것은 데이터에있는 co_id의 가장 초기 모양입니다 (따라서 하나는 222이고 777이 아님).

그룹 222의 경우 연결이 설정되었을 때 그 시간을 플래그로 표시합니다 (time == 11).

샘플 데이터 :

clear 
input int id byte(is_a time) str3 co_id 
111 0 10 "abc" 
111 0 10 "abc" 
111 1 11 "xzx" 
111 1 11 "xzx" 
111 1 12 "xzx" 
111 1 12 "xzx" 
222 0 10 "xzx" 
222 0 10 "xzx" 
222 0 11 "xzx" 
222 0 11 "xzx" 
222 0 12 "xzx" 
222 0 12 "xzx" 
777 1 13 "xzx" 
end 

사전에 감사합니다!

+1

사람들이 복사하여 붙여 넣을 수있는 데이터의 예를 제공해주십시오. 'ssc inst dataex'는 작은 데이터 예제를'input' 코드로 제공합니다. 얼마나 많은 사람들이 이미지에서 보는 것을 다시 입력하려고합니까? 또한 _rows_라는 용어는 Stata 토론이 스프레드 시트 토론과 마찬가지로 Stata 토론과는 다릅니다. –

+0

접근 방식이 재사용 될 수있는'vlookup '이라는 사용자 작성 명령이 있지만, 기성품으로는 작동하지 않습니다. –

+0

@ 닉콕스가 추가되었습니다. 죄송합니다. 감사합니다. –

답변

0

나는 문제의 하나가 내 그룹 작업의 기초로 id을 사용하는 것에 정신적으로 달라 붙었다 고 생각합니다.

sort id time 
by id: gen changed_co_id = cond(co_id[_n]!= co_id[_n-1], 1, 0) 
by id: replace changed_co_id = 0 if _n==1 
by id time: replace changed_co_id = 1 if changed_co_id[1]==1 

가 지금은 다른 그룹에 대한 플래그를 만들 수 있습니다 다음 co_id 마지막 time 이후 변경 여부를 확인하기 위해 도우미 변수를 생성보다

sort co_id time id 
by co_id: gen id_co = id[1] if is_a==1 

: co_id 일부 당 정렬로, 여기에 도움을 사용하여 연결이 만들어진 때를 표시합니다 : 우리는을 기준으로 정렬 할 필요가 플래그를 만들기 위해

#delimit ; 
sort co_id time is_a changed_co_id; 
by co_id time: gen is_conn = cond(is_a==0 & 
         changed_co_id==0 & 
         is_a[_N]==1 & 
         changed_co_id[_N]==1, 1, 0); 
#delimit cr 

그래서210 따라서 우리는 time에 의해 연결된 그룹의 id을 얻을 수 있으므로 연결시 (그리고 이후) 공존 할 수 있고 changed_co_id에 의해 공존 할 수 있으므로 연결이 이루어진 정확한 time을 찾을 수 있습니다. 또한이 배열 새로 연결 한 관측치가 각 그룹의 끝 부분에 나타나는지 확인합니다. 그런 다음 연결을 시작한 그룹의 관찰에 플래그를 지정합니다. 연결되지 않았고 마지막 관찰이 새로 발생한 경우입니다.