如何在没有 SSC 包的情况下进行最大滚动 window

How to take maximum of rolling window without SSC packages

如何在 Stata 中创建一个包含应用于另一个变量的动态滚动 window 最大值的变量?滚动 window 必须能够在循环内迭代更改。

max(numvar, L1.numvar, L2.numvar) 会给我我想要的单个 window 大小,但是我如何在循环中迭代地更改 window 大小?

我当前计算滚动总和的代码(算法归功于@Nick Cox):

generate var1lagged = 0

forval k = -2(1)2 {
    if `k' < 0 {
        local k1 = -(`k')
        replace var1lagged = var1lagged + L`k1'.var1
}
    else replace var1lagged = var1lagged + F`k'.var1
}

我如何实现相同类型的灵活性,但使用 window 的最大值、最小值或平均值?

在最简单的情况下,假设 K 至少给出 1 作为 window

中的滞后数
local arg L1.numvar

forval k = 2/`K' { 
      local arg `arg', L`k'.numvar 
}

gen wanted = max(`arg') 

如果window包含当前值,那只是一个转折

local arg numvar 

forval k = 1/`K' {
    local arg `arg', L`k'.numvar 
} 

gen wanted = max(`arg') 

更一般地说,numvar不会是一个特定的变量名,而是包含这样一个名称的局部宏。

编辑 1

这个 returns 只有在所有参数都缺失的情况下才会缺失。如果你想在缺少任何参数的情况下坚持 missing 作为结果,那么去

gen wanted = cond(missing(`arg'), ., max(`arg')) 

编辑 2

更广泛地查看 rolling。否则对于滚动意味着你直接计算你需要计算出(1)问题中的总和(2)非缺失值的数量。

OP 的工作环境显然排除了安装社区贡献的命令;否则我会推荐 rangestatrangerun (SSC)。请注意,许多社区提供的命令已通过 Stata Journal、GitHub 或用户站点发布。