我有这样的数据集:
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
我是在正确的道路上吗?
答案 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
和相应的手册条目,以便更好地掌握其工作情况。
您可以使用循环为多个文件执行此操作。
也许有更好的方法来设置整个事情,但我们没有足够的信息。