在foreach命令中添加第二个变量 - Stata

时间:2016-02-27 05:05:07

标签: foreach stata

我有这样的数据集:

C:\temp\SalesFigures FY13.dta
C:\temp\SalesFigures FY14.dta
C:\temp\SalesFigures FY15.dta
etc. 

每个文件包含来自50个州的销售数据。我经常需要为这些文件中的某些状态运行一段代码。我在名为StatesToRun.dta的文件(例如,AK,CA,WA)中指定这些状态,并使用foreach命令循环遍历每个状态。我还使用宏来指定我想要使用的FY .dta文件。

例如:

* Specify file to run. 
local FY "FY14"

* Run code only for the states I list in StatesToRun.dta.
use "C:/temp/StatesToRun.dta", clear
levelsof state, local(statelist)

foreach MyState of local statelist 

{

use "C:/temp/SalesFigures 'FY'.dta", clear
keep if state == `"`MyState'"' 
* etc. ...

} 

需要

我有时需要为C:\temp中的几个FY文件运行我的代码。所以我也想为它创建一个循环。例如,如果我想运行AK,CA和WA的代码,对于FY14和FY15 .dta文件,我会在{{1}中为状态输入“AK”,“CA”和“WA” }和“FY14”和“FY15”的变量我可以在StatesToRun.dta中称之为“FY”。我只是不确定如何将第二个变量合并到循环中。我读过你可以嵌套StatesToRun.dta语句,但我不确定这是否是最好的方法。

对Stata来说相当新,这是我最好的猜测:

foreach

我是在正确的道路上吗?

1 个答案:

答案 0 :(得分:1)

你不需要一个循环(也不是一个)来保持观察,正如一些" list"所指示的那样。在另一个数据集中。您可以使用merge

clear
set more off

*----- example file with list of interest ----

sysuse auto
keep make
drop in 6/69

list

tempfile MakesToRun
save "`MakesToRun'"

*---- work with selected observations ----

clear
set more off

sysuse auto
keep make price mpg rep78

list

// keep observations that only appear in list of interest
merge 1:1 make using "`MakesToRun'", keep(matched)

list

检查help merge和相应的手册条目,以便更好地掌握其工作情况。

您可以使用循环为多个文件执行此操作。

也许有更好的方法来设置整个事情,但我们没有足够的信息。