如何直接计算连续条件的个数?例如,以“height”为例,统计本行“height”大于上一行“height”的连续个数。
我加了一个辅助列h来判断该行的“高度”是否大于上一行的“高度”,然后统计该行连续的大于上一行“高度”的“高度”另一列。如果“高度”小于上一行的“高度”则必须重新计算。

如何一步完成这个计算?
我试过这个,但没有用:
if(:height>Lag(:height,1),row()-Contains(:height[Index(1,Row())],:height<LAG></LAG>
- 谢谢!
Re: 如何直接计算连续条件的个数?大家好,
我花了一段时间,但我最终想出了如果条件为真,如何向前一行添加一个值。
所以我想和你分享这个。我用它来标记组内的顺序值。
谢谢你们。
干杯!
如果(行()== 1,
.,
如果(:master ==滞后(:master),
如果(:滚动 - 滞后(:滚动)== 1,
:序列。滚动 v3[Row() - 1] = 1,
.
)
)
)
Re: 如何直接计算连续条件的个数?你好,约翰,
我看到了错误,但这并没有提供我需要的计算和检查。我的上一篇文章显示了一个新的数据表和接近的公式。
谢谢
温斋
Re: 如何直接计算连续条件的个数?看起来第二个 If 有一个单一的 = 用于赋值而不是 == 用于等价测试。
If( Row() == 1,
hCounter = 0,
If(
Lag( :name ) == :name,
If( :age > Lag( :age, 1 ),
Empty()
),
hCounter++, hCounter = 0
)
);
If( hCounter == 0,
.,
hCounter
);
Re: 如何直接计算连续条件的个数?你好,
我附上了我实际数据集的一部分。我正在跟踪由 :master 顺序排列的 :rolls 的数量。公式很接近,但如果差为 1,我仍然需要它来设置顺序滚动第一次出现的值。
如果(:master ==滞后(:master),
如果( Dif( :roll, 1 ) == 1,
Dif(:roll, 1),
.
),
.
)
例如,我需要将第 8 行和第 11 行的 :sequential roll 的值设置为 1,因为差异 = 1

任何帮助,将不胜感激。
Re: 如何直接计算连续条件的个数?嗨,吉姆,
没问题。我将该列命名为显示我正在寻找的公式的最终结果。
查看 Carol 的“期望者:姓名”列。
连续 3 年(14、15、16 岁)测量身高。但公式显示 4。
行与行之间的年龄差异应为 1。如果它是 <>1,则它应该为空。
我需要 Lag 递增 1,直到值为 <>1。如果错过了一年的身高测量,这应该是信号。

Re: 如何直接计算连续条件的个数?我不明白“名称所需”列的规则。Alice 的行末尾有一个缺失值,但 Carol 和 Chris 的 2 行有缺失值,然后回到 Clay 的只有 1 行缺失值。我不明白
Re: 如何直接计算连续条件的个数?你好,
发现错误,但公式仍未按要求计算第 10 列。
连续5年测量爱丽丝的身高。我需要一列来显示哪些行是连续的。克莱只有连续 2 年的身高测量。Carol 连续 3 年测量身高,但第 10 列显示 4。

第 10 列中的公式:
If( Row() == 1,
hCounter = 0,
If( Lag( :name ) == :name,
If( :age > Lag( :age, 1 ),
hCounter
++),
hCounter = 0
)
);
If( hCounter == 0,
.,
hCounter
);
Re: 如何直接计算连续条件的个数?你好 ,
不太确定我做错了什么,但他的 If 语句引发了这个错误。

为了这:
If( Row() == 1,
hCounter = 0,
If(
Lag( :name ) = :name,
If( :age > Lag( :age, 1 ),
Empty()
),
hCounter++, hCounter = 0
)
);
If( hCounter == 0,
.,
hCounter
);
Re: 如何直接计算连续条件的个数?只需在公式中添加一个 IF() 语句来检查 Lag(:Name) != :Name 是否存在,如果没有,则将计数器设置回起点。
Re: 如何直接计算连续条件的个数?你好,
我有类似的挑战。但是,我需要计算列中连续(增加 1)值的数量。我附上 BigClass 的例子来说明。

我使用你的公式计算基于 :age 的 :h 列,但需要一个从序列的第一个值开始并按 :name 分组的公式。
这可以用公式来实现吗?
问候,
温斋
Re: 如何直接计算连续条件的个数?在这里循环是个好主意!
谢谢吉姆!Re: 如何直接计算连续条件的个数?这个问题有一个相当简单的解决方案:
If( Row() == 1,
hCounter = 0,
If( :height > Lag( :height, 1 ),
hCounter++,
hCounter = 0
)
);
If( hCounter == 0,
.,
hCounter
);
当满足条件的滞后为 0 时,此版本将产生缺失值,就像您的 2 列解决方案一样。如果您希望结果值为零而不是缺失值,只需使用:
If( Row() == 1,
hCounter = 0,
If( :height > Lag( :height, 1 ),
hCounter++,
hCounter = 0
)
);
hCounter;
这是两种方法的完整比较
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column( "h",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( If( Row() == 1, 0, :height > Lag( :height, 1 ) ) )
);
dt << New Column( "Two Columns Used",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( If( :h == 1, Row() - Contains( :h[Index( 1, Row() )], 0, -1 ) ) )
);
dt << New Column( "All in one",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( Row() == 1,
hCounter = 0,
If( :height > Lag( :height, 1 ),
hCounter++,
hCounter = 0
)
);
If( hCounter == 0,
.,
hCounter
);
)
);