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。通常,我只在必须在多个例程之间传递某些内容时才使用全局宏,但这对于本地人来说似乎是一个很好的用例。
我正在使用 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。通常,我只在必须在多个例程之间传递某些内容时才使用全局宏,但这对于本地人来说似乎是一个很好的用例。