[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]
st: extract rows from panel dataset
Tom Boonen wants to write a utility that allows the user to specify a
set of units, time periods and variables, and produce a Stata matrix
of the resulting rows and columns of a panel-format dataset. Scott
presented a nice solution for that -- but how is Tom going to use it?
Stata doesn't perform statistical analysis on Stata matrices.
The unnecessary part here, it seems to me, is to subset the dataset
for a particular set of variables. This could be done with preserve
and restore, but that tends to be really slow on a big panel dataset.
Here is my take on the solution:
program drop _all
program foo2 , rclass
syntax /* varlist(ts min=2 numeric) */, Timex(numlist >=0 integer)
Units(numlist integer) Gen(string)
local tvar `r(timevar)'
local pvar "`r(panelvar)'"
local tx: subinstr local timex " " ",", all
local u: subinstr local units " " ",", all
gen `gen' = ( inlist(`tvar',`tx') & inlist(`pvar', `u'))
tsset county year
foo2, timex(83(2)87) units(7 9 11 13 19 21) gen(mysamp1)
xtdes if mysamp1
reg avgsen polpc density taxpc if mysamp1
This approach does nothing with variables, but allows you to carry
out any number of analyses on the designated subsample of units and
time periods just by appending the if condition that identifies those
observations. No need to fool around with the variables. If Tom
really wants to create a subset dataset, then reinstate the variable
list (per Scott's code) and have the routiine
keep (only those variables, plus the panel identifiers)
keep if `gen'
after the gen `gen' statement.
Kit Baum, Boston College Economics
An Introduction to Modern Econometrics Using Stata:
* For searches and help try: