Errore del ciclo di dipendenza della formula della colonnaCiao a tutti,
Mi chiedo solo come possiamo fare riferimenti circolari in JSL. Ad esempio, ho una quantità di popolazione e un tasso di fallimento. Ma il tasso di fallimento per ogni anno dipende dalla sopravvivenza parti.
Anno Attrezzatura originale Guasto Sopravvivere
1 100 1 99
2 99 2 97
3 97 3 94
So che JMP non consente a una colonna di avere una formula che dipende dall'altra colonna formulata. C'è un trucco per aggirare questo caso?
Grazie
Grazie
Automazione e scriptingRi: Errore del ciclo di dipendenza della formula della colonnaIn JMP è possibile avere colonne formula che utilizzano altre colonne formula.

Come inseriresti nuovi dati nel tuo caso? Quali colonne devono essere calcolate e in base a quali colonne?
Ri: Errore del ciclo di dipendenza della formula della colonnaGrazie per il tuo suggerimento Questo è il modo in cui lo configurerei, ma itera solo per 2 righe e richiederebbe troppo tempo solo per quella riga.
New Table( "test",
Add Rows( 7 ),
New Column ("Year", Set Values ([1,2,3,4,5,6,7])),
New Column ("Failure Rate", Set Values ([0.1,0.1,0.15,0.2,0.25,0.3,0.35])),
New Column( "original", Set Values( [100, ., ., ., ., ., .] ) ),
New Column( "failed", formula (:Failure Rate *:original) ),
New Column( "Survive", formula (:original - :failed ))
);
Wait( 2 );
For Each Row(
If( Row() != 1,
:original = Lag( :Survive )
)
);
Ri: Errore del ciclo di dipendenza della formula della colonnaCalcola la nuova colonna originale e utilizzala per i tuoi calcoli
Names Default To Here(1);
dt = New Table("test",
Add Rows(7),
New Column("Year", Set Values([1, 2, 3, 4, 5, 6, 7])),
New Column("Failure Rate", Set Values([0.1, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35])),
New Column("original", Set Values([100, ., ., ., ., ., .])),
New Column("failed", formula(:Failure Rate * :original)),
New Column("Survive", formula(:original - :failed))
);
dt << New Column("OriginalF", Numeric, Continuous, Formula(
If(Row() == 1,
:original
,
Lag(:OriginalF) - Lag(:OriginalF) * Lag(:Failure Rate)
);
));
dt << New Column("FailedF", Numeric, Continuous, Formula(
:OriginalF * :Failure Rate;
));
dt << New Column("SurviveF", Numeric, Continuous, Formula(
:OriginalF - :FailedF
));

Ri: Errore del ciclo di dipendenza della formula della colonna jthi.Questo è un modo molto intelligente per interrompere il ciclo di riferimento.
Ri: Errore del ciclo di dipendenza della formula della colonna@jthi ha scritto:
Calcola la nuova colonna originale e utilizzala per i tuoi calcoli
e poi: torna ai vecchi nomi di colonna.
Quindi, il trucco è: non usare i "fails" per calcolare i valori originali 
Names Default To Here(1);
New Table( "test",
Add Rows( 7 ),
New Table Variable( "original", 100 ),
New Column( "Year", Numeric, "Continuous", Format( "Best", 10 ), Set Values( [1, 2, 3, 4, 5, 6, 7] ) ),
New Column( "Failure Rate",
Numeric,
"Continuous",
Format( "Best", 10 ),
Set Values( [0.1, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35] )
)
);
New Column("Original", Numeric, Continuous, Formula(
If(Row() == 1,
:original
,
Lag(:Original) - Lag(:Original) * Lag(:Failure Rate)
);
));
New Column("Failed", Numeric, Continuous, Formula(
:Original * :Failure Rate;
));
New Column("Survive", Numeric, Continuous, Formula(
:Original - :Failed
));
Ri: Errore del ciclo di dipendenza della formula della colonnadivertente, come una vecchia macchina 
bene che si avvia dopo il 2° tentativo.
lo stesso dalla tua parte?
New Table( "test",
Add Rows( 7 ),
New Column( "Year", Set Values( [1, 2, 3, 4, 5, 6, 7] ) ),
New Column( "Failure Rate",
Set Values( [0.1, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35] )
),
New Column( "original", Set Values( [100, ., ., ., ., ., .] ) ),
New Column( "failed" ),
New Column( "survive" )
);
start = Function( {},
:survive << set formula(
If( Row() != 1,
:original = Lag( :Survive )
);
:failed = :Failure Rate * :original;
:original - :failed;
)
);
start();
start();
Ri: Errore del ciclo di dipendenza della formula della colonnaCon la quantità originale e i valori di errore è possibile inserire tutti i valori. (*)
Quindi potresti impostare uno script che viene attivato ogni volta che viene digitato un valore.
È necessario fare clic una volta su **)

...allora andrà tutto bene:
Se vengono aggiunte righe o viene modificato un valore di input (*), la tabella viene aggiornata: tutte le altre modifiche verranno ignorate.
New Table( "test",
Add Rows( 7 ),
New Column( "original", Set Values( [100, ., ., ., ., ., .] ) ),
New Column( "failed", Set Values( [1, 2, 3, 5, 32, 2, 6] ) ),
New Column( "Survive" )
);
:survive << set Formula(
If( Row() != 1,
:original = Lag( :Survive )
);
:original - :failed;
);
Wait( 0 );
:survive << set Formula(
If( Row() != 1,
:original = Lag( :Survive )
);
:original - :failed;
);
modificare:
hm, non noto la differenza rispetto all'ultima volta, ma ora l'aggiornamento automatico non funziona all'inizio
--> quindi attivalo due volte 
[Spero che domani non avrò bisogno di 3 prove...]
modificare:
non necessario Per ogni riga RIMOSSO.
**)
- qualche idea su come eliminare questo messaggio? ->
- qualche idea del perché l'ultimo: sopravvivere manca la voce [almeno oggi è meglio: non manca più:]
- hai idea del perché oggi ho bisogno del comando formula 2x ???