【问题标题】:Importing files with different months in name导入名称不同月份的文件
【发布时间】:2018-02-20 22:36:56
【问题描述】:

我有以下代码:

local date "September"

global dir `c(pwd)'
global files "A B C" 

foreach x of global files { 
    import excel "${path}`x'_`date'.xlsx", sheet("1") cellrange(A3:O21) clear 
    generate Store="`x'"
    save `x', replace
}

问题是不是我所有的文件都有日期September。有些有AugustMay

如何在上述脚本中加入解决方案?

这个想法是,如果没有找到September,代码仍然会运行。但是,不是September,而是August,如果失败,则May

【问题讨论】:

    标签: regex stata stata-macros


    【解决方案1】:

    假设以下文件存储在您的工作目录中:

    A_September.xlsx
    B_August.xlsx
    C_May.xlsx
    

    您可以使用宏扩展函数dir和通配符来创建本地 宏files,它将包含一个合格文件的列表:

    local files : dir "`c(pwd)'" files "*_*.xlsx"                               
    
    foreach x of local files {
        display "`x'"
    }
    
    A_September.xlsx
    B_August.xlsx
    C_May.xlsx
    

    在 Stata 的命令提示符下键入 help extended_fcn 将为您提供 更多信息。

    现在假设在您的工作目录中有两个附加文件:

    ASeptember_34.xlsx
    C_May45.xlsx
    

    在这种情况下,文件将包含在列表中:

    local files : dir "`c(pwd)'" files "*_*.xlsx"                               
    
    foreach x of local files {
        display "`x'"
    }
    
    A_September.xlsx
    ASeptember_34.xlsx
    B_August.xlsx
    C_May.xlsx
    C_May45.xlsx
    

    为了在循环中忽略这些,您需要进一步过滤 使用正则表达式的文件名:

    local files : dir "`c(pwd)'" files "*_*.xlsx"                               
    
    foreach x of local files {
        if ustrregexm("`x'", "[A-Z]_([A-Z][a-z]+).xlsx") display "`x'"
    }
    
    A_September.xlsx
    B_August.xlsx
    C_May.xlsx
    

    请注意,所需正则表达式的复杂性取决于 工作目录中包含的文件名的模式。

    【讨论】:

      猜你喜欢
      • 2020-10-13
      • 1970-01-01
      • 1970-01-01
      • 2017-02-19
      • 2011-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多