본문 바로가기

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

[STATA] STATA에서의 매크로(1) - local, global

매크로란 여러 명령어를 반복해서 사용하게 될 때, 이 마이크로 명령어들을 일일이 입력하지 않고 묶어서 수행할 수 있도록 하는 기능입니다.엑셀에서도 많이 사용되지요. 그러나 STATA에서의 매크로 기능은 엑셀과는 조금 차이가 있습니다. 엑셀에서의 엑셀은 STATA에서 do-file과 비슷하지요. 


STATA에서의 매크로는 여러 변수들을 반복적으로 사용할 수 있도록 합니다. 예컨대 여러 regression에서 동일한 독립 변수 목록을 사용하면서 이를 반복적으로 입력하는 것을 피하고 싶을 때 매크로를 쓰게 됩니다. 매크로 command의 기본은 다음과 같습니다.


매크로 매크로이름 매크로내용 


매크로의 정의와 관련하여 좀더 알아보면,

. local name "something"

는 대괄호 안에 있는 그대로를 매크로의 내용으로 인식하고,


. local name = something

는 something의 결과를 매크로의 내용으로 인식합니다.즉, 


. local problem "2+2"

. local result = 2+2

일 경우,'probelm' == 'result',  2+2=4 인 것이지요. 




이때 매크로에는 local macro와 global macro가 있는데, local macro는 현재 작업하는 do-file에서만 유효한 것이고, global macro는 STATA가 작동하는 동안 다른 작업에서도 유효하게 사용됩니다. 예시를 보면 다음과 같습니다.


program define reg1

1. local varlist gdp60 openk kc kg ki 

2. reg grgdpch `varlist' if year==1990

3. end


이라고 했을 때에는 varlist라는 매크로가 해당 작업에만 유효한 것이기에 다른 STATA 창에서 


capture program drop reg2

program define reg2 

1. reg grgdpch `varlist' if year==1990

2. end

 

라고 입력하면 앞서 정의한 varlist에 따른 결과를 출력하지 않지요. 


반면, global varlist을 사용하면 다른 작업창에서도 정의했던 변수 목록을 사용할 수 있습니다. 이때 global varlist 앞에서는 $를 붙여주고, local varlist는 양쪽에서 ' ' 를 붙여줍니다.


. global varlist gdp60 openk kc kg ki

. capture program drop reg1

. program define reg1

 1. local varlist gdp60 openk

 2. reg grgdpch `varlist'

 3. reg grgdpch $varlist

 4. end 


라고 입력된 do-file을 실행시키면 먼저 grgdpch에 대하여 gdp60 openk를 regress할 것이고, 다음으로 grgdpch에 대하여 gdp60 openk kc kg ki를 regress할 것입니다. 한편,또다른 do-file 상에서 혹은 그 아래에 


. capture program drop reg2

. program define reg2

 1. reg grgdpch ${varlist}

 2. reg grgdpch `varlist'

 3. end


라고 입력하고 실행시키면 먼저 grgdpch에 대하여 gdp60 openk kc kg ki를 regress하기는 하지만, local varlist가 새로 정의되지 않았기 때문에 두 번째 regress에서 'varlist'는 인식되지 않습니다. 




이렇듯 local varlist 및 global varlist를 통해서 변수를 반복해서 사용하는 것 이외에도 매크로를 통해 조건을 정의할 수 있습니다.


매크로가 다음과 같이 정의되었을 때, 


. local year90 “if year==1990”


. reg grgdpch $varlist `year90’

는 결국


. reg grgdpch gdp60 openk kc kg ki if year==1990

과 같습니다.


또, ctyname의 코드가 B로 시작하는 국가들만을 대상으로 regression을 돌린다고 생각해봅시다. 다음과 같이 먼저 local 매크로를 정의하고 이를 regression에 사용하면 됩니다.


. local ctyname B

. reg grgdpch gdp60 openk kc kg ki if substr(country,1,1)=="`ctyname'"


이때 substr( )은 어떤 문자열에서 특정 문자만 추출하는 함수입니다. 즉, substr(s, b, l)는 s라는 변수에서 b라는 위치로부터 l만큼의 길이만큼 문자열을 추출합니다. 




이 포스팅이 마음에 드셨다면 공감 버튼을 눌러주세요

로그인 하지 않으셔도 공감하실 수 있답니다.