如何直接計算連續條件的個數?例如,以“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
);
)
);