본문 바로가기

방법론 공부/계량통계 방법론

[STATA] 관측치에 대해 고유값 부여 - gen number=_n, _n, _N

STATA에서 "_n"은 "underscore variable"이라 불리며, 현재 관측값의 순서를 뜻합니다. 따라서 각각의 관측치에 대해 개별적으로 고유한 값을 부여하고 싶을 때 유용합니다. 따라서


gen number=_n


는 dataset에서 관측치의 순서에 해당하는 값(1~N값까지)을 부여합니다. 



한편, _N은 전체 관측값의 갯수를 나타냅니다. 다음의 예시를 통해 그 차이를 볼 수 있습니다. 


input score group

72         1

84         2

76         1

89         3

82         2

90         1

85         1


라는 dataset에 대하여

generate id = _n

generate nt = _N list


를 실행시키면


score group id nt 1. 72 1 1 7 2. 84 2 2 7 3. 76 1 3 7 4. 89 3 4 7 5. 82 2 5 7 6. 90 1 6 7 7. 85 1 7 7


과 같은 결과가 나타납니다.




이러한 _n command를 통해 id number가 고유하게 부여되었는지도 확인할 수 있습니다. 


id     score

117     72 

204     84 

311     76 

289     89 

141     82 

277     90 

465     85 

289     88

182     84


라는 dataset이 있을 때, 각각의 id에 고유한 점수가 부여되었는가를 확인하고 싶습니다. id에 따라 정렬하고 난 뒤, 현재 순서에서 id가 중복적으로 부여되었는가를 확인하면 됩니다.


sort id list if id==id[_n + 1]


id score 6. 289 88


id=id[_n+1]이기 때문에 현재 id와 그 다음 순서의 id가 동일하다는 것을 알 수 있습니다. 이를 다음과 같이 재확인 할 수 있습니다.


list in 6/7

id score 6. 289 88 7. 289 89


6번째와 7번째 id는 동일하나, 다른 점수값을 갖고 있음을 알 수 있습니다.



하나의 관측치가 여러 번 입력되었을 수도 있습니다. 이를 _N command를 통해 확인할 수 있습니다

input id score x1 x2 y1 y2 z1 z2 117 72 3 16 42 7 59 61 204 84 6 12 44 9 51 66 141 82 2 17 41 5 56 61 311 76 9 14 46 1 58 62 289 89 4 13 48 3 55 68 141 82 2 17 41 5 56 61 277 90 3 12 44 6 52 65 465 85 5 19 43 2 54 64 289 88 7 18 45 4 58 69 182 84 1 11 47 7 52 61 141 90 4 13 43 4 51 65


에 대하여 이를 각각의 변수에 대하여 정렬한 후, 모든 변수에 대하여 관측치에서 동일한 값이 발견되는가를 확인하면 됩니다.


sort id score x1 x2 y1 y2 z1 z2 by id score x1 x2 y1 y2 z1 z2: generate n = _N list if n>1

이를 통해 id number 141에 대하여 동일한 값이 두 번 입력되었음을 알 수 있습니다. 


한편, 모든 변수를 일일이 나열하는게 시간이 걸릴 때에는 다음과 같이 "*"를 쓸 수 있습니다.


bysort *: generate n=_N

list if n>1