我使用循环显示我存储在不同宏x0
,x1
,x2
等的某些结果。
当我通过循环显示这些宏时,如果我要手动显示它们,我会得到不同的结果。
循环播放:
forval j =1/30 {
dis $x`j'
}
输出:
50001
50002
.
.
独立:
dis $x1
输出:
200
(这是正确的值)
我还尝试将j
声明为全局,然后dis $x1$j
,它会给我与循环相同的结果。
为什么会这样,我如何在循环中解决这个问题?
答案 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程序员不能一次又一次地阅读本章。