Ich muss eine neue Spalte basierend auf den Ergebnissen einer Wenn/Dann-Anweisung füllenHallo, ich versuche, eine Gruppe neuer Spalten basierend auf den Ergebnissen einer Wenn/Dann-Anweisung zu erstellen und zu füllen.
SCHRITT 1:
Ich muss die neuen leeren Spalten erstellen, die gefüllt werden.(insgesamt 55)
(Jede neue Spalte ist ein numerisches, fortlaufendes Feld.)
Der Name jeder Spalte entspricht dem Namen jeder der 55 Verbindungen in der Gruppe, gefolgt von „_ppt“.Beispielsweise führt die Verbindung mit dem Namen „4:2 FTS“ zu einer neuen Spalte mit dem Namen [4:2 FTS_ppt].
SCHRITT 2:
Zeile für Zeile würde ich die neuen Spalten mit einer Wenn/Dann-Anweisung füllen, die drei vorhandene Spalten auswertet, die jeder der 55 Verbindungen in der Gruppe zugeordnet sind.Speziell,
if [RES_VALUE_4:2 FTS] >= [RL_4:2 FTS] THEN [4:2 FTS_ppt] = [RES_VALUE_4:2 FTS]
Wenn [RES_VALUE_4:2 FTS] < [RL_4:2 FTS] AND DETECT_FLAG_4:2 FTS] = N AND [RL_4:2 FTS] <= 3 THEN [4:2 FTS_ppt] = 0,0009.
wenn [RES_VALUE_4:2 FTS] < [RL_4:2 FTS] AND DETECT_FLAG_4:2 FTS] = N AND [RL_4:2 FTS] > 3 THEN [4:2 FTS_ppt] = NULL.
Hier sind die vorhandenen Spaltennamen mit einem Suffix, das dem zusammengesetzten Namen entspricht.Ich verwende JMP Pro 17.0.



Für jede Anleitung wäre ich sehr dankbar!
Automatisierung und SkripterstellungInhaltsorganisationBetreff: Ich muss eine neue Spalte basierend auf den Ergebnissen einer Wenn/Dann-Anweisung füllen- Der Zweck der Diskussions-Community besteht nicht darin, JMP-Benutzern als Quelle für die Erstellung von Skripten auf Anfrage zu dienen.Es soll Benutzern beim Erlernen von JMP helfen.
- Angesichts des von Ihnen bereitgestellten Pseudocodes ist es klar, dass Sie sich die Zeit nehmen müssen, den JMP Scripting Guide zu lesen.Es ist in der JMP-Dokumentationsbibliothek im Pulldown-Menü „Hilfe“ in JMP verfügbar.
- Nachfolgend finden Sie einen Versuch, Ihnen bei Ihrem Problem zu helfen.Es wird nicht getestet, da mir keine Ihrer Daten vorliegen.Bitte nehmen Sie sich die Zeit, den Code zu studieren und zu lernen.Die Funktionen sind im Scripting Index und in der JSL Scripting Reference ausführlich dokumentiert.
Names Default To Here( 1 );
groupList = {"RES_VALUE", "RES_TEXT", "DETECT_FLAG", "RL", "DILUTION_FACTOR"};
dt = Current Data Table();
// Find all of the different compounds. This is done by using the "RES_VALUE" columns
// and stripping off the compound names from each of them
compList = {};
For( i = 1, i <= N Cols( dt ), i++,
colName = Column( dt, i ) << get name;
If( Contains( colName, "RES_VALUE" ) == 1,
Insert Into( compList, Substr( colName, 11 ) )
);
);
// Create the columns
For Each( {comp, i}, compList,
Eval(
Parse(
"dt << New Column( \!"" || compList[i] || "_ppt" || "\!",
numeric,
continuous,
formula(
If( :\!"RES_VALUE "
|| comp || "\!"n >= :\!"RL " || comp || "\!"n,
x = :\!"RES_VALUE " || comp ||
"\!"n
);
If(
:\!"RES_VALUE " || comp ||
"\!"n < :\!"RL " || comp || "\!"n & :\!"DETECT_FLAG " || comp || "\!"n == \!"N\!" &
:\!"RL " || comp ||
"\!"n <= 3,
x = 0.0009
);
If(
:\!"RES_VALUE "
|| comp || "\!"n < :\!"RL " || comp || "\!"n & :\!"DETECT_FLAG " || comp || "\!"n == \!"N\!" &
:\!"RL "
|| comp || "\!"n > 3,
x = .
);
x;
)
);"
)
)
);
Betreff: Ich muss eine neue Spalte basierend auf den Ergebnissen einer Wenn/Dann-Anweisung füllenDanke Jim.Ja, das ist gut verstanden.Ich muss mehr Zeit mit den Grundlagen von JSL verbringen, bevor ich mich an die Arbeit mache.
Der obige Code hat alle Spalten korrekt erstellt, aber die Formel erzeugt nur Nullwerte (".").Ich konnte den Fehler nicht beheben, werde es aber weiterhin versuchen.Danke noch einmal.
Betreff: Ich muss eine neue Spalte basierend auf den Ergebnissen einer Wenn/Dann-Anweisung füllenIch werde es mir ansehen, wenn Sie einige Beispieldaten bereitstellen können.
Betreff: Ich muss eine neue Spalte basierend auf den Ergebnissen einer Wenn/Dann-Anweisung füllenDanke, Jim.Ich habe unten die JMP-Tabelle angehängt, die eine kleine Teilmenge von Zeilen aus meinem Datensatz enthält.
Betreff: Ich muss eine neue Spalte basierend auf den Ergebnissen einer Wenn/Dann-Anweisung füllenZwei Dinge mussten geändert werden.
- Der Wert der Variablen x, die in der Formel verwendet wird, muss für jede Zeilenausführung initialisiert werden.
- Die Formelausführung muss nicht unterdrückt werden.
Names Default To Here( 1 );
groupList = {"RES_VALUE", "RES_TEXT", "DETECT_FLAG", "RL", "DILUTION_FACTOR"};
dt = Current Data Table();
// Find all of the different compounds. This is done by using the "RES_VALUE" columns
// and stripping off the compound names from each of them
compList = {};
For( i = 1, i <= N Cols( dt ), i++,
colName = Column( dt, i ) << get name;
If( Contains( colName, "RES_VALUE" ) == 1,
Insert Into( compList, Substr( colName, 11 ) )
);
);
// Create the columns
For Each( {comp, i}, compList,
Eval(
Parse(
"dt << New Column( \!"" || compList[i] || "_ppt" ||
"\!",
numeric,
continuous, formula(
x=.;
If( :\!"RES_VALUE "
|| comp || "\!"n >= :\!"RL " || comp || "\!"n,
x = :\!"RES_VALUE " || comp ||
"\!"n
);
If(
:\!"RES_VALUE " ||
comp || "\!"n < :\!"RL " || comp || "\!"n & :\!"DETECT_FLAG " || comp || "\!"n == \!"N\!" &
:\!"RL "
|| comp || "\!"n <= 3,
x = 0.0009
);
If(
:\!"RES_VALUE "
|| comp || "\!"n < :\!"RL " || comp || "\!"n & :\!"DETECT_FLAG " || comp || "\!"n == \!"N\!" &
:\!"RL "
|| comp || "\!"n > 3,
x = .
);
x;
)
);"
)
)
);
dt << Suppress Formula Eval( 0 );
Betreff: Ich muss eine neue Spalte basierend auf den Ergebnissen einer Wenn/Dann-Anweisung füllenDanke, Jim.Ich wollte kurz nach Ihrer Antwort zurückkommen, habe aber versucht, den Code zu fälschen.Ich habe es aus irgendeinem Grund nicht zum Laufen gebracht.Ich habe den Debugger verwendet und diese Meldung erhalten:

Ich wollte Sie nur wissen lassen, dass ich Ihren Beitrag erhalten habe – ich werde es weiter versuchen.Danke.
Betreff: Ich muss eine neue Spalte basierend auf den Ergebnissen einer Wenn/Dann-Anweisung füllen
Betreff: Ich muss eine neue Spalte basierend auf den Ergebnissen einer Wenn/Dann-Anweisung füllenJa!Ich habe es gerade zum Laufen gebracht.Nochmals vielen Dank für Ihre Hilfe!