티스토리 뷰

STATA

명령어 자동화

비조 2018. 10. 10. 22:24

명령어 자동화

* 아래는 Stata Blog(10월 9일 )에 있는 블로그 내용을 축약해서 정리한 것입니다.

자주 쓰는 명령어를 자동화 시켜놓으면 매우 편리하다.

. sysuse auto, clear
(1978 Automobile Data)

다음과 같이 price 변수를 정규화 시켜보자.

. sum price

    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
       price |         74    6165.257    2949.496       3291      15906

. gen priceN = (price - r(mean))/r(sd)

이러한 파일을 do 파일로 저장해놓고 필요할 때마다 불러내서 사용할 수 있다.

예컨대, normalize.do 파일로 저장해놓고

do normalize

와 같이 이용할 수 있다.

하지만 위와 같은 do 파일의 경우 정규화 해야 하는 변수 이름을 매번 바꿔줘야 하는 번거로움이 있다.

다음과 같이 do 파일을 바꾸어 두면 매번 변수이름을 바꿀 필요가 없어서 편하다.

version 15.0
summarize `1'
gen `1'N = (`1' - r(mean))/r(sd)

그러면 다음과 같이 변수명을 추가하여 명령어를 실행시킬 수가 있게 된다.

. sysuse auto, clear
(1978 Automobile Data)

. do normalize price

. version 15.0

. summarize `1'

    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
       price |         74    6165.257    2949.496       3291      15906

. gen `1'N = (`1' - r(mean))/r(sd)

. 
end of do-file

여기에 if 같은 조건문을 사용하려면 구문(syntax)을 지정해주면 됩니다.

version 15.0
syntax varlist(min=1 max=1) [if] [in]
summarize `varlist' `if' `in'
gen `varlist'N = (`varlist' - r(mean))/r(sd) `if' `in'

그러면 다음과 같은 명령어를 사용할 수 있다.

. sysuse auto, clear
(1978 Automobile Data)

. do normalize2 price if foreign

. version 15.0

. syntax varlist(min=1 max=1) [if] [in]

. summarize `varlist' `if' `in'

    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
       price |         22    6384.682    2621.915       3748      12990

. gen `varlist'N = (`varlist' - r(mean))/r(sd) `if' `in'
(52 missing values generated)

. 
end of do-file

하지만 위의 do 파일은 변수 하나씩만 정규화 시킬 수 있다.

여러 변수를 동시에 정규화 시킬 수 있다면 좀 더 편리할 것이다.

. sysuse auto, clear
(1978 Automobile Data)

. do normalize3 price mpg

. version 15.0

. syntax varlist [if] [in]

. 
. foreach var in `varlist' {
  2.         summarize `var' `if' `in'
  3.         gen `var'N = (`var' - r(mean))/r(sd) `if' `in'
  4. }

    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
       price |         74    6165.257    2949.496       3291      15906

    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
         mpg |         74     21.2973    5.785503         12         41

. 
end of do-file

다음과 같이 표준화가 되어 있다.

. sum price* mpg*

    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
       price |         74    6165.257    2949.496       3291      15906
      priceN |         74   -4.83e-10           1  -.9744909   3.302511
         mpg |         74     21.2973    5.785503         12         41
        mpgN |         74   -7.00e-09           1  -1.606999    3.40553

조금 더 자동화를 하려면 ado 파일을 만들면 된다.

아래와 같이 normalize4.ado 을 만들면 된다.

program normalize4 
	version 15.0
	syntax varlist [if] [in]

	foreach var in `varlist' {
	summarize `var' `if' `in'
	gen `var'N = (`var' - r(mean))/r(sd) `if' `in'
	}
end

위 normalize4.ado 파일을 워킹 디렉토리 혹은

adopath 를 이용해서 personal 폴더에 집어 넣으면 다음과 같이 실행할 수 있다.

. sysuse auto, clear
(1978 Automobile Data)

. normalize4 price mpg

    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
       price |         74    6165.257    2949.496       3291      15906

    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
         mpg |         74     21.2973    5.785503         12         41

. sum price* mpg*

    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
       price |         74    6165.257    2949.496       3291      15906
      priceN |         74   -4.83e-10           1  -.9744909   3.302511
         mpg |         74     21.2973    5.785503         12         41
        mpgN |         74   -7.00e-09           1  -1.606999    3.40553


'STATA' 카테고리의 다른 글

신뢰구간이란 무엇인가?  (2) 2018.10.31
cross-validation in Stata  (0) 2018.10.22
Cheat Sheet for Policy Evaluation  (1) 2018.01.29
정책분석을 위한 STATA 출간  (0) 2018.01.22
천둥번개와 정책효과: 이중추정법 part 2  (0) 2018.01.06
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함