Stata循环文件名

时间:2015-04-05 01:07:30

标签: stata

我正在尝试遍历文件名t3t6t9t12以更改变量名称。现在我有

foreach wave in 3 6 9 12 {;

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

    rename tcarval1 tcarval1`wave';

};

但Stata说

  

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

是否有理由不从循环中获取数字?

由于

2 个答案:

答案 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'
}