文件名上的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,这只会导致混乱锡安和我把它删除了。谢谢。