我有數據集是這樣的:添加在的foreach命令第二個變量 - 塔塔
C:\temp\SalesFigures FY13.dta
C:\temp\SalesFigures FY14.dta
C:\temp\SalesFigures FY15.dta
etc.
每個文件都包含來自50個州的銷售數據。我經常需要爲這些文件中的一些狀態運行一段代碼。我在一個名爲StatesToRun.dta
(例如AK,CA,WA)的文件中指定這些狀態,並使用foreach
命令循環每個狀態。我也使用宏來指定我想使用的風雲.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. ...
}
的必要性
我有時需要我的代碼運行數的FY文件的C:\temp
。所以我想爲此創建一個循環。例如,如果我想爲2014財年和2015財年的.dta文件運行AK,CA和WA的代碼,則在StatesToRun.dta
中爲狀態輸入「AK」,「CA」和「WA」,並輸入「 FY14「和」FY15「的變量可以在StatesToRun.dta
中稱爲」FY「。我只是不確定如何將第二個變量合併到循環中。我讀過你可以嵌套foreach
陳述,但我不確定這是否是最好的方法。
作爲相當新的塔塔,這是我最好的猜測:
* Run code only for the states and FYs I list in StatesToRun.dta.
use "C:/temp/StatesToRun.dta", clear
levelsof state, local(statelist)
levelsof FY, local(FYlist)
foreach MyState of local statelist {
foreach MyFY of local FYlist {
use "C:/temp/SalesFigures 'MyFY'.dta", clear
keep if state == `"`MyState'"'
* etc. ...
}
}
我在正確的道路上?
第一個示例不會運行;開放式大括號必須與「foreach」位於同一行。 –
看起來是不必要的間接放置例如數據集中的「AK CA WA」只是將它們再次取出。爲什麼不直接輸入它們? –
羅伯託 - 正確。這是一個錯字。 Nick - 要運行的狀態列表用於其他約8個例程和單獨的語法,因此很容易將它們全部存儲在一個位置(外部文件),因此每個例程都可以引用該單個文件。 – Larry