如何使用 Stata 将最大值应用于整个组

How to apply maximum value to a whole group using Stata

我想 generate 变量 max_count 其中,对于给定的组 ID,如果当前年份的 count 值高于上一年,则 max_count 取当前年份的值。当年的值将应用于随后的年份,直到出现比当年更高的值。例如,在下面的 ID 2 示例中,count 在 2001 年的值为 10,但随后的年份(2002 年和 2003 年)的值小于 10(即 2 和 4),因此 2002 年和 2003 年采用值为 10(2001 年之后的最高值)。

我使用了这个 Stata 代码,但它不起作用:

bysort id (Year): gen max_count=max(count, count[_n-1])

最高值仅适用于紧随其后的年份,而不适用于所有后续年份。

ID  Year    count   max_count
1   2000    5          5
1   2001    0          5
1   2002    3          5
1   2003    7          7
2   2000    5          5
2   2001    10        10
2   2002    2         10
2   2003    4         10
3   2000    2         2
3   2001    5         5
3   2002    9         9
3   2003    6         9
clear 
input ID    Year    count   max_count
    1   2000    5          5
    1   2001    0          5
    1   2002    3          5
    1   2003    7          7
    2   2000    5          5
    2   2001    10        10
    2   2002    2         10
    2   2003    4         10
    3   2000    2         2
    3   2001    5         5
    3   2002    9         9
    3   2003    6         9
end 

bysort ID (Year) : gen wanted = count[1]
by ID : replace wanted = max(wanted[_n-1], count) if _n > 1 

list, sepby(ID)

     +---------------------------------------+
     | ID   Year   count   max_co~t   wanted |
     |---------------------------------------|
  1. |  1   2000       5          5        5 |
  2. |  1   2001       0          5        5 |
  3. |  1   2002       3          5        5 |
  4. |  1   2003       7          7        7 |
     |---------------------------------------|
  5. |  2   2000       5          5        5 |
  6. |  2   2001      10         10       10 |
  7. |  2   2002       2         10       10 |
  8. |  2   2003       4         10       10 |
     |---------------------------------------|
  9. |  3   2000       2          2        2 |
 10. |  3   2001       5          5        5 |
 11. |  3   2002       9          9        9 |
 12. |  3   2003       6          9        9 |
     +---------------------------------------+

    

this Stata FAQ.

中有关于如何获得此类记录的详细讨论(到目前为止的最大值或最小值是“记录”,如体育运动)

对于单线解决方案,从 SSC 安装 rangestat,然后

rangestat (max) WANTED = count, int(Year . 0) by(ID) 

记录发生时间的问题自然是相关的:

by ID : gen when = Year[1]
by ID : replace when = cond(wanted > wanted[_n-1], Year, when[_n-1]) if _n > 1