program define _gnasd

	syntax newvarname =/exp [if] [in] [, BY(varlist) min(string)]
	quietly {
		/* standardize expression vs varlist */
		local gen `varlist'
		local type `typelist'
		confirm new variable `gen'
		if "`min'"==""{
			local min 0
		}
		tempvar touse count mean var
		mark `touse' `if' `in'

		bys `touse'  `by': gen `count' = sum(!missing(`exp'))
		by  `touse' `by': gen `mean' = sum(`exp')/`count'
		by  `touse' `by': gen `var' = sum((`exp'-`mean'[_N])^2)/(`count'[_N]-1)
		by  `touse' `by': gen `type' `gen' = sqrt(`var'[_N]) if `count'[_N] >= `min' & `touse'
	}

end