如何摆脱Stata循环中的扩展?

时间:2013-06-30 09:15:41

标签: loops csv stata

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

1 个答案:

答案 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的帮助。