2

我正在尝试将条件值分配给 Stata 15 中的局部宏变量。

我有一个只能有两个值的局部变量;“o”或“u”。然后我有另一个局部变量,我想获得这两个的另一个字母而不是第一个局部变量。

我的代码如下所示:

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中分配“自动”条件局部变量值?

如果可能的话,我应该怎么做?

4

2 回答 2

3

局部宏不是变量;这两个在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

有关命令和限定符之间区别的说明,请参阅此页面。ifif

于 2018-09-17T10:21:56.747 回答
0

让我们关注在if本地宏的定义中不允许使用的限定符。这是对@Pearly Spencer 的好答案的补充,而不是替代它。

首先,命令的语法图local(例如help local让你到达那里)没有显示它是允许的。这几乎总是意味着它确实是被禁止的。(偶尔会有一些未记录的语法细节。)

if其次,更重要的是,这里没有限定词的理由。限定符允许根据观察的if子集获得不同的结果,但局部宏与数据集严格意义上无关。它们同样适用于所有观察或实际上不适用。

这一切都不能否认像您这样的程序员经常想要以其他条件定义本地宏,并且需要其他东西,例如if命令或cond().

于 2018-09-17T10:51:56.520 回答