Присвойте значение локальной переменной с помощью оператора if
Я пытаюсь присвоить условное значение локальной макропеременной в Stata 15.
У меня есть локальная переменная, которая может иметь только два значения; "о" или "и". Затем у меня есть другая локальная переменная, которую я хочу получить из этих двух букв, отличных от первой локальной переменной.
Мой код выглядит так:
local utr o /*Can be assigned either "o" or "u".*/
local uin u if `utr' == o
local uin o if `utr' == u
di "utr = `utr'"
di "uin = `uin'"
Я также пробовал несколько вариантов этого кода, где у меня только один "=" в операторе if и "" вокруг букв в условных выражениях.
Я получаю сообщение об ошибке, которое говорит:
если не разрешено
так что, думаю, я не смогу сделать это так, если это вообще возможно.
Можно ли вообще назначать "автоматические" значения условных локальных переменных в Stata?
И если это возможно, как я должен это сделать?
2 ответа
Локальные макросы не являются переменными; эти два отличны в Stata.
Следующие работы для меня:
local utr o // can be assigned either "o" or "u"
if "`utr'" == "o" local uin u
else local uin o
display "utr = `utr'"
utr = o
display "uin = `uin'"
uin = u
Смотрите эту страницу для объяснения разницы между if
командование и if
Классификатор.
Давайте сосредоточимся на if
Недопустимый квалификатор в определении локального макроса. Это дополнение к прекрасному ответу @Pearly Spencer, а не альтернатива ему.
Во-первых, синтаксическая диаграмма для local
команда (например, help local
доставит вас туда) не показывает, что это разрешено. Это почти всегда означает, что это действительно запрещено. (Очень редко встречаются недокументированные детали синтаксиса.)
Во-вторых, и, что более важно, нет причин для if
классификатор здесь. if
Спецификатор допускает разные результаты в зависимости от подмножества наблюдений, но локальные макросы не имеют ничего общего со строгим смыслом набора данных. Они в равной степени применимы ко всем наблюдениям или вообще ни к одному.
Ничто из этого не отрицает того, что программист, как и вы, часто хочет определить локальные макросы, обусловленные чем-то другим, и это требует чего-то другого, такого как if
команда или cond()
,