loops - 如何使用宏操作文件名

标签 loops filenames stata stata-macros

我想将 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/

相关文章:

java - 使用循环计算阶乘数,Java

c - do-while 循环不遵守真值分配 (C)

string - 如何显示字符串中的每个单词?

r - rHipe mapreduce获取正在处理的文件名

java - java中删除部分文件名

windows - 冒号/星号作为文件名分隔符?

具有多个固定效应的回归的 R 平方

stata - 如何导出表格

php - 停止 MySQL 重新计算以前的行

string - 在 Stata 中使用循环将字符串变量成对加入两个