Как мне использовать локальный макрос, ссылающийся на переменную?
Я пытаюсь создать макрос в 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
Тот факт, что локальный макрос был определен, здесь не имеет значения; он используется ненадлежащим образом.