导入名称不同月份的文件

Sta*_*red 4 regex stata stata-macros

我有以下代码:

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
}
Run Code Online (Sandbox Code Playgroud)

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

如何在上面的脚本中纳入解决方案?

这个想法是,如果September找不到,代码仍将运行。但是,如果它失败了,那就代替September它。AugustMay

Pea*_*cer 10

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

A_September.xlsx
B_August.xlsx
C_May.xlsx
Run Code Online (Sandbox Code Playgroud)

您可以使用宏扩展功能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
Run Code Online (Sandbox Code Playgroud)

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

现在假设您的工作目录中还有两个其他文件:

ASeptember_34.xlsx
C_May45.xlsx
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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