Stata 如何在没有SSC包的情况下最大限度地利用滚动窗口

Stata 如何在没有SSC包的情况下最大限度地利用滚动窗口,stata,Stata,如何在Stata中创建一个变量,该变量包含应用于另一个变量的动态滚动窗口的最大值?滚动窗口必须能够在循环中迭代更改 max(numvar,L1.numvar,L2.numvar)将为单个窗口大小提供所需的内容,但如何在循环中迭代更改窗口大小 我当前用于计算滚动和的代码(算法归功于@Nick Cox): generate var1lagged=0 forval k=-2(1)2{ 如果'k'小于0{ 局部k1=-(`k') 替换var1lagged=var1lagged+L`k1'。var1 }

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

max(numvar,L1.numvar,L2.numvar)
将为单个窗口大小提供所需的内容,但如何在循环中迭代更改窗口大小

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

generate var1lagged=0
forval k=-2(1)2{
如果'k'小于0{
局部k1=-(`k')
替换var1lagged=var1lagged+L`k1'。var1
}
否则替换var1lagged=var1lagged+F`k'。var1
}

我如何实现同样的灵活性,但使用窗口的最大值、最小值或平均值?

在最简单的情况下,假设窗口中的滞后数至少为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

仅当缺少所有参数时,才会返回missing。如果你想坚持缺席,如果有任何论据缺席,那就去吧

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

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


OP的工作环境显然排除了安装社区贡献的命令;否则,我建议使用
rangestat
rangerun
(SSC)。请注意,许多社区贡献的命令都是通过Stata Journal、GitHub或用户站点发布的。

因此,Stata似乎忽略了计算中缺少的值,有没有办法做到如果我尝试取三个数字的最大值,但其中两个缺失(如第一行)结果将是
?是;这在斯塔塔是完全标准的。要求查找最大值1、2、42、666和。(缺失)Stata返回666,未因“不知道”而缺失。请参阅编辑。您在本文()中提到,Stata中任何地方都没有函数
mean()
。如何使用上述算法获得平均值而不是最大值?我本以为只需输入一个
mean()
而不是上面找到的
max()
会很容易,但它会给出错误
unknown function mean()
。你在另一篇文章中提到的移动平均值函数(我现在记不起来)在数据丢失时不会输入
,这使我无法使用它。我所说的是没有可以应用于任何地方的
mean()
函数,而不是机器中的任何地方都没有这样的函数,因为在
egen
中有这样一个函数(这使术语“函数”过载)。(还有一个在马塔)。
gen wanted = cond(missing(`arg'), ., max(`arg'))