{smcl} {right:version: 2.0.0} {cmd:help asgen} {right:July 29, 2020} {hline} {title:Title} {p 4 8}{cmd:asgen} - Generates a weighted average mean using an existing variable as a weight {p_end} {title:Syntax} {p 8 15 2} [{help bysort} varlist]: {cmd:asgen} {newvar} {cmd:=} {it:{help exp}} {ifin} [{cmd:,} {it:weight(varname)} {it:{help by}}({it:varlist})] {title:Description} {p 4 4 2} {cmd: asgen} creates a new variable from an existing variable or an expression. The new variable contains a weighted average mean. The existing variable is supplied to {cmd: asgen} by the {help =exp}. The weights are based on the values of an existing numeric variable, that is specified in the {cmdab:w:eight}({it:varname}) option. {p_end} {p 4 4 2} {cmd: asgen} accepts both the {ifin} qualifiers for performing the required calculations on a subset of data. Further, the use of {help =exp} can come handy in many situations where we want to make changes on the fly before we find the weighted average mean. For example, we might want to multiply the value of 100 to a variable before we find its weighted average. In such a case, the expression will look like: {p_end} {p 9 9 2} {hi: asgen wmX = X * 100, w(Y) }{p_end} {p 4 4 2} where {hi:{it: wmX}} is a new variable to be created and shall contain the weighted average; {hi:{it: X}} and {hi:{it: Y}} are existing variables in the data set. {marker asgen_options}{...} {title:Options} {p 4 4 2} {opt w:eight(varname)} is an optional option. Therefore, without this option, {cmd: asgen} works like {help egen} command and finds simple mean{p_end} {title:Example 1: Weighted average mean for {hi:{it:kstock}} using the variable {hi:{it:mvalue}} as a weight} {p 4 8 2}{stata "webuse grunfeld" :. webuse grunfeld}{p_end} {p 4 8 2}{stata "asgen WM_kstock = kstock, w(mvalue)" :. asgen WM_kstock = kstock, w(mvalue)} {p_end} {title:Example 2: Weighted average mean using an expression} {p 4 8 2}{stata "asgen WM_kstock2 = kstock/invest , w(mvalue)" :. asgen WM_kstock = kstock / invest, w(mvalue)} {p_end} {p 4 8 4} This will divide the variable {it:kstock} on the variable {it:invest} before finding the weighted average mean. {title:Example 3: Avoiding the use of [if] using an expression} {p 4 4 4} We use the {help [if]} qualifier to perform calculation on a subset of the data. Using {help [if]} condition, the resulting variable will have missing values where the condition is not true. There might be circumstances where we want to use [if] without encountering missing values in the new variable. The use of expression can come very handy in such a situation. To proceed with an example, let us use {stata "ssc des astile":astile } [can be downloaded from ssc by clicking here {stata "ssc install astile":install astile}] to make five groups of firms based on {it:mvalue} and five groups based {it:kstock}. {p_end} {p 4 8 2}{stata "astile size5 =mvalue, nq(5)" :. astile size5 = mvalue, nq(5)} {p_end} {p 4 8 2}{stata "astile kstock5 =kstock, nq(5)" :. astile kstock5 = kstock, nq(5)} {p_end} {p 4 4 4} Now, let's find weighted average mean in each year for a combination of firms that are in the first quantile of {it:mvalue (size == 1)} and third quantile of {it:kstock (kstock5 == 3)} using {it:mvalue} as a weighting variable {p_end} {p 4 8 2}{stata "bys year: asgen WM_invest = (kstock / (size5 ==1 & kstock5==3)) , w(mvalue)" :. bys year: asgen WM_invest = (kstock / (size5 ==1 & kstock5==3)), w(mvalue)} {p_end} {p 4 4 4} Off-course, we could have done that using [if] qualifier, but that will generate missing values where the condition is not true{p_end} {p 4 8 2}{stata "bys year: asgen WM_invest_IF = kstock if size5 ==1 & kstock5==3, w(mvalue)" :. bys year: asgen WM_invest_IF = kstock if size5 ==1 & kstock5==3 , w(mvalue)} {p_end} {p 4 4 4} The difference between {it:WM_invest} and {it:WM_invest_IF} is that the former spreads the results within years, and the latter does not. The use of this trick is borrowed from the behavior of {help egen}. Further details related to this trick can be read {browse "https://ideas.repec.org/a/tsj/stataj/v11y2011i2p305-314.html": here} in Nick Cox's column. {p_end} {title:ONLINE HELP} {p 4 4 4} You may like to visit {browse "http://FinTechProfessor.com": www.FinTechProfessor.com}. On this website, I regularly post blog posts and examples related to my programs. I also maintain users' forums for these programs where users can post comments / questions / answers. The link to the asgen's forum is {browse "https://fintechprofessor.com/forums/forum/asgen-program-for-the-weighted-average-mean-in-stata/" : here} {p_end} {title:Author} ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: * * * * Dr. Attaullah Shah * * Institute of Management Sciences, Peshawar, Pakistan * * Email: attaullah.shah@imsciences.edu.pk * * {browse "www.OpenDoors.Pk": www.OpenDoors.Pk} * * {browse "www.StataProfessor.com": www.FinTechProfessor.com} * *:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* {marker also}{...} {title:Also see} {psee} {browse "http://www.opendoors.pk/home/paid-help-in-empirical-finance/stata-program-to-construct-j-k-overlappy-momentum-portfolios-strategy": asm : for momentum portfolios} {p_end} {psee}{stata "ssc desc asdoc":asdoc : Easily create publication-quality tables from Stata } {p_end} {psee}{stata "ssc desc astile":astile : for creating fastest quantile groups} {p_end} {psee}{stata "ssc desc asreg":asgen : for weighted average mean} {p_end} {psee}{stata "ssc desc asrol":asrol : for rolling-window statistics} {p_end} {psee}{stata "ssc desc asreg":asreg : for rolling-window, by-group, and Fama and MacBeth regressions} {p_end} {psee}{stata "ssc desc ascol":ascol : for converting asset returns and prices from daily to a weekly, monthly, quarterly, and yearly frequency}{p_end} {psee}{stata "ssc desc searchfor":searchfor : for searching text in data sets} {p_end}