ZyklusproblemBei mir wird ein wiederkehrender Zyklus erkannt, ich kann das Problem nicht lösen und hoffe, dass mir jemand helfen kann.
Siehe das beigefügte Beispielskript. Es generiert eine Tabelle. Die Idee dabei ist, dass ich jeden kontinuierlichen Lauf von 1 in Spalte 1 als Ereignis mit einer fortlaufenden Nummer kennzeichnen möchte.
Die Formel funktioniert. Aber wenn ich Änderungen an der Tabelle vornehme oder Formeln erneut ausführe, erhalte ich einen, zwei oder manchmal drei Zykluserkennungsfehler. Dies ist nur eine Beispieltabelle. In meiner tatsächlichen Datentabelle musste ich manchmal bis zu einem Dutzend Mal auf „Alle Zyklen ignorieren“ klicken, wenn ich eine Spaltenformel ändere oder andere Änderungen an der Tabelle vornehme.
Weiß jemand, woran das liegt?
Danke
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
)
)
Automatisierung und SkriptingBetreff: ZyklusproblemIch bin mir nicht sicher, was die Zykluswarnung bedeutet. Sieht für mich nach einem Fehlalarm aus. Aber inzwischen vermute ich, dass das Ergebnis des folgenden Skripts das ist, was Sie erreichen möchten, und dass das Zyklusproblem nicht auftritt.
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
)
)
Betreff: ZyklusproblemDie Zyklusprobleme werden höchstwahrscheinlich dadurch verursacht, dass Sie den Tabellenvariablenwert :P1 festlegen und diese in derselben Formel vergleichen.
If(Row() == 1,
:P1 = 0
, :Column 1 == 1 & :Column 1[Row() - 1] == 0,
:P1 = :P1 + 1
, :Column 1 == 1,
:P1
)
Sie können Formeln wie diese verwenden
If(Row() == 1,
retval = 0
, :Column 1 == 1 & Lag(:Column 1) == 0,
retval = retval + 1
);
retval;

Mit Lag() haben Sie Zugriff auf frühere Werte in einer Spalte
Betreff: ZyklusproblemHallo,
Sie können auch die Formelspalte selbst verzögern. Das heißt, Sie können diese Formel in Spalte C2 für die Werte verwenden, die Sie in C1 haben:
If( Row() == 1,
0,
Lag( :C2 ) + (Lag( :C1 ) == 0 & :C1 == 1)
)
Betreff: Zyklusproblem@peng_liu , @jthi und @brady_brady …
Vielen Dank für Ihre Hilfe. Die von Ihnen bereitgestellten Skripte haben jedoch nicht ganz das getan, was ich tun musste, und als ich versuchte, sie zu ändern, funktionierten sie nicht. Insbesondere sollte die Nummerierung in Spalte 2 nur erscheinen, wenn in Spalte 1 eine 1 steht. Wenn in Spalte 1 eine 0 steht, ist Spalte 2 leer. So ...

Wenn ich versuche, die zusätzliche IF-Anweisung hinzuzufügen, um dies zu erreichen, schlagen die Skripte fehl.
Hier ist beispielsweise, was ich mit dem Skript @peng_liu gemacht habe.
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
)
)
Mir ist auch ein anderes Problem aufgefallen, das damit zusammenhängen könnte. Wenn ich das von mir bereitgestellte Originalskript ausführe, ist Spalte 2 leer. Wenn ich jedoch eine Spalte 3 mit einer beliebigen Formel hinzufüge, erscheinen die Werte plötzlich in Spalte 2. Dies passiert auch bei einigen meiner anderen Tabellen.
@brady_brady Ich arbeite immer noch an Ihrer Lösung, um zu sehen, ob ich sie zum Laufen bekomme.
Können Sie mir in der Zwischenzeit weitere Hinweise geben, die mir weiterhelfen?
Vielen Dank für Ihre Hilfe.
Betreff: ZyklusproblemSie können beispielsweise eine If-Anweisung am Ende hinzufügen
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;
,
.
);
));

Betreff: ZyklusproblemDies scheint zu funktionieren, ist aber umständlich.
If( Row() == 1,
0,
If( :C1 == 1,
If( Lag( :C1 ) == 0,
Max( :C2[Index( 1, Row() - 1 )] ) + 1,
Lag( :C2 )
),
.
)
)
Eine weitere Möglichkeit, eine Formel für die Spalte „C3“:
If(
Row() == 1,
c = 0;
c;
,
:C1 == 0,
.
,
Lag( :C1 ) == 1,
Lag( :c3 )
,
c++;
c;
)
Betreff: Zyklusproblem@jthi ! Das scheint zu funktionieren. Obwohl ich nicht sicher bin, warum es mit einer separaten IF-Anweisung funktioniert und nicht mit einer kombinierten IF-Anweisung wie in meiner @peng_liu- Änderung.
Aber was noch wichtiger ist: Warum verursacht das Erstellen der Tabellenvariable ein Problem, während das Erstellen einer Variablen innerhalb des Skripts kein Problem darstellt?
Betreff: ZyklusproblemAuch Col Cumulative Sum() kann hierfür verwendet werden
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)
,
.
);
));Betreff: ZyklusproblemDas ist großartig.
Betreff: Zyklusproblem@peng_liu , @jthi und @brady_brady Vielen Dank an alle für eure Lösungen. Besonders gut gefällt mir die Lösung von @jthi . Ich wusste gar nicht, dass man Col Cumulative Sum auf diese Weise verwenden kann. Sehr einfach, effizient und elegant.
Ich versuche immer noch, zu verstehen, wie Variablen in JMP funktionieren. Ich bin mir noch nicht ganz sicher, ob ich schon alles verstanden habe, aber ich arbeite daran.
Betreff: ZyklusproblemDas geht, aber ich bin mir nicht 100 % sicher, ob Sie das tun sollten, auch wenn es eine der besseren Funktionen von JMP-Formeln ist (der JMP-Support hat mir mitgeteilt, dass es sich um ein unbeabsichtigtes Verhalten handelt). Hier ist ein Wunschlistenelement in der Hoffnung, dass JMP anerkennt, dass es sich definitiv um ein erforderliches Verhalten handelt. Sorgen Sie dafür, dass die Verwendung von Formelausdrücken in „Jeden Wert festlegen“ und die Verwendung von Ausdrücken als erstes Argument in statistischen Formeln für Spalten zu einem unterstützten Verhalten wird .
Für das Zyklusproblem und eine Erklärung dazu können Sie sich an den JMP-Support wenden. Ich kann nur Vermutungen anstellen (die richtig oder völlig falsch sein können), da ich kein JMP-Entwickler bin, aber ich kann es irgendwie verstehen, da es versucht, mehrere Werte gleichzeitig zu sein. Dies könnte auch eine interessante Lektüre sein : Ich bin verwirrt über Variablen