问题描述
我有一个包含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
。