如何在stata中循环文件名

时间:2012-04-08 22:16:43

标签: stata

1)是否可以在stata中创建字符串向量? 2)如果是,那么是否可以遍历此向量中的元素,对每个元素执行命令?

要在stata中创建单个字符串,我知道你这样做:

    local x = "a string"

但我有大约200个我需要循环的数据文件,并且它们不方便用连续的后缀命名,如“_2000”“_ 2001”“_2002”等。实际上文件名没有押韵或理由,但是我确实有一个列表,我可以轻松剪切并粘贴到字符串向量中,然后逐个调用此向量的元素,就像在MATLAB中一样。

有没有办法在stata中这样做?

3 个答案:

答案 0 :(得分:6)

除了Keith的回答:您还可以使用

获取目录中的文件列表
    local myfilelist    : dir . files "*.dta"

或更一般地

    local theirfilelist : dir <directory name> files <file mask>

请参阅help extended_fcn

答案 1 :(得分:4)

当然 - 您只需使用典型的本地电话创建一个列表。如果你没有在整个事情上加上引号,你的列表可能会很长。

local mylist aaa bbb "cc c" dd ee ff 

然后你只需使用foreach

foreach filename of local mylist {
  use `"`filename'"'
}

使用双引号(`" "')是因为其中一个文件名由于空间而在其周围引用了引号。这比将foreach filename in `mylist' {放在第一行更快。

如果您想操纵列表,请参阅help macrolists

在stackoverflow上已经询问了相关问题&gt; 1次:

答案 2 :(得分:3)

许多人可能想要和我一样的两者结合。这是:

* Create a local containing the list of files. 
local myfilelist : dir "." files "*.dta"

* Or manually create the list by typing in the filenames.
local myfilelist "file1.dta" "file2.dta" "file3.dta"

* Then loop through them as you need.
foreach filename of local myfilelist {
  use "`filename'"
}

我希望有所帮助。请注意,本地/宏受67,784 characters的限制 - 当你有一个很长的文件列表或很长的文件名时,请注意这一点。