I am trying to write an egen function that takes one newvar as an input, but generates two variables having newvar as a stub. For concreteness say that I want to generate both the mean and the count of observations, so that I write:
Code:
egen pricestats = temp(price), by(rep)
This is my ado file:
Code:
cap prog drop _gtemp
program define _gtemp
version 11, missing
syntax newvarname =/exp [if] [in] [, BY(varlist)]
tempvar touse
quietly {
gen byte `touse'=1 `if' `in'
sort `touse' `by'
by `touse' `by': gen `typlist' `varlist'_mean = /*
*/ sum(`exp')/sum((`exp')<.) if `touse'==1
by `touse' `by': gen `typlist' `varlist'_nobs = /*
*/ sum((`exp')<.) if `touse'==1
by `touse' `by': replace `varlist'_mean = `varlist'_mean[_N]
by `touse' `by': replace `varlist'_nobs = `varlist'_nobs[_N]
}
endCode:
. set trace off
. sysuse auto
(1978 Automobile Data)
. keep price rep
egen pricestats = temp(price), by(rep)
*** OUTPUT OMITTED***
----------------------------------------------------------------------------------------- end _gtemp ---
- global EGEN_SVarname
- global EGEN_Varname
- if _rc { exit _rc }
- quietly count if missing(`dummy')
= quietly count if missing(__000001)
__000001 ambiguous abbreviation
--------------------------------------------------------------------------------------------- end egen ---
r(111);
. des
Contains data from C:\Program Files (x86)\Stata15\ado\base/a/auto.dta
obs: 74 1978 Automobile Data
vars: 4 13 Apr 2016 17:45
size: 888 (_dta has notes)
----------------------------------------------------------------------------------------------------------
storage display value
variable name type format label variable label
----------------------------------------------------------------------------------------------------------
price int %8.0gc Price
rep78 int %8.0g Repair Record 1978
__000001_mean float %9.0g
__000001_nobs float %9.0g
------------------------------------------
0 Response to How to write an egen function that takes one variable as an input, but produces two variables using the input variable as a stub?
Post a Comment