在循环中单独使用全局变量时的不同结果

时间:2018-04-24 06:49:25

标签: stata

我使用循环显示我存储在不同宏x0x1x2等的某些结果。

当我通过循环显示这些宏时,如果我要手动显示它们,我会得到不同的结果。

循环播放:

forval j =1/30  {
  dis $x`j'
}

输出:

50001
50002
.
.

独立:

dis $x1

输出:

200 

(这是正确的值)

我还尝试将j声明为全局,然后dis $x1$j,它会给我与循环相同的结果。

为什么会这样,我如何在循环中解决这个问题?

1 个答案:

答案 0 :(得分:2)

使用循环与否与您的问题无关。您想要嵌套评估,但要求进行连续评估。

请考虑以下示例:

. global x = 42

. global x1 = 666

. local i = 1

. di "$x`i'"
421

. di "${x`i'}"
666

第一个display显示首先评估全局x然后评估本地i的结果。结果是42紧跟1

第二个display显示首次评估的结果

 x`i' 

获取名称x1,然后评估

$x1 

让全球有问题。要强制嵌套评估,您需要使用大括号{}告诉Stata不要使用默认的连续评估。

https://www.stata.com/manuals/u18.pdf中记录于18.3.10没有萌芽的Stata程序员不能一次又一次地阅读本章。