我需要生成一个新变量,该变量是另一个变量的标准化值,但按组分组(SAT分数按年计)。我使用以下代码进行了计算:

egen mean_sat = mean(sat), by(year)
egen sd_sat = sd(sat), by(year)
gen std_dat = (sat - mean_sat) / sd_sat

还有另一种更直接的方法吗?我尝试了以下操作,但没有成功...
. by year, sort : egen float std_SAT = std(sat)
egen ... std() may not be combined with by
r(190);

. egen std_SAT = std(sat), by(year)
egen ... std() may not be combined with by

最佳答案

目前,正式编写的egen函数std()不支持by操作。我无法确定其统计或计算原因,但有据可查。 (为什么您需要运气才能克服我不明白的文件记载的限制。)
原则上,任何用户都可以编写自己的egen函数来支持您希望在单行调用中实现的功能。在实践中,鉴于您所使用的简单变通方法,似乎没有人会费心去编写它。在实践中,当某人因需要重复键入三行代码而感到烦躁时,这些东西就会被编写出来。您引用的代码之所以有用的一个更积极的原因是,从统计角度上讲,您通常应该以任何方式跟踪均值和标准差。
编辑2020年7月20日
更新到Stata 16.1

关于stata - 在Stata中按组标准化变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27949274/

10-10 05:18