3

我正在使用 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.

4

1 回答 1

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

于 2013-06-30T11:23:30.907 回答