我有数千个城市文件夹(例如city1
,city2
等,但实际上命名为NewYork
,Boston
等)。每个文件夹还包含两个子文件夹:land
和house
.
所以目录结构是这样的:
current dictionary
---- city1
----- house
------ many .xlsx files
----- land
----- city2
----- city3
···
----- city1000
我想获取所有子目录的完整列表并进行一些操作(例如import excel
)。我知道有一个宏扩展函数:local list: dir
来处理这个问题,但它似乎只能返回first tier
子目录,比如city_i
,而不是那些更深的。
更具体地说,如果我想在所有内部文件夹中采取行动,我需要什么样的工作流程?
我已经初步尝试编写代码来实现我的目标:
cd G:\Data_backup\Soufang_data
local folder: dir . dirs "*"
foreach i of local folder {
local `i'_house : dir "G:\Data_backup\Soufang_data\``i''\house" files "*.xlsx"
local count = 1
foreach j of local `i'_house {
cap import excel "`j'",clear
cap sxpose,clear
cap drop in 1/1
if `count'==1 {
save `i'.dta, replace
}
else {
cap qui append using `i'
save `i'.dta,replace
}
local ++count
}
}
有问题:
``i''
无论如何,在目录中,我努力让它工作但没有成功。
我有另一个关于这个项目的帖子。
补充说明:
正如尼克指出的那样,引起麻烦的是反斜杠。然而,从那一点开始,我遇到了另一个问题。说,没有复杂的动作,我只想测试我的循环是否有效,所以我编写了以下代码片段:
set more off
cd G:\Data_backup\Soufang_data
local folder: dir . dirs "*"
foreach i of local folder {
di "`i'"
local `i'_house : dir "G:\Data_backup\Soufang_data/`i'\house" files "*.xlsx"
foreach j of local `i'_house {
di "`j'"
}
}
然而,屏幕上的结果是这样的:
city1
project100
project99
······
project1
似乎代码只在第一个城市上循环了一轮,但未能到达city2
,city3
依此类推。我怀疑这是由于我在当地的写作有问题,尤其是在这一行,但我不确定:
foreach j of local `i'_house