循環問題我遇到了這個反覆出現的循環檢測問題,我無法弄清楚,我希望有人可以幫助我。
請參閱隨附的範例腳本。它產生一個表。這裡的想法是我想將第 1 列中 1 的每個連續運行標記為帶有序號的事件。
這個公式有效。但是,當我對錶或重新運行公式進行任何修改時,我會收到一個、兩個或有時三個循環檢測到的錯誤。這只是一個範例表。在我的實際數據表上,如果我更改列公式或在表上進行其他編輯,我有時必須點擊“忽略所有周期”多達十幾次。
有誰知道是什麼原因造成的?
謝謝
New Table( "Cycle Problem",
Add Rows( 21 ),
New Table Variable( "P1", 3 ),
New Column( "Column 1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values(
[0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0]
)
),
New Column( "Column 2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If(
Row() == 1, :P1 = 0,
:Column 1 == 1 & :Column 1[Row() - 1] == 0, :P1 = :P1 + 1,
:Column 1 == 1, :P1
)
),
Set Selected
)
)
自動化和腳本編寫回覆:循環問題不確定循環警告是什麼意思。對我來說似乎是虛驚一場。但同時,我想以下腳本的結果就是您試圖實現的結果,而且它不存在循環問題。
New Table( "Cycle Problem",
Add Rows( 21 ),
New Column( "Column 1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values(
[0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0]
)
),
New Column( "Column 2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If(
Row() == 1, 0,
:Column 1 == 1 & :Column 1[Row() - 1] == 0, :Column 2[Row() - 1] + 1,
:Column 2[Row() - 1]
)
),
Set Selected
)
)
回覆:循環問題循環問題很可能是由您設定 :P1 表變數值並在同一公式中比較它們引起的
If(Row() == 1,
:P1 = 0
, :Column 1 == 1 & :Column 1[Row() - 1] == 0,
:P1 = :P1 + 1
, :Column 1 == 1,
:P1
)
您可以使用類似的公式
If(Row() == 1,
retval = 0
, :Column 1 == 1 & Lag(:Column 1) == 0,
retval = retval + 1
);
retval;

Lag()使您可以存取列中較早的值
回覆:循環問題你好,
您也可以滯後公式列本身。也就是說,您可以在 C2 欄位中使用下列公式來計算 C1 中的值:
If( Row() == 1,
0,
Lag( :C2 ) + (Lag( :C1 ) == 0 & :C1 == 1)
)
回覆:循環問題@peng_liu 、 @jthi和@brady_brady ...
感謝您對此的協助。然而,您提供的腳本並沒有完全完成我需要做的事情,當我嘗試修改它們時,它們不起作用。具體來說,只有當第 1 列中有 1 時,才應出現第 2 列中的編號。像這樣...

當我嘗試新增額外的 IF 語句來完成此操作時,腳本失敗。
例如,這是我對@peng_liu腳本所做的事情。
New Table( "Cycle Problem",
Add Rows( 21 ),
New Column( "Column 1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values(
[0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0]
)
),
New Column( "Column 2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If(
Row() == 1, 0,
:Column 1 == 1 & :Column 1[Row() - 1] == 0,
:Column 2[Row() - 1] + 1,
:Column 1 == 1, :Column 2[Row() - 1]
)
),
Set Selected
)
)
我還注意到另一個可能相關的問題。當我運行我提供的原始腳本時,第 2 列為空白。但是,如果我使用任何類型的隨機公式來新增第 3 列,則值會突然出現在第 2 列中。
@brady_brady我仍在研究您的解決方案,看看是否可以使其工作。
同時,您可以提供任何進一步的指導來幫助我嗎?
非常感謝您的幫忙。
回覆:循環問題例如,您可以在末尾新增一個 If 語句
Names Default To Here(1);
dt = New Table("Cycle Problem",
Add Rows(21),
New Column("Column 1",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0])
)
);
dt << new column("C", Numeric, Ordinal, Formula(
If(Row() == 1,
retval = 0;
, :Column 1 == 1 & Lag(:Column 1) == 0,
retval = retval + 1
);
If(:Column 1 == 1,
retval;
,
.
);
));

回覆:循環問題這似乎可行,但很麻煩。
If( Row() == 1,
0,
If( :C1 == 1,
If( Lag( :C1 ) == 0,
Max( :C2[Index( 1, Row() - 1 )] ) + 1,
Lag( :C2 )
),
.
)
)
另一種選擇,「C3」列的公式:
If(
Row() == 1,
c = 0;
c;
,
:C1 == 0,
.
,
Lag( :C1 ) == 1,
Lag( :c3 )
,
c++;
c;
)
回覆:循環問題@jthi !這似乎有效。儘管我不確定我是否理解為什麼它可以與單獨的 IF 語句一起使用,並且不能與我的@peng_liu修改中的組合 IF 語句一起使用。
但更重要的是,為什麼建立表格變數會導致問題,而在腳本中建立變數卻不會?
回覆:循環問題Col Cumulative Sum() 也可用於此目的
Names Default To Here(1);
dt = New Table("Cycle Problem",
Add Rows(21),
New Column("Column 1",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0])
)
);
dt << new column("C", Numeric, Ordinal, Formula(
If(:Column 1,
Col Cumulative Sum(Dif(:Column 1) == 1)
,
.
);
));回覆:循環問題這是一件很棒的事。
回覆:循環問題@peng_liu 、 @jthi和@brady_brady謝謝大家的解決方案。我特別喜歡@jthi的解決方案。我從來不知道 Col Cumulative Sum 可以這樣使用。非常簡單、有效率、優雅。
我仍在嘗試了解變數在 JMP 中的工作原理。我還不太確定我已經掌握了全部情況,但我正在努力。
回覆:循環問題它可以,但我不能 100% 確定您是否應該這樣做,儘管它是 JMP 公式的更好功能之一(JMP 支援告訴我這是意外行為)。這是一個願望清單項目,希望 JMP 能夠確認這確實是需要的行為。
有關循環問題及其解釋,您可以聯絡 JMP 支援。我只能提供猜測(可能是正確的或完全錯誤的),因為我不是 JMP 開發人員,但我可以理解它,因為它試圖同時成為多個值。這也可能是一本好書《我對變數感到困惑》