2012-04-08 7 views
2

1) Можно ли создать вектор строк в stata? 2) Если да, то можно ли зацикливать элементы этого вектора, выполняя команды для каждого элемента?как мне перебирать имена файлов в stata

Для создания одной строки в Stata Я знаю, что вы делаете это:

local x = "a string" 

Но у меня есть около 200 файлов данных мне нужно проходной, и они не удобно с последовательными суффиксами, как «_2000» «_2001» «_2002» и т. Д. На самом деле нет никаких рифм или причин для имен файлов, но у меня есть список из них, который я мог бы легко вырезать и вставить в вектор строки, а затем вызвать элементы этого вектора один одним, как можно было бы сделать в MATLAB.

Есть ли способ сделать это в stata?

ответ

4

Уверенный - вы просто создаете список, используя типичный локальный вызов. Если вы не ставите кавычки вокруг всего, ваши списки могут быть очень длинными.

local mylist aaa bbb "cc c" dd ee ff 

Тогда вы просто использовать foreach.

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

двойные кавычки (`" "') используются потому, что один из имен файлов имеют кавычки вокруг него из-за пространство. Это прикосновение быстрее, чем установка foreach filename in `mylist' { на первой строке.

Если вы хотите управлять своим списком, см. help macrolists.

Похожие вопросы были заданы> 1 раз на StackOverflow:

+0

Это не будет работать, если у вас есть «локальный список» aa «bbb» cc c «dd ee» ff », например, потому что внешние кавычки будут удалены: http://www.stata.com/ statalist/archive/2012-10/msg00285.html – katriel

5

На вершине ответ Кейта: вы также можете получить список файлов в директории с

local myfilelist : dir . files "*.dta" 

или в целом

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

См. help extended_fcn.

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'" 
} 

Надеюсь, что это поможет. Обратите внимание, что locals/macros ограничены 67,784 characters - обратите внимание на это, когда у вас действительно длинный список файлов или действительно длинные имена файлов.

+0

Информация о максимальной длине макроса очень устарела, если только ваш Stata не устарел. Проконсультируйтесь с лимитами помощи в своем Stata для того, что применимо к вам. –

Смежные вопросы