Erstellen/Hinzufügen neuer Spalten mit VeriblesHallo Leute, ich entschuldige mich für den verwirrenden Titel. Ich war mir nicht sicher, wie ich ihn formulieren sollte.
Meine Frage ist: Ich habe einen Code, in dem ich mithilfe langer Bedingungen neue Spalten hinzufüge.
Die Bedingungen sind für alle Spalten gleich, mit Ausnahme eines Parameters, der sich ändert.
Gibt es eine Möglichkeit, statt jedes Mal den vollständigen Code und die Bedingungen mit dem neuen Parameterwert zu schreiben, eine Vorlage (wie eine Funktion) zu erstellen, bei der ich anstelle des Parameters eine Variable verwende, an die ich jedes Mal den benötigten Wert für die Bedingungen der neuen Spalte sende?
Automatisierung und SkriptingGrundlegende Datenanalyse und ModellierungBetreff: Neue Spalten mit Veribles erstellen/hinzufügenSie können Funktionen oder Ausdrücke für so etwas verwenden
https://www.jmp.com/support/help/en/18.0/#page/jmp/advanced-expressions-macros-and-lists.shtml#ww339382
https://www.jmp.com/support/help/en/18.0/#page/jmp/advanced-functions.shtml#
Einfügen eines Ausdrucks in einen anderen mit Eval Insert, Eval Expr, Parse und Substitute
Betreff: Neue Spalten mit Veribles erstellen/hinzufügenEs ist nicht nötig, Code zu schreiben.
Seit JMP 18 ist dies super einfach – schauen Sie sich einfach Diskussionen/Formeln/ – Funktion Nr. 3 an.
Zusamenfassend:
Wählen Sie die Spalten aus, die Sie als Eingabe verwenden möchten, klicken Sie dann mit der rechten Maustaste auf eine Spaltenüberschrift und klicken Sie auf
neue Formelspalte / 
Als letzten Schritt geben Sie Ihre Formel ein und klicken auf 
[Ich habe 128 Spalten ausgewählt, also erstelle 128 .
Wenn Sie N Spalten ausgewählt haben, werden N Spalten erstellt : )
Betreff: Neue Spalten mit Veribles erstellen/hinzufügenWenn Sie über das Rechtsklickmenü „Neue Formel“ immer wieder genau dieselbe Formel verwenden möchten, können Sie Ihre eigene „benutzerdefinierte Funktion“ erstellen und die Option „Kategorie transformieren“ aktivieren, damit sie im Menü angezeigt wird.
Nach einem Neustart muss der Code erneut ausgeführt werden, also binden Sie ihn in ein AddIn oder in Ihre Startskripte ein.
Names Default To Here( 1 );
myAdd =
New Custom Function(
"custom",
"Add",
Function( {x, y = 1},
x + y - 1
)
);
myAdd << Transform Category( 1 );aus dem Skriptindex:

Dieser Ansatz ist allerdings sehr "statisch". Um die Möglichkeit zu bekommen, einen Parameter zu ändern, muss man hier abstimmen:
Neues Formelspaltenmenü: benutzerdefinierte Mini-GUIs
Betreff: Neue Spalten mit Veribles erstellen/hinzufügenHier ist ein Beispiel für eine Funktion, die eine Zahl addiert. Es fehlen einige Prüfungen, um eine „gute“ Funktion zu sein, aber es vermittelt die notwendige Idee, dass Werte, die sich ändern könnten (in diesem Fall Spaltenname und hinzuzufügende Zahl), ausgewertet werden müssen (siehe Einen Ausdruck in einen anderen einfügen..., das ich zuvor erwähnt habe).
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
cols = {"height", "weight"};
add_num_to_col = Function({dt, colname, num_to_add}, {Default Local},
new_col = Eval(EvalExpr(
dt << New Column(colname || " add " || char(num_to_add), Numeric, Continuous, Formula(
Expr(NameExpr(AsColumn(dt, colname))) + Expr(num_to_add)
));
));
return(new_col);
);
col1 = add_num_to_col(dt, "height", 10);
col2 = add_num_to_col(dt, "height", 20);
col3 = add_num_to_col(dt, "weight", 5);
Write();
Manchmal ist die Verwendung von Eval(Substitute()) eine sauberere und leichter verständliche Lösung und könnte ungefähr so aussehen
add_num_to_col = Function({dt, colname, num_to_add}, {Default Local},
new_col = Eval(Substitute(
Expr(dt << New Column(colname || " add " || char(num_to_add), Numeric, Continuous, Formula(
_colname_ + _num_to_add_
))),
Expr(_colname_), Name Expr(AsColumn(dt, colname)),
Expr(_num_to_add_), num_to_add
));
return(new_col);
);Betreff: Neue Spalten mit Veribles erstellen/hinzufügenEine Kombination der vorherigen Ansätze – mit einer kleinen Wendung :
- Erstellen Sie eine benutzerdefinierte Funktion *)
- füge es einer Formelkategorie hinzu
- Klicken Sie mit der rechten Maustaste auf eine Spaltenüberschrift und klicken Sie auf Neue Formelspalte /

- Verwenden Sie die neue Formel
- ... und geben Sie den Parameter manuell ein:

*)
Add Custom Functions(
New Custom Function(
"custom",
"add++",
Function( {column, num_to_add},
{Default Local},
column,
num_to_add
),
<<FORMULA category=""></FORMULA>The benefit: the user can enter specific parameters for every new column.
The disadvantage: no <STRONG><EM>Charge</EM> </STRONG>mode like in the previous posts.<BR /><BR />kind of disadvantage: JMP doesn't <EM>lösen/ersetzen</EM> the formula, it keeps it as <FONT face="courier new,courier">hinzufügen++(...)</FONT>.<BR /> To keep it alive the formula definition has to be executed again after a restart of JMP - and maybe: shared with colleagues.
Betreff: Neue Spalten mit Veribles erstellen/hinzufügenVielen Dank an alle für die Hilfe.
Ich habe ein neues damit zusammenhängendes Problem, das mir vielleicht jemand erklären kann.
Ich habe die folgende Methode verwendet, um Zeilen ohne Daten in einer bestimmten Spalte zu löschen:
dt << auswählen, wo (fehlt (Spalte (dt, col_name) [Zeile ()]));
*Dadurch werden zwar die richtigen Zeilen gelöscht, gleichzeitig aber auch die Werte in der Spalte. Kann mir jemand den Fehler nennen?
Anbei das Skript selbst:
Betreff: Neue Spalten mit Veribles erstellen/hinzufügenNames Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
col_name="x";
New column(col_name); // maybe another column with the same name?
new_col = New column(col_name, Formula(if(:height>60,1 )));
// get the correct column name - uncomment to make it work
//col_name = new_col << get name();
dt << select where( Is missing( Column( dt,col_name )[row()] ));
wait(1);
dt << delete rows;
Betreff: Neue Spalten mit Veribles erstellen/hinzufügenIch empfehle nicht, Zeichenfolgen zum Verweisen auf Spalten zu verwenden. Es kommt so oft vor, dass die eigentliche Spalte durch Hinzufügen einer „2“ erstellt wird – und die Zeichenfolge zu einer anderen Spalte führt.
Wenn Sie die Spalte generieren, erhalten Sie einen Handle für die Spalte. Verwenden Sie einfach diesen Handle – und er führt Sie zur richtigen Spalte:
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
col_name="x";
new_col = New column(col_name, Formula(if(:height>60,1 )));
dt << select where( Is missing( new_Col[] ));
Betreff: Neue Spalten mit Veribles erstellen/hinzufügenMir gefällt auch nicht das [] , um die Spalte Column(col_name) durch den aktuellen Wert As column(col_name) zu ersetzen.
:col kann beides - und ich habe von @jthi gelernt:
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
col_name="x";
new_col = New column(col_name, Formula(if(:height>60,1 )));
myCol = Name Expr(As Column(new_col)); // very cool trick (c) Jarmo
Show(Name Expr(myCol));
dt << select where( Is missing( myCol ));