问题描述
我对Stata来说还很陌生,刚刚开始学习。 我有一个.do文件,其中包含我尝试理解的代码。我不确定下面的代码块到底在做什么。
set obs 150
generate x = 5+int((10-5+1)*runiform())
count
local bigN = r(N)
generate y = x / `bigN'
我是正确的假设
-
在创建150个观测值之后,将创建一个变量
x
,其中包含150个观测值中每个观测值的随机数。 -
然后,一个
local
用于将变量bigN中的观测值(150)存储为一个数字。 -
最后,将创建一个新变量
y
,该变量的每个x
值除以bigN
中存储的观测值数量(意味着y
的值因为第一个观察值是x
的第一个值除以150,依此类推。
我理解正确吗?如果是,为什么使用local
而不使用generate
?看来local
仅在完全使用.do文件时有效。
解决方法
是的,这实际上就是它的作用。
局部变量不是常规的Stata变量。它是一个临时对象,仅在一次代码执行中可用。假设您运行以下两行代码。
local i = 5
disp `i'
当您共同运行它们时,它会打印:
. local i = 5
. disp `i'
5
分别运行它们会打印:
. local i = 5
.
. disp `i'
分别运行两行不会打印5,因为Stata仅在一次执行中保存本地。与局部变量相比,全局变量可通过单独的代码执行访问。