매크로란 여러 명령어를 반복해서 사용하게 될 때, 이 마이크로 명령어들을 일일이 입력하지 않고 묶어서 수행할 수 있도록 하는 기능입니다.엑셀에서도 많이 사용되지요. 그러나 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만큼의 길이만큼 문자열을 추출합니다.
이 포스팅이 마음에 드셨다면 공감 버튼을 눌러주세요.
로그인 하지 않으셔도 공감하실 수 있답니다.
'방법론 공부 > 계량통계 방법론' 카테고리의 다른 글
[STATA] 변수 정렬 및 관리 - sort, tab, gen, egen, ren (0) | 2015.03.10 |
---|---|
[STATA] STATA에서의 매크로(2) - foreach, forvalue, levelsof (0) | 2015.03.10 |
[STATA] STATA 관련 파일 확장자들 - dta, do, log (0) | 2015.03.07 |
[STATA] set memory, set more on/off, set seed - 데이터 메모리 및 출력 설정 (0) | 2015.03.07 |
[STATA] log, capture, delimit command - STATA 시작하기 (0) | 2015.03.07 |