我有一些数据,我想计算从一行到下一行的滞后(这是一个时间序列),但我有许多组的数据。我希望在每个组中分别创建滞后。对于许多统计函数(例如,Col Mean),可以选择添加一个或多个按组变量。Lag 或 Dif 函数似乎没有相同的功能,并且我在脚本文档中找不到任何内容来指示如何完成此操作。有没有一种方法可以轻松地分别计算每个组的滞后?我目前找到的唯一方法是首先按日期和按组对数据进行排序,然后使用取决于组等于滞后(组)的IF公式,例如IF(组)-滞后(组),然后滞后(感兴趣的列),否则缺失。
我可能猜到 txnelson 会有解决方案!它并不比我所拥有的更优雅或更简单,但它避免了对数据进行排序的需要 - 这使得它更加灵活。谢谢。
即使行未按 2 个级别排序,以下公式似乎也有效。 (即按日期排序)公式中的 lagList 是用来处理 Col Moving Average() 函数返回当前行的问题,即使是第一次出现也是如此。
If( Row() == 1, lagList = {} );
If( Contains( lagList, :administrative_area_level_1 || :administrative_area_level_2 ),
Col Moving Average(
:deaths,
weighting = 1,
before = 1,
:administrative_area_level_1,
:administrative_area_level_2
) * 2 - :deaths,
Insert Into( lagList, :administrative_area_level_1 || :administrative_area_level_2 )
);

这是一个低效的公式,但也有效
curLevel1 = :administrative_area_level_1;
curLevel2 = :administrative_area_level_2;
curRow = Row();
Try(
:deaths[Max(
Current Data Table() << get rows where(
:administrative_area_level_1 == curLevel1 & (:administrative_area_level_2 == curLevel2 & Row() < curRow)
)
)]
);
为了使这一点更加具体,我附上了一个简单的例子。滞后的死亡专栏是我想要的 - 但我希望能够更简单或更优雅地做到这一点。