如何使用宏操作文件名

时间:2013-07-12 15:03:34

标签: loops filenames stata stata-macros

我想将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"  
}

有人对此有答案吗?

2 个答案:

答案 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 {