Как мне использовать локальный макрос, ссылающийся на переменную?

Я пытаюсь создать макрос в Stata, который установит имя переменной, чтобы я мог ссылаться позже в моем do файл. По сути, я пытаюсь заменить имя переменной локальным макросом.

Пример набора данных:

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 

Вы размещаете буквальный текст Indicator внутри локального макроса с именем myvar, " " в этом примере используются разделители, и, как показывает последний пример, в этом случае они не обязательны. Все идет нормально.

Тем не менее, использование " " в вашем summarize оператор указывает Stata, что вы намереваетесь получить результат оценки (разыменования) локального макроса для обработки в виде литеральной строки; и буквенную строку можно сравнивать только с другой литеральной строкой или содержимым строковой переменной, указанной ее именем. Отсюда и сообщение об ошибке type mismatch,

Итак, это было бы законно:

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

Ничего не произойдет, потому что "indicator" не равно "1", поэтому утверждение будет ложным (в каждом наблюдении, для которого оно было опробовано). Но у Stata не будет проблем с синтаксисом.

Но это не то, что вы хотите. Вы хотите, чтобы содержимое локального макроса обрабатывалось как имя переменной, что означает запись

sum Amount if `myvar' == 1 

Тот факт, что локальный макрос был определен, здесь не имеет значения; он используется ненадлежащим образом.

Другие вопросы по тегам