我需要生成一个新变量,它是另一个变量的标准化值,但按组(SAT 分数按年份)。我使用以下代码计算它:
egen mean_sat = mean(sat), by(year)
egen sd_sat = sd(sat), by(year)
gen std_dat = (sat - mean_sat) / sd_sat
Run Code Online (Sandbox Code Playgroud)
有没有另一种更直接的方法来做到这一点?我尝试了以下但没有成功......
. 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
Run Code Online (Sandbox Code Playgroud)
目前官方编写的egen函数std()不支持操作by。我无法确定其统计或计算原因,但有详细记录。(我不明白为什么你需要运气才能克服记录的限制。)
原则上,任何用户都可以编写自己的egen函数来支持您想要在单行调用中实现的功能。在实践中,考虑到您使用的简单解决方法,似乎没有人愿意编写它。实际上,当有人因需要重复输入三行代码而感到恼火时,就会编写这些内容。您引用的代码有用的一个更积极的原因是,从统计角度来看,您通常应该希望以任何方式跟踪平均值和标准差。
编辑 2020 年 7 月 20 日
更新至 Stata 16.1
更新 2020 年 6 月 30 日
egen有以下更新:C。
egen函数std()现在允许byvarlist:。当与byvarlist一起使用时,值在varlist:定义的每个组内进行标准化。指定标准差值的选项已被重命名 (旧选项名称仍然有效)。sd()std()