サイクル問題繰り返しサイクルが検出される問題が発生していますが、解決方法がわからず、誰かが助けてくれることを願っています。
添付のサンプル スクリプトを参照してください。テーブルが生成されます。ここでのアイデアは、列 1 の連続実行 1 を、連続番号を持つイベントとしてラベル付けすることです。
数式は機能します。しかし、テーブルに変更を加えたり、数式を再実行したりすると、1、2、または時には 3 つのサイクル検出エラーが発生します。これは単なるサンプル テーブルです。実際のデータ テーブルでは、列の数式を変更したり、テーブルでその他の編集を行ったりすると、最大 12 回まで [すべてのサイクルを無視] をクリックする必要がありました。
これが何が原因で起こっているのか知っている人はいますか?
ありがとう
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() は列内の以前の値にアクセスします
サイクルの問題こんにちは、
数式列自体を遅らせることもできます。つまり、C1 にある値に対して、列 C2 で次の数式を使用できます。
If( Row() == 1,
0,
Lag( :C2 ) + (Lag( :C1 ) == 0 & :C1 == 1)
)
サイクルの問題@peng_liu 、 @jthi 、 @brady_brady ...
これについてご協力いただきありがとうございます。ただし、提供されたスクリプトでは必要な処理が実行できず、修正しようとしても機能しませんでした。具体的には、列 2 の番号は、列 1 に 1 がある場合にのみ表示される必要があります。列 1 に 0 がある場合、列 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文を1つ追加することができます。
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 での変数の動作を理解しようとしているところです。まだ全体像を把握できているかどうかはわかりませんが、理解に努めています。
サイクルの問題可能ですが、JMP Formulas の優れた機能の 1 つであるにもかかわらず、使用すべきかどうかは 100% 確信がありません (JMP サポートから、これは意図しない動作であると聞きました)。これは、JMP が、これは間違いなく必要な動作であると認識してくれることを期待するウィッシュ リスト項目です。Set Each Value で数式を使用し、Col 統計数式で最初の引数として式を使用する動作がサポートされるようにします。
循環問題とその説明については、JMP サポートにお問い合わせください。私は JMP 開発者ではないので、推測 (正しいか完全に間違っている可能性があります) しか提供できませんが、同時に複数の値をとろうとしていることはある程度理解できます。これも、 変数について混乱しているという良い読み物かもしれません。