使用if语句将值分配给局部变量

时间:2018-09-17 10:07:58

标签: if-statement stata stata-macros

我正在尝试为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中分配“自动”条件局部变量值?

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

2 个答案:

答案 0 :(得分: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

有关if命令和if限定词之间的区别,请参见this page

答案 1 :(得分:1)

让我们集中在本地宏的定义中不允许使用if限定词。这是对@Pearly Spencer很好回答的补充,而不是替代方法。

首先,local命令的语法图(例如help local使您到达那里)没有表明它是允许的。那几乎总是意味着它确实是被禁止的。 (有时,语法中有未记录的详细信息。)

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

没有一个否认像您这样的程序员经常想定义以其他条件为条件的局部宏,并且需要其他条件,例如if命令或cond()