我正在使用 Stata 分析来自 .csv
文件的数据。我写了一个循环来遍历目录中的所有文件,这样我就可以一劳永逸地 insheet
它们。在这里:
cd "C:\Users\Monica\Documents\Tweet Archivist\csv2806"
! dir *.csv /a-d /b > filelist.txt
* Looping through the filelist to transform all of them in .dta files
file open trial4 using "C:\Users\Monica\Documents\Tweet Archivist\csv2806\filelist.txt", read
file read trial4 line
while r(eof)==0 {
cd "C:\Users\Monica\Documents\Tweet Archivist\csv2806"
insheet using `line', tab
save `line'.dta, replace
drop _all
file read trial4 line
}
file close trial4
我的问题是:当我使用这种方法时,.csv
文件扩展名被合并到 Stata 的文件名中,因此我有 file1.csv.dta
。有什么办法可以防止这种情况发生吗?我知道这可能看起来是一个微不足道的问题,甚至是一个相当无聊的问题,因为我可能只是打开文件并手动删除 .csv
,但我想知道是否有办法在状态。我在 DOS 中尝试了 rename
命令,但这消除了扩展名,然后 Stata 无法将文件识别为 .csv
。
最佳答案
您想要的只是在 help extended_fcn
中记录的一些宏操作。
同时,我想推荐一种更简单的方法,即使用 Stata 获取文件列表。 (在您的代码中明确表示您使用的是 Windows,但这里的方法是跨平台的。)这里是:
cd "C:\Users\Monica\Documents\Tweet Archivist\csv2806"
fs *.csv
foreach f in `r(files)' {
insheet using `f', tab clear
local F : subinstr local f ".csv" ""
save `F'.dta, replace
}
此处用户编写的命令 fs
是 Stata 工具的便捷包装器,用于从操作系统获取文件名。使用 ssc install fs
进行安装。
fs
调用可能更复杂,包括两个或多个通配 rune 件规范。有关详细信息,请参阅 fs
的帮助。
关于loops - 如何摆脱 Stata 循环中的扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17388874/