我正在使用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
,但我想知道是否有办法在Stata中完成所有操作。我在DOS中尝试了rename
命令,但这消除了扩展,然后Stata无法将文件识别为.csv
。
答案 0 :(得分:6)
你想要的只是在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
调用可能更复杂,包括两个或更多通配文件规范。有关详细信息,请参阅fs
的帮助。