2

我想将我的 Stataforvalues循环的结果保存到单个文件中。文件名的一个组成部分应该是在循环中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"  
}

有人对此有答案吗?

4

2 回答 2

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:如何用刚毅的态度面对名单

于 2013-07-12T15:15:21.557 回答
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 {
于 2013-07-12T15:26:15.393 回答