在Stata中按组标准化变量

时间:2015-01-14 17:48:38

标签: stata

我需要生成一个新变量,它是另一个变量的标准化值,但是由一个组(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

2 个答案:

答案 0 :(得分:3)

目前,正式编写的egen函数std()不支持操作by。我无法确定统计或计算方面的原因,但有详细记载。 (为什么你需要运气才能超越我不明白的记录限制。)

原则上,任何用户都可以编写自己的egen函数来支持您希望在单行调用中实现的内容。在实践中,考虑到您使用的简单解决方法,似乎没有人愿意写它。实际上,当有人因为需要反复输入三行代码而烦恼时,就会写出这些内容。您引用的代码有用的一个更积极的原因是,从统计上来说,您通常应该以任何方式跟踪均值和标准偏差。

答案 1 :(得分:0)

Stata没有它,但你可以很容易地自己做。这是如何:

1-提示是您不能按组“标准化”,但您可以按组进行平均值和标准偏差。因此,(a)按组取平均值,(b)按组取标准差,最后取(c)standards_variable =(the_var-mean_of_the_var)/ std_of_the_var

2-示例:所以,让我们通过“公司”标准化变量“sales”。以下是代码的工作原理:

egen company_group = group(company)
sort company_group

by company_group: egen sales_mean= mean(sales)
by company_group: egen sales_sd  = sd(sales)
by company_group: gen  sales_std = (sales-sales_mean)/sales_sd