Присвойте значение локальной переменной с помощью оператора if - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь присвоить условное значение локальной макропеременной в 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 ]

0 голосов
/ 17 сентября 2018

Давайте сосредоточимся на том, что в определении локального макроса не разрешен квалификатор if. Это дополнение к прекрасному ответу @Pearly Spencer, а не альтернатива ему.

Во-первых, синтаксическая диаграмма для команды local (например, help local приведет вас туда) не показывает, что это разрешено. Это почти всегда означает, что это действительно запрещено. (Очень редко в синтаксисе есть недокументированные детали.)

Во-вторых, и более точно, здесь нет причины для определения if. Спецификатор if допускает различные результаты в зависимости от подмножества наблюдений, но локальные макросы не имеют ничего общего со строгим смыслом набора данных. Они в равной степени применимы ко всем наблюдениям или вообще к ним

Ничто из этого не отрицает того, что программист, как и вы, часто хочет определить локальные макросы, условные для чего-то другого, и это требует чего-то другого, например, команды if или cond().

0 голосов
/ 17 сентября 2018

Локальные макросы являются , а не переменными;эти два отличны в 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 квалификатор.

...