循环访问目录中的多个文件

时间:2015-10-11 05:03:17

标签: loops directory stata

我有一个包含31个文件的目录,我必须在其中创建一些变量,然后加入它们。我正在尝试循环,但我不能。有人能帮助我吗?

cd "my dir"
local allfiles: dir "my dir" files "*.dta"
clear

foreach f in `allfiles' {

  use `f'
  egen string_id = concat(ido idd)
  sort string_id
   by string_id: gen first = _n==1

gen id = sum(first)
drop first

sort year id
 by year id: egen Value=sum(value)
  by year id: egen Quantity=sum(quantity)

save `mydata', replace
 append using `mydata' 
}

1 个答案:

答案 0 :(得分:1)

您的报告

  

我正在尝试循环,但我不能

不是很有用。

请记住指出您面临的确切问题,即您获得的内容,您的期望,以及不明显的原因,以及它们为何不同。

下面是工作代码,假设您在示例目录中有两个内置自动数据集(使用sysuse auto加载它)的副本。

clear
set more off

// example directory with auto1.dta and auto2.dta
cd "/home/roberto/Desktop/stata_tests/"
local allfiles: dir "`c(pwd)'" files "*.dta"

// create empty dataset to initiate appending
tempfile mydata
save "`mydata'", emptyok

foreach f in `allfiles' {

    // load data and do whatever
    use "`f'", clear
    gen source = "`f'"

    // append first, then save
    append using "`mydata'"
    save "`mydata'", replace
}

// check
keep make source
sort make source
list in 1/16, sepby(make)

输出:

. list in 1/16, sepby(make)

     +---------------------------+
     | make               source |
     |---------------------------|
  1. | AMC Concord     auto1.dta |
  2. | AMC Concord     auto2.dta |
     |---------------------------|
  3. | AMC Pacer       auto1.dta |
  4. | AMC Pacer       auto2.dta |
     |---------------------------|
  5. | AMC Spirit      auto1.dta |
  6. | AMC Spirit      auto2.dta |
     |---------------------------|
  7. | Audi 5000       auto1.dta |
  8. | Audi 5000       auto2.dta |
     |---------------------------|
  9. | Audi Fox        auto1.dta |
 10. | Audi Fox        auto2.dta |
     |---------------------------|
 11. | BMW 320i        auto1.dta |
 12. | BMW 320i        auto2.dta |
     |---------------------------|
 13. | Buick Century   auto1.dta |
 14. | Buick Century   auto2.dta |
     |---------------------------|
 15. | Buick Electra   auto1.dta |
 16. | Buick Electra   auto2.dta |
     +---------------------------+

另请参阅ssc describe fsssc describe filelist