如何在条件语句中正确使用LAG函数?我有这个公式,但它在同一行上添加值。
If(
:Column 2 != Lag( :Column 2 ) | Row() == 1, :Column 1,
Row() == 2 | Lag( :Column 2, 1 ) != :Column 2, :Column 2 - (:Column 1 + Lag( :Column 1, 1 )),
Lag( :Result ) - :Column 1
)
我想做的是这样的:
第 1 列和第 2 列是给定值。如果第 2 列值发生变化,结果应与第 1 列中的起始值类似。
| 第 1 栏 | 第2栏 | 结果 | (应该是计算) |
| 10 | 20 | 10 | 第 1 列中的值相同 |
| 2 | 20 | 10 | 第 2 列 - 第 1 列第 1 行 (20-10) |
| 5 | 20 | 8 | 第 2 列 - 第 1 列第 1 至 2 行 (20 - 12 +2) |
| 3 | 20 | 3 | 第 2 列 - 第 1 列第 1 至 3 行 (20 - 12 +2 +5) |
| 2 | 15 | 2 | |
| 1 | 15 | 13 | |
| 3 | 15 | 12 | |
| 4 | 15 | 9 | |
我怎样才能创建这样的表格方程?
自动化和脚本编写视窗Re: 如何在条件语句中正确使用LAG函数?@UserID16644 ,如果您的 :Column2 再次具有相同的值,您将得到不需要的结果。
New Table( "Untitled 155",
Add Rows( 12 ),
New Column( "Column 1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [10, 2, 5, 3, 2, 1, 3, 4, 6, 2, 5, 3] )
),
New Column( "Column 2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [20, 20, 20, 20, 15, 15, 15, 15, 20, 20, 20, 20] )
),
New Column( "Result",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If(
:Column 2 != Lag( :Column 2 ) | Row() == 1, :Column 1,
Row() == 2 | Lag( :Column 2, 2 ) != :Column 2,
:Column 2 - Lag( :Column 1 ),
Lag( :Result ) - Lag( :Column 1 )
)
)
),
New Column( "Result 2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( Row() == Col Min( Row(), :Column 2 ),
:Column 1,
(:Column 2 - Col Cumulative Sum( :Column 1, :Column 2 )) + :Column 1
)
)
)
)

回复:如何在条件语句中正确使用 LAG 函数?vars 是可与 Col 统计函数一起使用的参数统计函数 (jmp.com)

Names Default To Here(1);
dt = New Table("Untitled 4",
Add Rows(8),
Compress File When Saved(1),
New Column("Column 1", Numeric, "Continuous", Format("Best", 12), Set Values([10, 2, 5, 3, 2, 1, 3, 4])),
New Column("Column 2", Numeric, "Continuous", Format("Best", 12), Set Values([20, 20, 20, 20, 15, 15, 15, 15])),
New Column("Result", Numeric, "Continuous", Format("Best", 12), Set Values([10, 10, 8, 3, 2, 13, 12, 9]))
);
dt << New Column("Calc",
Numeric,
Continuous,
Formula(
If(Row() == Col Min(Row(), :Column 2),
:Column 1
,
:Column 2 - Col Cumulative Sum(:Column 1, :Column 2) + :Column 1
)
)
);Re: 如何在条件语句中正确使用LAG函数?是的,第 2 列的作用就像一个重置计数器。你如何在其中使用 byVar ?以前没有听说过也没有使用过该功能
Re: 如何在条件语句中正确使用LAG函数?您可以使用 col 累积和
If(
Row() == 1, :Column 1
,
:Column 2 - Col Cumulative Sum(:Column 1) + :Column 1
)
Names Default To Here(1);
dt = New Table("Untitled 4",
Add Rows(8),
Compress File When Saved(1),
New Column("Column 1", Numeric, "Continuous", Format("Best", 12), Set Values([10, 2, 5, 3, 2, 1, 3, 4])),
New Column("Column 2", Numeric, "Continuous", Format("Best", 12), Set Values([20, 20, 20, 20, 15, 15, 15, 15])),
New Column("Result", Numeric, "Continuous", Format("Best", 12), Set Values([10, 10, 8, 3, 2, 13, 12, 9]))
);
dt << New Column("Calc",
Numeric,
Continuous,
Formula(
If(
Row() == 1, :Column 1
,
:Column 2 - Col Cumulative Sum(:Column 1) + :Column 1
)
)
);

我猜第二列是某种应该重置你的“计数器”的分组?您可以使用 Col Min 来检测该更改,并根据需要将该列用作 byVar
Re: 如何在条件语句中正确使用LAG函数?抱歉,这是 10
| 第 1 栏 | 第2栏 | 结果 | (应该是计算) |
| 10 | 20 | 10 | 第 1 列中的值相同 |
| 2 | 20 | 10 | 第 2 列 - 第 1 列第 1 行 (20-10) |
| 5 | 20 | 8 | 第 2 列 - 第 1 列第 1 至 2 行 (20 - 10 +2) |
| 3 | 20 | 3 | 第 2 列 - 第 1 列第 1 至 3 行 (20 - 10 +2 +5) |
| 2 | 15 | 2 | |
| 1 | 15 | 13 | |
| 3 | 15 | 12 | |
| 4 | 15 | 9 | |
Re: 如何在条件语句中正确使用LAG函数?第 3+ 行计算中的值 12 来自哪里?