Ich habe zwei Listen aus einem Datensatz extrahiert, eine Liste enthält Spaltennamen und eine andere, bestimmte Werte (ein Wert aus jeder Spalte) basierend auf bestimmten Bedingungen extrahiert.
List1 = {Wweight, O2 Uptake.......};
Liste2 = {38,59.08.....};
Nach diesem Schritt erhält der Benutzer eine JMP-Tabelle wie die folgende als Ausgabe mit Optionen, ob der vom Skript extrahierte Wert entfernt werden soll oder nicht:

Der Benutzer entfernt entweder den Wert aus der Haupttabelle oder beschließt, ihn beizubehalten.
Was ich weiterhin versuche, ist:
1) Ich führe ein Skript aus, um Mindestwerte zu finden, und wenn der Wert mit dem Wert dieser Spalte übereinstimmt (was bedeutet, dass der Benutzer beschlossen hat, den Wert beizubehalten), möchte ich den nächsten Mindestwert erhalten
2) Wenn nicht, extrahiere ich den Mindestwert so wie er ist.
dt = current data table();
colNamesList = dt << get column names( string, numeric, continuous );
nc = N Items( colNamesList );
Names = {};
MinVals = {};
MinValList = {};
For( i = 1, i <= nc, i++,
Cols = Column( dt, i );
Insert into(Names, colNamesList[i]);
MinValue = Col Min( Cols );
Insert into(MinVals, MinValue);
MinRows = dt << get rows where( As Column( Cols ) == MinValue );
Insert into(MinValList, MinRows[1]);
);
dt1 = new table( "Data",
New Column( "Column Name", character, nominal, values(Names)),
New column( "Min value", numeric, nominal, values( MinVals)),
New Column( "Row Number", expression, nominal, values( MinValList ));
);Wie kann ich die Werte abgleichen, um für jede Zeile zu prüfen, ob der Benutzer den Wert entfernt hat oder nicht?
//Second Part
For( i = 1, i <= nc, i++,
Cols = Column( dt, i );
colMin = Col Min( Cols );
//If value in Col min is equal to value in MinValue, then skip that value and choose the next minimum value, else add that value to a new list
@cwillden Es tut mir leid, es funktioniert bei mir immer noch nicht. Ich möchte nur überprüfen, ob in den Spalten der Linnerud-Tabelle noch Mindestwerte vorhanden sind. Aber ich schaffe es nicht, das Skript zum Laufen zu bringen.
Ich hätte wahrscheinlich am Ende dieser Definition für row_temp ein „[1]“ einfügen sollen. Tut mir leid, ich fotografiere hier ein wenig aus der Hüfte, ohne dies tatsächlich mit einer Beispieldatentabelle durch JMP laufen zu lassen.Stellen Sie sicher, dass Sie das Ganze in Klammern setzen, bevor Sie [1] hinzufügen.
(row_tmp <SPAN class="token operator">=</SPAN> dt1 <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> Get Rows Where</SPAN><SPAN class="token punctuation">(</SPAN><SPAN class="token punctuation">:</SPAN>Column Name <SPAN class="token operator">==</SPAN> Cols<SPAN class="token punctuation">))[1]</SPAN><SPAN class="token punctuation">;</SPAN>
Sie vergleichen wahrscheinlich auch eher mit einem Namensobjekt als mit einer Zeichenfolge.Versuchen Sie Folgendes, um den Spaltennamen als Zeichenfolge abzurufen:
Cols = Column(dt, 1) << Get Name;
Ich denke, mit diesen beiden Änderungen sollte es funktionieren.
@cwillden

Ich erhalte diese Ausgabe für row_tmp
Sie könnten so etwas tun:
For( i = 1, i <= nc, i++,
Cols = Column( dt, i );
colMin = Col Min( Cols );
//If value in Col min is equal to value in MinValue,
//then skip that value and choose the next minimum value, else add that value to a new list
//get the corresponding row in the table (if it doesn't align with the index of your loop)
row_tmp = dt1 << Get Rows Where(:Column Name == Cols);
if(Min value[row_tmp] == colMin,
//Insert Code to look for next smallest value
)
)
row_tmp ruft die Zeile in dt1 ab, in der der Wert von Column Name mit dem aktuellen Spaltennamen in Cols übereinstimmt.