2013-06-30 24 views
3

我使用Stata来分析来自.csv文件的数据。我写了一个循环遍历目录中的所有文件,以便我可以一劳永逸。那就是:如何摆脱Stata循环中的扩展?

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

回答

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

+0

非常感谢您的帮助!这种方法要容易得多。我现在正在阅读扩展的帮助,并正在解决如何解决我的问题。另外,作为一名一直在使用Stata的学生,我想感谢您在无意中通过您和Statalist的帮助解决了我的问题。你的答案总是非常感激。 – jre11

+0

不客气。 –