Zyklus in der Berechnung erkanntIch weiß, dass JMP keine Tabellenkalkulation ist und ich dies möglicherweise anders berechnen muss als in Excel, aber ich kann die Problemumgehung nicht herausfinden.
Ich habe eine Berechnung, bei der eine Variable auf sich selbst angewiesen ist und die den Fehler „Zyklus für Datenspalte erkannt“ anzeigt
Ich habe einen Tank, in den im Laufe der Zeit Lösung hinzugefügt wird. Ich weiß, wie viel ich hinzugefügt habe und wie groß das Gesamtvolumen des Tanks ist. Zu den Probenzeiten entnehme ich auch Volumen aus dem Tank. Ich muss berechnen, wie viel Lösung A mit jedem Probenvolumen entfernt wird. Aber ich kann nicht herausfinden, wie das geht, ohne dass dieser Zyklusfehler auftritt. Bitte helfen Sie!
New Column( "Soln A Removed in Current Draw (mL)",
Numeric,
"Continuous",
Formula(
:Name( "Soln A concentration before draw (mL/L)" ) * (
:Name( "Manually Recorded Sample Volume (mL)" ) / 1000)
),
);
New Column( "Soln A concentration before draw (mL/L)",
Numeric,
"Continuous",
Formula(
If(
(:Name( "Soln A added (mL)" )
/
:Name( "Culture Volume Pre-Drawdown (mL)" )
)
* 1000,
(
(
:Name( "Soln A added (mL)" )
-
Lag(
:Name( "Cumulative Soln A Removed (mL)" ), 1
)
)
/
:Name( "Culture Volume Pre-Drawdown (mL)" )
) * 1000
)
),
);
New Column( "Cumulative Soln A Removed (mL)",
Numeric,
"Continuous",
Formula(
Col Cumulative Sum(
:Name( "Soln A Removed in Current Draw (mL)" ),
:Batch Number
)
),
);
New Column( "Soln A added per current Tank Volume (mL/L)",
Numeric,
"Continuous",
Formula(
(:Name( "Soln A added (mL)" ) * 1000) /
:Name( "Culture Volume Pre-Drawdown (mL)" )
),
);Erweiterte statistische ModellierungBetreff: Zyklus in der Berechnung erkanntDas Problem scheint darin zu liegen, dass der Spaltenwert für „Soln A-Konzentration vor der Entnahme (ml/l)“ immer auf einen fehlenden Wert gesetzt wurde.In JMP führt die Addition zweier Werte, von denen einer ein fehlender Wert ist, immer zu einem fehlenden Wert.....der mit der Funktion Sum() überschrieben werden kann.Hier sind die Ergebnisse, die ich nach der Änderung erhalte.Die geänderte JSL ist unten aufgeführt

Names Default To Here( 1 );
dt = Current Data Table();
dt << New Column( "Soln A Removed in Current Draw (mL)" );
dt << New Column( "Soln A concentration before draw (mL/L)" );
dt << New Column( "Cumulative Soln A Removed (mL)" );
dt << New Column( "Soln A added per current Tank Volume (mL/L)" );
For Each Row(
// Soln A added per current Tank Volume (mL/L)
:Name( "Soln A added per current Tank Volume (mL/L)" ) = (:Name( "Soln A added (mL)" ) * 1000) /
:Name( "Culture Volume Pre-Drawdown (mL)" );
// Soln A concentration before draw (mL/L)
If( :Name( "Soln A added (mL)" ) / :Name( "Culture Volume Pre-Drawdown (mL)" ) * 1000,
:Name( "Soln A concentration before draw (mL/L)" ) = Sum(
:Name( "Soln A added (mL)" ),
-1 * Lag( :Name( "Cumulative Soln A Removed (mL)" ) )
) / :Name( "Culture Volume Pre-Drawdown (mL)" ) * 1000
);
// Soln A Removed in Current Draw (mL)
:Name( "Soln A Removed in Current Draw (mL)" ) = :Name( "Soln A concentration before draw (mL/L)" ) * (
:Name( "Manually Recorded Sample Volume (mL)" ) / 1000);
// Cumulative Soln A Removed (mL)
curBatch = :Batch Number;
curRow = Row();
:Name( "Cumulative Soln A Removed (mL)" ) = Sum(
:Name( "Soln A Removed in Current Draw (mL)" )[dt << get rows where( :Batch Number == curBatch & Row() <= curRow )]
);
);
Betreff: Zyklus in der Berechnung erkanntIch habe Ihre Methode an einer etwas anderen Tabelle ausprobiert (ich habe nur die Bach-Nummernspalte hinzugefügt, aber ich denke, das Problem besteht immer noch. Anstelle einer Fehlermeldung erhalte ich leere Zellen. Gibt es eine Problemumgehung, die es einer Variablen ermöglicht, sich auf ihren letzten Wert zu verlassen?
Names Default To Here( 1 );
dt = Current Data Table();
dt << New Column( "Soln A Removed in Current Draw (mL)" );
dt << New Column( "Soln A concentration before draw (mL/L)" );
dt << New Column( "Cumulative Soln A Removed (mL)" );
dt << New Column( "Soln A added per current Tank Volume (mL/L)" );
For Each Row(
// Soln A added per current Tank Volume (mL/L)
:Name( "Soln A added per current Tank Volume (mL/L)" ) = (:Name( "Soln A added (mL)" ) * 1000) /
:Name( "Culture Volume Pre-Drawdown (mL)" ) ;
// Soln A concentration before draw (mL/L)
If( :Name( "Soln A added (mL)" ) / :Name( "Culture Volume Pre-Drawdown (mL)" ) * 1000,
:Name( "Soln A concentration before draw (mL/L)" ) = :Name( "Soln A added (mL)" )
-Lag( :Name( "Cumulative Soln A Removed (mL)" ) ) / :Name( "Culture Volume Pre-Drawdown (mL)" ) *
1000
);
// Soln A Removed in Current Draw (mL)
:Name( "Soln A Removed in Current Draw (mL)" ) = :Name( "Soln A concentration before draw (mL/L)" ) *
(:Name( "Manually Recorded Sample Volume (mL)" ) / 1000);
// Cumulative Soln A Removed (mL)
curBatch = :Batch Number ;
curRow = Row();
:Name( "Cumulative Soln A Removed (mL)" ) = Sum(
:Name( "Soln A Removed in Current Draw (mL)" )[dt << get rows where(
:Batch Number == curBatch & Row() <= curRow
)]
);
);
Betreff: Zyklus in der Berechnung erkanntHier ist eine andere Sicht auf das Problem.Ich konnte es angesichts der von Ihnen bereitgestellten Daten nicht vollständig testen, aber ich denke, Sie werden den Ansatz erkennen, den ich verfolge, und Sie sollten in der Lage sein, darauf aufzubauen.
Names Default To Here( 1 );
dt = Current Data Table();
dt << New Column( "Soln A Removed in Current Draw (mL)" );
dt << New Column( "Soln A concentration before draw (mL/L)" );
dt << New Column( "Cumulative Soln A Removed (mL)" );
dt << New Column( "Soln A added per current Tank Volume (mL/L)" );
For Each Row(
// Soln A added per current Tank Volume (mL/L)
:Name( "Soln A added per current Tank Volume (mL/L)" ) = (:Name( "Soln A added (mL)" ) * 1000) /
:Name( "Culture Volume Pre-Drawdown (mL)" ) ;
// Soln A concentration before draw (mL/L)
If( :Name( "Soln A added (mL)" ) / :Name( "Culture Volume Pre-Drawdown (mL)" ) * 1000,
:Name( "Soln A concentration before draw (mL/L)" ) = :Name( "Soln A added (mL)" )
-Lag( :Name( "Cumulative Soln A Removed (mL)" ) ) / :Name( "Culture Volume Pre-Drawdown (mL)" ) *
1000
);
// Soln A Removed in Current Draw (mL)
:Name( "Soln A Removed in Current Draw (mL)" ) = :Name( "Soln A concentration before draw (mL/L)" ) *
(:Name( "Manually Recorded Sample Volume (mL)" ) / 1000);
// Cumulative Soln A Removed (mL)
curBatch = :Batch Number ;
curRow = Row();
:Name( "Cumulative Soln A Removed (mL)" ) = Sum(
:Name( "Soln A Removed in Current Draw (mL)" )[dt << get rows where(
:Batch Number == curBatch & Row() <= curRow
)]
);
);
Betreff: Zyklus in der Berechnung erkanntJa, es wäre großartig, wenn ich die entfernte Menge eingeben könnte, aber ich würde die entfernte Menge nur anhand der aktuellen Konzentration kennen, die, wie Sie sehen, auch von der zuvor entfernten Menge abhängt.
Betreff: Zyklus in der Berechnung erkanntDu hast Recht. JMP ist keine Tabellenkalkulation.
Sie können sich eine JMP-Datentabelle als eine Sammlung von Beobachtungen (d. h. einen Datensatz) vorstellen. Daher ist jede Volumenänderung eine neue Zeile. Sie haben also möglicherweise eine Spalte, die das hinzugefügte oder entfernte Volume darstellt, und eine andere, die das aktuelle Volume darstellt.
Ich denke, die erste Spalte, Lösung A in aktueller Zeichnung entfernt, sollte ein Wert sein, der eingegeben und nicht berechnet wird. Das könnte die zyklischen Bezüge zerstören. Möglicherweise dasselbe für die letzte Spalte, Lösung A in aktueller Zeichnung hinzugefügt. Passen Sie die Formeln entsprechend an.