Problema del cicloHo rilevato questo problema di ciclo ricorrente che non riesco a capire e spero che qualcuno possa aiutarmi.
Vedi lo script di esempio allegato. Genera una tabella. L'idea qui è che voglio etichettare ogni serie continua di 1 nella colonna 1 come un evento con un numero sequenziale.
La formula funziona. Ma quando apporto modifiche alla tabella o alle formule di riesecuzione, vengono rilevati errori di uno, due o talvolta tre cicli. Questa è solo una tabella di esempio. Nella mia tabella dati effettiva, a volte ho dovuto premere Ignora tutti i cicli fino a una dozzina di volte se cambio una formula di colonna o eseguo altre modifiche sulla tabella.
Qualcuno sa cosa sta causando questo?
Grazie
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
)
)
Automazione e scriptingRe: Problema del cicloNon sono sicuro del significato dell'avviso di ciclo. Mi sembra un falso allarme. Ma nel frattempo, immagino che il risultato del seguente script sia ciò che cerchi di ottenere e non presenti il problema del ciclo.
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: Problema del cicloMolto probabilmente i problemi del ciclo sono causati dall'impostazione del valore della variabile della tabella :P1 e dal confronto nella stessa formula
If(Row() == 1,
:P1 = 0
, :Column 1 == 1 & :Column 1[Row() - 1] == 0,
:P1 = :P1 + 1
, :Column 1 == 1,
:P1
)
Puoi usare la formula come
If(Row() == 1,
retval = 0
, :Column 1 == 1 & Lag(:Column 1) == 0,
retval = retval + 1
);
retval;

Lag() ti dà accesso ai valori precedenti in una colonna
Re: Problema del cicloCIAO,
Puoi anche ritardare la colonna formula stessa. Cioè, potresti utilizzare questa formula nella colonna C2 per i valori che hai in C1:
If( Row() == 1,
0,
Lag( :C2 ) + (Lag( :C1 ) == 0 & :C1 == 1)
)
Re: Problema del ciclo@peng_liu , @jthi e @brady_brady ...
Grazie per l'assistenza in merito. Gli script che hai fornito, tuttavia, non facevano esattamente quello che dovevo fare e quando ho provato a modificarli non funzionavano. Nello specifico, la numerazione nella colonna 2 dovrebbe apparire solo quando è presente un 1 nella colonna 1. Se è presente uno 0 nella colonna 1, la colonna 2 è vuota. Come questo...

Quando provo ad aggiungere l'istruzione IF aggiuntiva per ottenere ciò, gli script falliscono.
Ad esempio, ecco cosa ho fatto con lo 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
)
)
Ho notato anche un altro problema che potrebbe essere correlato. Quando eseguo lo script originale che ho fornito, la colonna 2 è vuota. Tuttavia, se aggiungo una colonna 3 con qualsiasi tipo di formula casuale, improvvisamente i valori appaiono nella colonna 2. Ciò accade anche su alcune delle mie altre tabelle.
@brady_brady Sto ancora lavorando alla tua soluzione per vedere se riesco a farla funzionare.
Nel frattempo, ci sono ulteriori indicazioni che puoi fornirmi per aiutarmi qui.
Grazie mille per tutto il tuo aiuto.
Re: Problema del cicloPuoi ad esempio aggiungere un'istruzione If alla fine
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: Problema del cicloSembra funzionare ma è complicato.
If( Row() == 1,
0,
If( :C1 == 1,
If( Lag( :C1 ) == 0,
Max( :C2[Index( 1, Row() - 1 )] ) + 1,
Lag( :C2 )
),
.
)
)
Un'altra opzione, una formula per la colonna "C3":
If(
Row() == 1,
c = 0;
c;
,
:C1 == 0,
.
,
Lag( :C1 ) == 1,
Lag( :c3 )
,
c++;
c;
)
Re: Problema del ciclo@jthi ! Sembra che funzioni. Anche se non sono sicuro di capire perché funziona con un'istruzione IF separata e non funziona con un'istruzione IF combinata come nella mia modifica @peng_liu .
Ma ancora più importante, perché la creazione della variabile di tabella causa un problema mentre la creazione di una variabile all'interno dello script no?
Re: Problema del cicloA questo scopo è possibile utilizzare anche 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)
,
.
);
));Re: Problema del cicloÈ fantastico.
Re: Problema del ciclo@peng_liu , @jthi e @brady_brady Grazie a tutti per le vostre soluzioni. Mi piace particolarmente la soluzione di @jthi . Non avrei mai saputo che Col Cumulative Sum potesse essere usato in questo modo. Molto semplice, efficiente ed elegante.
Sto ancora cercando di capire come funzionano le variabili in JMP. Non sono ancora sicuro di avere il quadro completo, ma ci sto lavorando.
Re: Problema del cicloPuò, ma non sono sicuro al 100% se dovresti farlo, anche se è una delle caratteristiche migliori di JMP Formulas (il supporto JMP mi ha detto che si tratta di un comportamento involontario). Di seguito è riportato un elemento dell'elenco dei desideri nella speranza che JMP riconosca che si tratta di un comportamento assolutamente necessario . Crea utilizzando le espressioni di formula in Imposta ogni valore e utilizzando le espressioni come primo argomento nel comportamento supportato dalle formule statistiche Col.
Per il problema del ciclo e la relativa spiegazione, è possibile contattare l'assistenza JMP. Potrei solo fornire supposizioni (che potrebbero essere corrette o totalmente errate) poiché non sono uno sviluppatore JMP ma posso capirlo poiché cerca di avere più valori contemporaneamente. Potrebbe anche essere una buona lettura Sono confuso sulle variabili