【问题标题】:How to get rid of the extensions in Stata loop?如何摆脱Stata循环中的扩展?
【发布时间】:2013-06-30 09:15:40
【问题描述】:

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

【问题讨论】:

    标签: loops csv stata


    【解决方案1】:

    您想要的只是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 的帮助。

    【讨论】:

    • 非常感谢您的帮助!这种方法要容易得多。我现在正在阅读扩展帮助并研究如何解决我的问题。另外,作为一名已经使用 Stata 的学生,我要感谢您一直以来在您在这里和 Statalist 的帮助下不知不觉地解决了我的问题。非常感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多