我正在尝试遍历文件名t3
,t6
,t9
和t12
以更改变量名称。现在我有
foreach wave in 3 6 9 12 {;
use ~/Desktop/Replication/t`wave';
rename tcarval1 tcarval1`wave';
};
但Stata说
文件/Users/abc/Desktop/Replication/t.dta未找到
是否有理由不从循环中获取数字?
由于
答案 0 :(得分:1)
您是否逐行运行代码?
我无法重现您的错误,但这很好用:
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
请参阅https://stackoverflow.com/help/mcve,提供最简单,完整且可验证的示例。
我知道# delimit ;
但是我从来没有使用它,这就是恶意建议(由@William Lisowski提出质疑)最初出现的问题(不再存在)。
运行此:
#delimit ;
foreach wave in 3 6 9 12 {
display "~/Desktop/Replication/t`wave'"
}
#delimit cr
什么都不输出。 Stata读完了所有内容,从未达到预期的分隔符;
,并退出。
以下
#delimit ;
foreach wave in 3 6 9 12 {
display "~/Desktop/Replication/t`wave'"
}
;
#delimit cr
给出
当不使用程序错误:代码跟开括号
在同一行R(198);
#delimit ;
时或多或少等同于以下内容:
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期望在开放式支撑后有所作为,但从未看到它。它抱怨道。
总结一下,Stata将这三行中的每一行视为不同的“命令”,并且需要;
存在。但第一行是特殊的,因为{
必须跟着某个东西,至少是一个结束}
。
答案 1 :(得分:-1)
尝试这样做:
cd "~/Desktop/Replication"
foreach wave in 3 6 9 12 {
use t`wave'.dta
rename tcarval1 tcarval1`wave'
}