2017-03-28 2 views
0

나중에 변수 이름을 내 do-file에서 참조하도록 설정하는 Stata에 매크로를 만들려고합니다. 그래서 변수 이름을 로컬 매크로로 바꾸려고합니다.변수를 참조하는 로컬 매크로는 어떻게 사용합니까?

예시적인 데이터는 다음

ID Indicator1 Indicator2 Amount 
1 1   0    10 
2 0   1    2 
3 0   0    3 
4 1   0    5 
5 1   1    20 

내 데이터 지표들을 갖는다. 하지만 한 번에 하나의 지표로만 작업하면됩니다. 그래서 저는 현재 작업하고있는 지시자를 매크로에 넣어서 전체 코드에서 한 가지만 바꾸어야합니다. 내 코드는 다음과 같습니다

local myvar = "Indicator" 

내가 원하는 것은이 같은 것을 사용할 수있게하는 것입니다 그러나

sum Amount if "`myvar'" == 1 

, 내가 정의 된 "type mismatch"myvar 불구라는 오류가 계속. 중 하나를 입력하여

답변

1

local myvar "Indicator" 

또는

local myvar = "Indicator" 

또는

local myvar Indicator 

당신이 이름 myvar으로 로컬 매크로 내부의 문자 텍스트 Indicator을 배치

. 이 예에서 " "은 구분 기호이며 마지막 예에서와 같이이 경우에는 사용할 수 없습니다. 여태까지는 그런대로 잘됐다.

그러나 summarize 문에 " "을 사용하면 로컬 매크로를 평가 (역 참조)하여 리터럴 문자열로 처리하려는 의도가 있음을 Stata에 알립니다. 리터럴 문자열은 다른 리터럴 문자열이나 이름으로 표시된 문자열 변수의 내용과 만 비교할 수 있습니다. 따라서 오류 메시지 type mismatch.

그래서,이 법률 것 : "indicator""1" 동일하지 않기 때문에 진술이 거짓이 될 것이다, 그래서

sum Amount if "`myvar'" == "1" 

아무것도 (이 시도 된마다 관찰에서), 일이 없을 것입니다. 그러나 Stata는 구문에 아무런 문제가 없습니다.

하지만 원하는 것은 아닙니다. 로컬 매크로 내용이

sum Amount if `myvar' == 1 

정의 된 로컬 매크로 여기에 비 물질적이라는 사실을 작성하는 것을 의미 변수 이름으로 처리 할; 부적절하게 사용되고 있습니다.

+0

감사합니다. 나는''myvar '== 1'이라면 sum Amount를 사용하고, 이번에는 '== 1 invalid name'이라고 정의했다. – Kany

+1

아마 그 시점에서 로컬 매크로가 보이지 않는다는 것을 의미합니다. 이것은 do 파일을 청크로 실행하는 일반적인 부작용입니다 (예 : 한 번에 한 줄씩. 지역 정보 란 지역 정보 (코드 덩어리)를 의미합니다. 테스트하기 전에, 매크로를 사용하기 전에 매크로를 디스플레이 해보십시오 :'macro list'는 그것을 수행하거나'di "\'myvar '"'를 수행합니다. 해결 방법은 파일을 청크로 실행하지 말고 어떤 경우에는'local' 정의가 보이는지 확인하는 것입니다. –

+0

오케이. 문제는 내가 할일 파일을 청크로 실행하고 있다는 것입니다. 이제 작동합니다. :) – Kany

관련 문제