文件名上的Stata循环

文件名上的Stata循环,stata,Stata,我试图在文件名t3、t6、t9和t12上循环以更改变量名。现在我有 foreach wave in 3 6 9 12 {; use ~/Desktop/Replication/t`wave'; rename tcarval1 tcarval1`wave'; }; 但是斯塔塔说 找不到文件/Users/abc/Desktop/Replication/t.dta 它没有从循环中提取号码有什么原因吗 谢谢您正在逐行运行代码吗? 我无法重现您的错误,但这很好: foreach w

我试图在文件名
t3
t6
t9
t12
上循环以更改变量名。现在我有

foreach wave in 3 6 9 12 {;

    use ~/Desktop/Replication/t`wave';

    rename tcarval1 tcarval1`wave';

};
但是斯塔塔说

找不到文件/Users/abc/Desktop/Replication/t.dta

它没有从循环中提取号码有什么原因吗


谢谢

您正在逐行运行代码吗?

我无法重现您的错误,但这很好:

foreach wave in 3 6 9 12 {
    display "~/Desktop/Replication/t`wave'"
}
这也将运行:

#delimit ;
foreach wave in 3 6 9 12 { ;
    display "~/Desktop/Replication/t`wave'" ;
} ;
#delimit cr
请参阅提供最少、完整和可验证的示例

编辑(离题) 我知道
#定界但我从未使用过它,这就是恶意建议(被@William Lisowski质疑)最初出现(不再出现)的原因

运行此:

#delimit ;
foreach wave in 3 6 9 12 { 
    display "~/Desktop/Replication/t`wave'" 
} 
#delimit cr
什么也不输出。斯塔塔读了整件事,但从未达到预期的分隔符
,然后退出

以下

#delimit ;
foreach wave in 3 6 9 12 { 
    display "~/Desktop/Replication/t`wave'" 
} 
;
#delimit cr
给予

程序错误:代码与大括号位于同一行

r(198)

当我们不使用
#定界时,这或多或少等同于以下内容:

foreach wave in 3 6 9 12 { display "~/Desktop/Replication/t`wave'" }
这是违法的

类似的情况也发生在

#delimit ;
foreach wave in 3 6 9 12 { 
    display "~/Desktop/Replication/t`wave'" ;
} 
#delimit cr
下面也给出了一个错误

#delimit ;
foreach wave in 3 6 9 12 { ;
    display "~/Desktop/Replication/t`wave'" 
} 
#delimit cr
尽管不同:

意外的文件结尾

r(612)

现在相当于

foreach wave in 3 6 9 12 {
,Stata知道的所有代码都不完整。斯塔塔在打开支架后期待着什么,但从未看到过。它抱怨道

总之,Stata将三行中的每一行视为不同的“命令”,并要求
待在现场。但是第一行很特别,因为
{
后面必须跟一些东西,至少是一个结尾
}
试着这样做:

cd "~/Desktop/Replication"

foreach wave in 3 6 9 12 {
    use t`wave'.dta
    rename tcarval1 tcarval1`wave'
}

有可能是
是由于使用了
#delim在他的do文件中,因为没有它,
foreach…{;
会引发错误消息。如果我包含
#delim;
我可以像他一样运行代码而不会出错。我可以像他一样一次运行一行代码而不会出错。你只能以交互方式逐行运行它(没有
#delim;
).do文件中的.Line逐行将失败,除非.With
#diffline;
在.do文件中运行整个代码时执行良好。总之,重点必须放在原始海报中,提供了一个可复制的示例。我的评论是回应您的建议,即他将
从m你的答案。我认为没有理由这么做。我同意他的例子不会在你的系统或我的系统上重现,省略
#delim;
是不完整的。也许是其他遗漏的东西导致了问题,所以他应该从小处做起,扩大到产生失败的东西。的确@William,这只会导致混乱锡安和我把它删除了。谢谢。