使用循环将多个.csv文件转换为.dta

问题描述

我有一个包含18个.csv文件的目录。我想在清除数据并附加所有数据之前将它们全部转换为.dta。这是我到目前为止的代码:

cd "/Volumes/Extreme SSD/secure/TQIP/2007/PUF AY 2007/CSV"
mkdir "stata"
clear
local myfilelist : dir . files"*.csv"

foreach file of local myfilelist {
    drop _all
    insheet using "`file'",comma
    local outfile = subinstr("`file'",".csv","",.)
    save "`outfile'",replace
}

我想将所有新的.dta文件保存到第二行中创建的单独的子目录“ stata”中。关于如何融入循环的任何想法?

解决方法

使用本地跟踪主文件夹。然后在每个读取/保存操作中使用本地方法处理绝对文件路径。如果您从事多个项目,我团队的经验cd容易出错,因此应避免使用。见下文:

local csv_directory "/Volumes/Extreme SSD/secure/TQIP/2007/PUF AY 2007/CSV"
mkdir "`csv_directory'/stata"
clear
local myfilelist : "`csv_directory'" files "*.csv"

foreach file of local myfilelist {
    insheet using "`csv_directory'/`file'",comma clear
    local outfile = subinstr("`file'",".csv","",.)
    save "`csv_directory'/stata/`outfile'",replace
}

此外,如果您要做的就是允许Stata用新数据替换内存中的数据,请使用insheet,clear而不是drop _all

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...