Stata合并目录下含GTAH的.dta文件报错求助
Stata合并含特定字符的.dta文件报错解决
问题场景
要合并目录中所有文件名包含“GTAH”字符串的.dta数据文件,通过生成目标文件列表保存为txt,再循环读取列表进行合并时,出现报错:file 'line' not found r(601)。
错误原因
循环中的append using 'line'使用了单引号,Stata中引用宏变量需要用**反引号()**,单引号会被Stata直接识别为文件名的一部分,而非解析宏变量line`的值,因此找不到对应文件。
修正后的完整代码
** 设置工作目录 cd "C:\Data" ** 列出目录中所有含GTAH的.dta文件 dir *GTAH*.dta ** 生成文件列表并保存为GTAH_List.txt ! dir *GTAH*.dta /a-d /b >C:\Data\GTAH_List.txt ** 打开文件列表并读取第一行 file open myfile using "C:\Data\GTAH_List.txt", read file read myfile line ** 将第一个文件保存为主数据集,读取下一行 use `line' save GTAH_master_data, replace file read myfile line ** 循环追加剩余数据集,直到文件结束 while r(eof)==0 { append using `line' // 此处将单引号改为反引号 file read myfile line } ** 关闭文件(原代码遗漏,建议添加) file close myfile
更简化的实现方案(无需生成txt文件)
直接用Stata本地宏获取文件列表,无需额外生成txt,代码更简洁:
cd "C:\Data" ** 获取所有含GTAH的.dta文件列表到本地宏 local files : dir . files "*GTAH*.dta" ** 提取第一个文件作为主数据集 tokenize `files' use `1', clear ** 循环追加剩余文件 forvalues i=2/`: word count `files'' { append using ``i'' } ** 保存合并后的数据集 save GTAH_master_data, replace
内容的提问来源于stack exchange,提问作者Ekow_ababio
相关产品推荐
相关产品推荐

