我想将Stata forvalues
循环的结果保存到单个文件中。文件名的一个组成部分应该是在j
循环中分配给宏的值forvalues
。
显然,我的代码会导致始终使用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"
}
有人对此有答案吗?
答案 0 :(得分:1)
使用replace
save "/Users/carl/Desktop/STATA/Neustart/eventdates_`j'.dta",replace
已更新
cd "C:\Users\Vista\Desktop\Stataproject"
forvalues j=1/5 {
sysuse auto,clear
keep if rep78== `j'
save "auto_`j'.dta",replace
}
Stata中的自动数据示例。有关详细信息,请参阅Speaking Stata: How to face lists with fortitude
答案 1 :(得分:1)
在您的原始代码中,Stata在`j'
命令中看到forvalues
(而不是正确的j
),因此它在开始循环之前开始评估它。所以最终运行的是
forvalues 1995=1995/2012 {
这意味着forvalues
正在改变本地宏的内容,但在第一次迭代中合法地称为`1995'
到1995,在第二次迭代中是1996,等等。所以当你提到循环中的本地`j'
,它不会更改并保持在循环之前定义的原始值。
解决这个问题的方法是替换:
local j = 1995
forvalues `j' = 1995/2012 {
使用:
forvalues j = 1995/2012 {