如何在没有 SSC 包的情况下获得最大的滚动窗口

问题描述

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

max(numvar,L1.numvar,L2.numvar) 将给我我想要的单个窗口大小,但如何在循环内迭代更改窗口大小?

我当前用于计算滚动总和的代码(归功于@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
}

如何在窗口的最大值、最小值或平均值的情况下实现同样的灵活性?

解决方法

在最简单的情况下,假设 K 至少给定 1 作为窗口中的滞后数

local arg L1.numvar

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

gen wanted = max(`arg') 

如果窗口包含现值,那只是一个扭曲

local arg numvar 

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

gen wanted = max(`arg') 

更一般地说,numvar 不是特定的变量名称,而是包含此类名称的本地宏。

编辑 1

仅当所有参数都丢失时,才会返回丢失的结果。如果你想在缺少任何参数的情况下坚持缺少结果,那么去

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

编辑 2

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

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...