Database 循环遍历数据集,保留某些变量,将输出保存到其他地方

Database 循环遍历数据集,保留某些变量,将输出保存到其他地方,database,loops,stata,Database,Loops,Stata,我正在进行我的第一个Stata项目,我有大约30个包含数百个变量的大型数据集。我想要一个循环,它遍历每一个变量,只保留我感兴趣的变量,并将简化后的表单数据集保存到其他地方。其他解决方案对我不起作用1。因为许多其他人想要覆盖他们的原始数据源:对我来说,保持原始数据集不被修改是至关重要的,我将输出保存到其他地方以供处理。2.我想我犯了一个语法错误,因为我是一个比较新的人 这是我到目前为止制作的作品 cd Y:\MAIA\Data\Data2014\ foreach file{ keep nopnl

我正在进行我的第一个Stata项目,我有大约30个包含数百个变量的大型数据集。我想要一个循环,它遍历每一个变量,只保留我感兴趣的变量,并将简化后的表单数据集保存到其他地方。其他解决方案对我不起作用1。因为许多其他人想要覆盖他们的原始数据源:对我来说,保持原始数据集不被修改是至关重要的,我将输出保存到其他地方以供处理。2.我想我犯了一个语法错误,因为我是一个比较新的人

这是我到目前为止制作的作品

cd Y:\MAIA\Data\Data2014\

foreach file{
keep nopnltNF NumMois ptwa Qu cvwp ctwpenwp
sort nopnltNF NumMois
save `file'.dta in Y:\MAIA\MyName\test_folder}
导致错误 无效语法
r(198)

这里有一种获取Stata文件列表并循环它们的方法

// get a list of all Stata files in directory
loc datasets : dir . files "*.dta"

// location for transformed files
loc newplace "tmp"

// loop over each dataset
foreach f of local datasets {
    di as result "Reading `f'"
    use "`f'", clear
    keep nopnltNF NumMois ptwa Qu cvwp ctwpenwp
    sort nopnltNF NumMois
    save "`newplace'/`f'"
}
但是,请注意,
append
已经可以处理多个数据集,并且有一个
keep
选项:

append using `datasets', keep(foo bar)

这将在内存中生成一个数据集。

foreach文件
不符合任何允许的语法模式。在中始终有一个
,或作为关键字的
。除此之外,在执行此操作之前,您是否读取了任何数据?@NickCox否,我打开了我的测试文件,但现在您提到了它,当然我需要做一些事情,以便循环一个接一个地打开我的所有数据集。我认为这应该照顾它,然而,它也给我“无效”作为输出。。。对于wd{use'file.中的每个文件保留nopnltf numois ptwa Qu cvwp ctwpenwp.排序nopnltf numois save'file.dta in Y:\MAIA\MyName\test_folder}循环没有坏处,但它只是一个文件上的循环,从
use wd
开始注意
save
命令错误。