如何获取完整的子目录列表(包括子目录的子目录)?

2024-04-18

我有数千个城市文件夹(例如city1, city2等等,但实际上命名为NewYork, Boston, ETC。)。每个文件夹还包含两个子文件夹:land and 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'' 

无论如何,在目录中,我努力让它工作但没有成功。

I have 另一个帖子 https://stackoverflow.com/questions/34872508/how-to-tokenize-a-extended-macro-local-dir-in-stata/34875242?noredirect=1#comment57574055_34875242在这个项目上。


补充说明:

正如尼克所指出的,正是反斜杠造成了麻烦。然而,从这一点来看,我遇到了另一个问题。比如说,没有复杂的操作,我只想测试我的循环是否有效,所以我编写了以下代码片段:

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

虽然不能解决您实际遇到的任何问题,但更简单的方法可能是使用filelist,来自 SSC(ssc install filelist).

一个例子可能是:

. // list all files
. filelist, directory("D:\Datos\RFERRER\Desktop\example")
Number of files found = 5

. 
. // strange way of tagging directories ending in "\house"
. // change at will
. gen tag = substr(reverse(dirname),1,6) == "esuoh/"

. 
. order tag

. list

     +----------------------------------------------------------------------------------------------+
     | tag   dirname                                                     filename             fsize |
     |----------------------------------------------------------------------------------------------|
  1. |   0   D:\Datos\RFERRER\Desktop\example/proj_1                     newfile.txt              0 |
  2. |   1   D:\Datos\RFERRER\Desktop\example/proj_2/house               somefile.txt             0 |
  3. |   0   D:\Datos\RFERRER\Desktop\example/proj_3/subproj_3_2         newfile2.txt             0 |
  4. |   1   D:\Datos\RFERRER\Desktop\example/proj_3/subproj_3_2/house   anothernewfile.txt       0 |
  5. |   1   D:\Datos\RFERRER\Desktop\example/proj_3/subproj_3_2/house   someotherfile.txt        0 |
     +----------------------------------------------------------------------------------------------+

然后,使用keep or drop,以变量为条件tag.

从图形上看,该目录如下所示:

(我使用的是 Stata 13。检查help string functions了解其他标记方式。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取完整的子目录列表(包括子目录的子目录)? 的相关文章

  • 如何在R中的关键字前添加逗号?

    我目前有一个城市的数据框 向量 其末尾有以以下任何一个开头的单词 Util Municipal Police Water 或末尾有 如何前往 Col City of Fake Municipal Court City of Pretend
  • 将字符串拆分为长数据帧格式的值[重复]

    这个问题在这里已经有答案了 我有一个类似于以下示例的数据框df它由一个字符变量组成VAR df lt data frame ID 1 2 VAR c VAL1 r nVAL2 r nVAL8 VAL2 r nVAL5 stringsAsFa
  • 使用Python匹配Stata加权xtile命令的最终方法?

    对于一个项目 我需要复制 Stata 输出文件 dta 中当前存在的一些结果 这些结果是根据较旧的 Stata 脚本计算得出的 新版本的项目需要用Python编写 我遇到困难的具体部分是根据 Stata 的加权版本匹配分位数断点计算xtil
  • 如何在R中移动矩阵的每一行

    我有一个这种形式的矩阵 a b c d e 0 f 0 0 我想把它改成这样 a b c 0 d e 0 0 f 换档模式是这样的 shift by 0 for row 1 shift by 1 for row 2 shift by 2 f
  • 按顺序用数值替换因子变量

    我有这个数据集 col 1 as factor c a a b c b a col 2 c 15 346 3564 99 10 2 col 3 as factor c bb a g f bb a index 1 6 sample data
  • 在Stata中,如何组合不同宽度的箱线图?

    我正在尝试组合不同大小类别的多个箱线图 这是说明问题的示例 sysuse auto graph box mpg by rep78 rows 1 name g1 replace graph box mpg by foreign rows 1
  • 根据当月操作上月数据

    我有一个名为 Prv Data 的表 其中包含上个月的报告 具有 Report Id 和 Timeline 列 Prv Data gt Report ID Timeline 01 Weekly Mon 01 Weekly Mon 01 We
  • R:基于“OR”语句的连接

    我正在使用 R 编程语言 假设我有以下两个表 table 1 data frame id c 123 123 125 125 id2 c 11 12 14 13 date 1 c 2010 01 31 2010 01 31 2015 01
  • 熊猫由长到宽的重塑,通过两个变量

    我有长格式的数据 并且正在尝试将其重塑为宽格式 但似乎没有一种简单的方法可以使用熔化 堆叠 取消堆叠来执行此操作 Salesman Height product price Knut 6 bat 5 Knut 6 ball 1 Knut 6
  • 循环嵌套循环(在 R 或 Stata 中)

    我有一个 60 维的嵌套循环 即我将 60 个循环相互嵌套 在 Stata 中 MWE 如下所示 forvalues i 1 60 forvalues j 1 60 forvalues k 1 60 forvalues l 1 60 ima
  • R 中邻居的空间数据/计算指标

    我有 xBin yBin value 形式的二维空间数据 例如 DT data table x c rep 1 3 rep 2 3 rep 3 3 y rep c 1 2 3 3 value 100 c 1 9 对于每个垃圾箱 我想计算所有
  • 从 r 中的另一个数据帧查找值

    我有一个名为的大数据框df以及一些身份证件 我有另一个数据框 id list 以及一组匹配的 ID 及其每个 ID 的关联特征 两个数据帧中的 ID 均未按顺序排序 实际上我想从更大的数据框中查找df to the id list并添加两列
  • 在双边案例交叉设计中创建控制日期

    我计划研究空气污染对急诊室就诊的影响 并打算使用双边病例交叉设计 对于每个病例 医院就诊 我想创建 4 个控制日期 就诊前后 7 天和 14 天 例如 如果一个人于 2012 年 9 月 10 日访问诊所 我的控制日期将为 8 月 27 日
  • 用 Latex 代码替换字符串向量中的重音符号

    Define df lt data frame name c M xico Michoac n dat c 1 2 s t gt df name dat 1 M xico 1 2 Michoac n 2 当我将此表打印到 tex文件使用xt
  • Stata 的替代 IDE [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 I am used to R studio for R which has some features
  • 在 Stata 的 do-file 中将命令分成几行

    我想运行keepStata 12 中 do 文件中的命令 keep a1 a2 a3 a4 a5 b1 b2 b3 b4 b5 c1 c2 c3 c4 我想要的是执行以下操作 keep a1 a2 a3 a4 a5 b1 b2 b3 b4
  • 根据列表从表中选择行

    我有这张表 col1 lt c 1 2 3 4 5 col1 lt sample col1 1000 replace TRUE prob c 0 2 0 2 0 2 0 2 0 2 col2 lt c 6 7 8 col2 lt sampl
  • 将外语从csv文件导入到Stata

    我正在使用Stata 12 我遇到了以下问题 我正在使用以下命令将一堆 csv 文件导入到 Statainsheet命令 数据集可能包括俄语 克罗地亚语 土耳其语等 我认为它们是用 UTF 8 编码的 在 csv 文件中 它们是正确的 我把
  • 如何获取完整的子目录列表(包括子目录的子目录)?

    我有数千个城市文件夹 例如city1 city2等等 但实际上命名为NewYork Boston ETC 每个文件夹还包含两个子文件夹 land and house 所以目录结构是这样的 current dictionary city1 h
  • 使用条件语句生成新变量

    给定以下数据集和命令 sysuse auto clear generate x replace x 5 if price 4099 replace x 5 if price 4749 我想生成一个新变量x等于5 if price属于值列表

随机推荐