我想将 Stata forvalues
循环的结果保存到单独的文件中。文件名的一个组成部分应该是在 forvalues
循环中分配给宏的值 j
。
显然我的代码导致一条指令始终以1995
保存。因此,我收到消息告诉我该文件已经存在。
我正在使用以下代码:
local j = 1995
forvalues `j'= 1995 / 2012 {
clear
use "/Users/carl/Desktop/STATA/Neustart/eventdates.dta", clear
keep if eventyear == `j'
sort acq_cusip eventdate
compress
save "/Users/carl/Desktop/STATA/Neustart/eventdates_`j'.dta"
}
有人能回答这个问题吗?
最佳答案
在您的原始代码中,Stata 在 forvalues
命令中看到 `j'
(而不是正确的 j
),因此它开始计算在开始循环之前。所以最终运行的是
forvalues 1995=1995/2012 {
这意味着 forvalues
正在将本地宏的内容混淆地更改为“1995”
,在第一次迭代中为 1995,在第二次迭代中为 1996,等等.因此,当您在循环内引用本地`j'
时,它不会改变并保持在循环之前定义的原始值。
解决这个问题的方法是替换:
local j = 1995
forvalues `j' = 1995/2012 {
与:
forvalues j = 1995/2012 {
关于loops - 如何使用宏操作文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17618041/