导入名称中不同月份的文件
Importing files with different months in name
我有以下代码:
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
。有些有 August
或 May
。
如何在上面的脚本中加入解决方案?
想法是,如果未找到 September
,代码仍将是 运行。但是,它不是 September
,而是 August
,如果失败,则 May
。
假设以下文件存储在您的工作目录中:
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
请注意,所需正则表达式的复杂性取决于
您的工作目录中包含的文件名模式。
我有以下代码:
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
。有些有 August
或 May
。
如何在上面的脚本中加入解决方案?
想法是,如果未找到 September
,代码仍将是 运行。但是,它不是 September
,而是 August
,如果失败,则 May
。
假设以下文件存储在您的工作目录中:
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
请注意,所需正则表达式的复杂性取决于 您的工作目录中包含的文件名模式。