Problème de cycleJ'ai ce problème récurrent de détection de cycle que je n'arrive pas à comprendre et j'espère que quelqu'un pourra m'aider.
Voir l'exemple de script ci-joint. Il génère un tableau. L'idée ici est que je veux étiqueter chaque exécution continue de 1 dans la colonne 1 comme un événement avec un numéro séquentiel.
La formule fonctionne. Mais lorsque j'apporte des modifications au tableau ou à la réexécution des formules, j'obtiens un, deux ou parfois trois erreurs détectées par cycle. Ceci est juste un exemple de tableau. Sur ma table de données actuelle, j'ai dû appuyer sur Ignorer tous les cycles parfois jusqu'à une douzaine de fois si je modifie une formule de colonne ou si je fais d'autres modifications sur la table.
Est-ce que quelqu'un sait ce qui cause cela ?
Merci
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
)
)
Automatisation et scriptsRe : Problème de cycleJe ne sais pas ce que signifie l'avertissement de cycle. Cela me semble être une fausse alerte. Mais en attendant, je suppose que le résultat du script suivant est ce que vous essayez d’atteindre et qu’il n’y a pas de problème de cycle.
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
)
)
Re : Problème de cycleIl est très probable que les problèmes de cycle soient causés par la définition de la valeur de la variable de table : P1 et par leur comparaison dans la même formule.
If(Row() == 1,
:P1 = 0
, :Column 1 == 1 & :Column 1[Row() - 1] == 0,
:P1 = :P1 + 1
, :Column 1 == 1,
:P1
)
Vous pouvez utiliser une formule comme
If(Row() == 1,
retval = 0
, :Column 1 == 1 & Lag(:Column 1) == 0,
retval = retval + 1
);
retval;

Lag() vous donne accès aux valeurs antérieures d'une colonne
Re : Problème de cycleSalut,
Vous pouvez également décaler la colonne de formule elle-même. Autrement dit, vous pouvez utiliser cette formule dans la colonne C2 pour les valeurs que vous avez dans C1 :
If( Row() == 1,
0,
Lag( :C2 ) + (Lag( :C1 ) == 0 & :C1 == 1)
)
Re : Problème de cycle@peng_liu , @jthi et @brady_brady ...
Merci pour votre aide à ce sujet. Cependant, les scripts que vous avez fournis n'ont pas tout à fait fait ce que je devais faire et lorsque j'ai essayé de les modifier, ils n'ont pas fonctionné. Plus précisément, la numérotation dans la colonne 2 ne doit apparaître que lorsqu'il y a un 1 dans la colonne 1. S'il y a un 0 dans la colonne 1, alors la colonne 2 est vide. Comme ça...

Lorsque j'essaie d'ajouter l'instruction IF supplémentaire pour y parvenir, les scripts échouent.
Par exemple, voici ce que j'ai fait avec le script @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
)
)
J'ai également remarqué un autre problème qui peut être lié. Lorsque j'exécute le script original que j'ai fourni, la colonne 2 est vide. Cependant, si j'ajoute une colonne 3 avec n'importe quel type de formule aléatoire, les valeurs apparaissent soudainement dans la colonne 2. Cela se produit également sur certaines de mes autres tables.
@brady_brady Je travaille toujours sur votre solution pour voir si je peux la faire fonctionner.
En attendant, pouvez-vous me fournir d'autres conseils pour m'aider ici.
Merci beaucoup pour toute votre aide.
Re : Problème de cycleVous pouvez par exemple ajouter une instruction If à la fin
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;
,
.
);
));

Re : Problème de cycleCela semble fonctionner mais c'est fastidieux.
If( Row() == 1,
0,
If( :C1 == 1,
If( Lag( :C1 ) == 0,
Max( :C2[Index( 1, Row() - 1 )] ) + 1,
Lag( :C2 )
),
.
)
)
Autre option, une formule pour la colonne "C3" :
If(
Row() == 1,
c = 0;
c;
,
:C1 == 0,
.
,
Lag( :C1 ) == 1,
Lag( :c3 )
,
c++;
c;
)
Re : Problème de cycle@jthi ! Cela semble fonctionner. Bien que je ne sois pas sûr de comprendre pourquoi cela fonctionne avec une instruction IF distincte et cela ne fonctionne pas avec une instruction IF combinée comme dans ma modification @peng_liu .
Mais plus important encore, pourquoi la création de la variable de table pose-t-elle un problème alors que la création d'une variable dans le script ne pose pas de problème ?
Re : Problème de cycleCol Cumulative Sum() peut également être utilisé pour cela
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)
,
.
);
));Re : Problème de cycleC'est génial.
Re : Problème de cycle@peng_liu , @jthi et @brady_brady Merci à tous pour vos solutions. J'aime particulièrement la solution de @jthi . Je n'aurais jamais cru que Col Cumulative Sum pouvait être utilisé de cette façon. Très simple, efficace et élégant.
J'essaie toujours de comprendre comment fonctionnent les variables dans JMP. Je ne suis pas encore sûr d'avoir une vue d'ensemble, mais j'y travaille.
Re : Problème de cycleC'est possible, mais je ne suis pas sûr à 100 % si vous le devriez, même s'il s'agit de l'une des meilleures fonctionnalités de JMP Formulas (le support JMP m'a dit qu'il s'agissait d'un comportement involontaire). Voici un élément de liste de souhaits en espérant que JMP reconnaîtrait qu'il s'agit d'un comportement absolument nécessaire . Faites en utilisant des expressions de formule dans Définir chaque valeur et en utilisant des expressions comme premier argument dans le comportement pris en charge par les formules statistiques Col.
Pour connaître le problème du cycle et son explication, vous pouvez contacter le support JMP. Je ne peux que fournir des suppositions (qui peuvent être correctes ou totalement incorrectes) car je ne suis pas un développeur JMP mais je peux un peu le comprendre car il essaie d'avoir plusieurs valeurs en même temps. Cela pourrait aussi être une bonne lecture . Je suis confus au sujet des variables