Hallo alle,
Ich möchte kontinuierlich Zeilen zu einer leeren Datentabelle hinzufügen, bis eine Bedingung erfüllt ist, bin mir aber nicht sicher, was ich tun soll.
Im folgenden Beispiel ist die Bedingung, ob alle Elemente im Vektor im „stationären Zustand“ Einsen sind.
ret = New Table( title,
New Column( "P", Numeric, "Continuous", Formula( ptable << get as matrix ) ),
New Column( "X(n)",
Expression,
"None",
Formula( If( Row() == 1, init_state, Lag( :Name( "X(n)" ), 1 ) * :p</img> ) ),
Set Selected,
),
New Column( "steady state",
Expression,
"None",
Formula( :Name( "X(n)" ) - Lag( :Name( "X(n)" ) ) == zeros ),
),
New Column( "States", Character, Values( names ) ),
);
P und init_state sind Matrizen, die aus einer Datentabelle gelesen werden. Zeilenwerte in X(n) sind die Multiplikation der letzten Zeilenwerte und P. Werte in der Spalte „Steady State“ sind Vektoren, die aus Nullen und Einsen bestehen und darstellen, ob die Elemente in zwei benachbarten X(n)-Vektoren gleich sind oder nicht. Ich möchte dieser Datentabelle Zeilen hinzufügen, bis der Vektor im „stationären Zustand“ nur aus Einsen besteht (dh die beiden benachbarten Vektoren in X(n) sind völlig gleich).
rownum = N Rows( ret );
cols = Column( ret, "steady state" );
ones = J( 1, vectorlength, 1 );
While((!vectorEqual(cols[rownum],ones)),
// add rows here, not sure how
rownum = N Rows( ret );
)
Eine andere Frage ist, dass ich den Befehl „show(cols[rownum])“ hinzufüge, um zu überprüfen, ob der ausgewählte Wert korrekt ist, aber Empty() angezeigt wird ... Liegt es daran, dass nicht alle Werte der Tabelle hinzugefügt werden und ich daher nicht darauf verweisen kann? Wenn ja, wie kann ich den Zustand überprüfen?
Ich würde mich über jede Hilfe sehr freuen!
Egal. Ich habe das Hinzufügen von „Formeln erneut ausführen“ gefunden. kann das Problem lösen. Danke schön!
Vielen Dank! Es klappt!
Ich habe immer noch Probleme, den Zellenwert in der letzten Zeile der Spalten zu ermitteln. Wie bereits erwähnt, wird im Protokollfenster „Empty()“ angezeigt. Ich denke, das Problem besteht darin, dass diese Werte mithilfe von Formeln zugewiesen werden, sodass sie Empty() waren, als ich versuchte, auf sie zuzugreifen. Welche Skripte sollte ich verwenden, um die Werte dieser Zellen abzurufen?
Was das Hinzufügen von Zeilen angeht, gehe ich davon aus, dass Sie nur hinzufügen müssen
rownum = N Rows( ret );
cols = Column( ret, "steady state" );
ones = J( 1, vectorlength, 1 );
While((!vectorEqual(cols[rownum],ones)),
ret << add rows(1);
dt << Rerun Formulas;
rownum = N Rows( ret );
)