【问题标题】:Standardize a variable by group in Stata在Stata中按组标准化变量
【发布时间】:2015-01-14 17:48:38
【问题描述】:

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

【问题讨论】:

    标签: stata


    【解决方案1】:

    目前官方写的egen函数std()不支持操作by。我无法确定其中的统计或计算原因,但有据可查。 (为什么你需要运气才能克服我不明白的记录限制。)

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

    2020 年 7 月 20 日编辑

    更新至 Stata 16.1

    2020 年 6 月 30 日更新

    1. egen 有以下更新:

      c。 egen 函数 std() 现在允许 by varlist:。当与by varlist: 一起使用时,值在 varlist 定义的每个组。指定标准偏差值的选项已重命名 sd()(旧选项名称 std() 也可以继续使用)。

    【讨论】:

    • 谢谢,我的问题的一个“副作用”是我希望有人看看我必须确保它会产生正确结果的代码:)
    【解决方案2】:

    Stata 没有,但您可以自己轻松完成。方法如下:

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

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

    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
    

    【讨论】:

    • 这只是 OP 在他们的问题中提出的代码!无论by 操作是使用选项还是使用前缀命令执行的,区别主要在于外观。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 2020-10-16
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多