Stata批量导入Excel时扩展名残留,保存为xxx.xls.dta问题求助
问题分析:Stata保存文件为xxx.xls.dta而非xxx.dta的原因与解决办法
我来帮你拆解这个问题,其实核心原因很明确,咱们一步步理清楚:
为什么会生成xxx.xls.dta?
- 你的
local acquacost变量通过dir命令获取的是带完整.xls后缀的文件名(比如sample.xls)。 - 当你在循环中直接对
f变量追加.dta后缀时(比如save "f'.dta"),Stata会直接拼接两个后缀,最终就变成了sample.xls.dta`。 - 本质是没有剥离原始文件名的扩展名,导致重复添加后缀。
解决方法:剥离原始文件名的扩展名
这里给你三种实用的处理方式,按需选择:
方法1:用subinstr直接替换.xls后缀
适合确定所有文件都是.xls格式的场景,直接把文件名里的.xls替换为空:
clear all cd "C:\Users\User\Documents\PhD\Research\Data\acqua_costiera" global RawAcqua "C:\Users\User\Documents\PhD\Research\Data\acqua_costiera" local acquacost : dir "C:\Users\User\Documents\PhD\Research\Data\acqua_costiera" files "*.xls", respectcase foreach f of local acquacost { import excel using "$RawAcqua\\`f'", cellrange(B4:N43310) firstrow clear // 剥离.xls后缀 local fname = subinstr("`f'", ".xls", "", .) save "$RawAcqua\\`fname'.dta", replace }
方法2:用split拆分文件名与扩展名
如果文件名里只有一个.(也就是没有带点的文件名),可以用split命令分割后取主文件名:
foreach f of local acquacost { import excel using "$RawAcqua\\`f'", cellrange(B4:N43310) firstrow clear // 按`.`拆分文件名 local parts : split "`f'", parse(.) local fname "`parts1'" save "$RawAcqua\\`fname'.dta", replace }
方法3:正则表达式处理(兼容多种扩展名)
如果以后可能处理.xlsx或其他格式,用正则表达式剥离最后一个.之后的所有内容更通用:
foreach f of local acquacost { import excel using "$RawAcqua\\`f'", cellrange(B4:N43310) firstrow clear // 用正则剥离扩展名 local fname = regexr("`f'", "\.[^.]*$", "") save "$RawAcqua\\`fname'.dta", replace }
内容的提问来源于stack exchange,提问作者Fabio I.
相关产品推荐
相关产品推荐

