Stata 和全局变量

Stata and global variables

我正在使用 Stata。 我有一个名为 graduate_secondary 的变量。 我生成了一个名为 outcome 的全局变量,因为最终我将使用另一个结果。 现在,如果满足与全局相关的条件,我想替换变量 graduate,但出现错误:

我的代码是:

global outcome "graduate_secondary"

gen graduate=.

replace graduate=1 if graduate_primary==1 & `outcome'==1

但我收到符号 ==1 无效名称。 有谁知道为什么?

按照这些思路可能会起作用(使用可重现的示例):

sysuse auto, clear        
global outcome "rep78"

gen graduate=.

replace graduate=1 if mpg==22 & $outcome==3
(2 real changes made)

在您的示例中,只需使用

replace graduate=1 if graduate_primary==1 & $outcome==1  

会起作用。

另一种解决方案是将global outcome "graduate_secondary"替换为local outcome "graduate_secondary"

Stata 有两种类型的宏:全局的,使用 $ 访问,本地的,使用名称周围的单引号 `' 访问 - 就像您在原始代码中所做的那样。

您收到一条错误消息,因为在您的工作区中没有为名为 outcome 的本地文件分配任何值。按照设计,这本身不会产生错误,而是对宏的引用将评估为空值。当您使用 display 键入它们时,您可以看到评估宏引用的结果,如下所示。您还可以使用 macro dir 查看工作区中的所有宏(局部变量以下划线开头):

display `outcome'
display $outcome

Here 是一篇关于在 Stata 中使用宏的博客 post。通常,我只在必须在多个例程之间传递某些内容时才使用全局宏,但这对于本地人来说似乎是一个很好的用例。