Mehrere Spalten basierend auf Zeichenfolgen in ihrem Namen löschenHallo,
Ich muss mehrere Spalten basierend auf den darin enthaltenen Zeichenfolgen löschen, aber manchmal möchte ich einige andere behalten, auch wenn sie diese Zeichenfolgen nicht enthalten.
Folgen Sie also der Lösung dieses Beitrags Mehrere Spalten basierend auf dem Spaltennamen löschen
dt = Open( "$sample_data/Hollywood Movies.jmp" );
col_names = dt << Get Column Names( String );
For( i = N Items( col_names ), i > 0, i--,
If(
Not(
Contains( col_names[i], "Gross") | contains(col_names[i], "Genre" ) | col_names[i] == "theme"),
Remove From( col_names, i)
)
);
Ich möchte also alles entfernen, was nicht in „Gross“ oder „Genre“ enthalten ist, aber wenn der Spaltenname == „theme“ ist, entfernen Sie es nicht.
Es scheint, dass es im Moment nicht funktioniert! Warum?

Der zweite Punkt zu dieser Frage
Wie kann ich „col_names“ als Datentabelle sehen, damit ich weiß, was die Ausgabe ist, ohne den Mauszeiger auf „col_names“ zu bewegen? Denn manchmal habe ich eine lange Liste mit Spaltennamen und es ist nicht effizient, den Mauszeiger darauf zu bewegen, um zu sehen, was in dieser Spaltenliste enthalten ist.
Danke!
MassenanpassungBetreff: Mehrere Spalten basierend auf Zeichenfolgen in ihrem Namen löschenIhre Verwirrung bezüglich der Datentabelle ist etwas, das ich schon einmal gesehen habe.Der Unterschied zu JMP und seinen Datentabellen besteht darin, dass eine Datentabelle als Basiselement betrachtet werden muss.Meistens sieht man eine JSL-Zeile wie:
dt = Open("$SAMPLE_DATA/big class.jmp");
In einigen Sprachen wäre dt die Datentabelle.Das ist nicht der Fall.Die obige Anweisung weist nur einen Zeiger auf die Datentabelle „Big Class“ zu.Und wenn Sie mit der Maus über die Variable dt fahren, werden Sie sehen
data table( "Big Class" )
wie es Wert ist.
Deshalb, wenn ich die Anweisung ausführe
xyz = dt;
Ich erhalte keine neue Instanz der Datentabelle „Big Class“, wie dies in einigen Sprachen der Fall wäre, sondern lediglich eine Variable namens „xyz“, die einen Zeiger auf dieselbe Datentabelle namens „Big Class“ darstellt.
Um eine neue Kopie zu erstellen (es handelt sich nicht um eine neue Instanz, da es sich nach der Erstellung normalerweise um eine völlig unabhängige neue Datentabelle handelt), verwendet man eine der Tabellenplattformen, um die Aufgabe abzuschließen
dt2 = dt << subset( all rows, all columns);
Der obige Befehl erstellt eine neue Datentabelle und setzt die Variable dt2 als Zeiger auf die neue Tabelle.
Betreff: Mehrere Spalten basierend auf Zeichenfolgen in ihrem Namen löschenJim,
Entschuldigung für das Missverständnis. Aber die meisten Dinge, nach denen ich suche, sind im JSL-PDF nicht gut beschrieben oder nur kurz erklärt. Insbesondere rekursives Skripting (if-else, for-Schleife), wenn Sie komplexe Dinge tun möchten, ist nicht im Handbuch enthalten. Es ist auch sehr schwierig, die Fehler zu verfolgen. Ich habe es erst getan, als Sie mir sagten, ich solle das Protokoll überprüfen.
Beispielsweise gibt es keine Erklärung zum Erstellen einer neuen Datentabelle oder zum Zuweisen einer neuen Datentabelle.
Was ich mir als geradlinig vorgestellt habe
dt_new << Data Table( col_names );
Ich sollte eine neue Datentabelle erstellen, aber ich habe gelernt, dass dies in jmp nicht einfach ist. Wir müssen die Syntax, die ich verwende, erfragen oder üben.
Vielen Dank!
Betreff: Mehrere Spalten basierend auf Zeichenfolgen in ihrem Namen löschenWenn Sie den Wert von „col_names“ direkt nach der Erstellung ausdrucken, werden alle Spalten in der Datentabelle angezeigt
{"Movie Name", "Lead Studio Name", "Rotten Tomatoes Score", "Audience Score",
"Theme", "Genre", "Theaters Opening Wknd", "BOA Opening Wknd", "Domestic Gross",
"Foreign Gross", "World Gross", "Production Budget", "Profitability",
"Opening Wknd Gross"}
Wenn Sie genau hinschauen, werden Sie feststellen, dass es keinen Eintrag mit dem Wert „Theme“ gibt. Es gibt einen Eintrag mit dem Wert „Theme“.Sie vergleichen Werte in Zeichenfolgen und müssen Groß- und Kleinschreibung richtig zuordnen.
Ich empfehle Ihnen dringend, den Scripting Guide zu lesen!
Hilfe==>JMP Documentation Library Scripting Guide
Betreff: Mehrere Spalten basierend auf Zeichenfolgen in ihrem Namen löschenWarum
col_names[i] == "theme"<BR />
Funktioniert es immer noch nicht?

Betreff: Mehrere Spalten basierend auf Zeichenfolgen in ihrem Namen löschendt = Open( "$sample_data/Hollywood Movies.jmp" );
col_names = dt << Get Column Names( String );
dt:Profitability << delete formula;
For( i = N Items( col_names ), i > 0, i--,
If(
Not(
Contains( col_names[i], "Gross") | contains(col_names[i], "Genre" ) | col_names[i] == "theme"),
Remove From( col_names, i)
)
);
// At this point in the script, you have a data table
// with all of the original columns(Profitability is now a static column)
// And you have a JSL List called "col_names", which is stored in memory
// so you can do anythin you want given this
// You could just write the contents of the list to the log. Remember, the
// list "col_names", only contains the names of the columns, it does not
// contain the whole column(name, properties and data)
Print( col_names );
// or
Write( col_names );
// or
Show( col_names );
// That will give you the list of columns that are going to be deleted
// or before you want to see the columns in their entirety you can create
// a new data table with just those columns
newdt = dt << subset( all rows, columns( col_names ) );
// The statement below, is a perfectly valid statement, however, it will
// not work the way you think it will. The end result of this statement
// is to create a new list of column names.
// {"Genre", "Domestic Gross", "Foreign Gross", "World Gross", "Opening Wknd Gross"}
deleted_columns = delete columns( col_names );
Betreff: Mehrere Spalten basierend auf Zeichenfolgen in ihrem Namen löschenHallo Jim,
Danke für deine Antwort. Ok, ich verstehe, was du sagst.
Nehmen wir an, uns sind die Formeln egal. Löschen wir alle Formelverbindungen und entfernen wir die gewünschten Spalten.
und ich möchte diese gelöschten Spalten als Datentabelle erstellen (und anzeigen).
indem Sie Ihrem Vorschlag folgen
dt = Open( "$sample_data/Hollywood Movies.jmp" );
col_names = dt << Get Column Names( String );
dt:Profitability << delete formula;
For( i = N Items( col_names ), i > 0, i--,
If(
Not(
Contains( col_names[i], "Gross") | contains(col_names[i], "Genre" ) | col_names[i] == "theme"),
Remove From( col_names, i)
)
);
deleted_columns = delete columns( col_names );
Das schafft immer noch nicht das, was ich brauche 
Betreff: Mehrere Spalten basierend auf Zeichenfolgen in ihrem Namen löschenIn der von Ihnen bereitgestellten JSL haben Sie die kritischste Aussage weggelassen
dt << delete columns( col_names );
Dies ist die Zeile, die tatsächlich die Löschvorgänge durchführt.In diesem Beispielfall gibt es jedoch ein zusätzliches Problem.Die endgültige Liste der Spalten
{"Genre", "Domestic Gross", "Foreign Gross", "World Gross", "Opening Wknd Gross"}
enthält die Spalte „Weltbrutto“, die bei der Berechnung der Spalte „Rentabilität“ verwendet wird.Wenn die Meldung „Spalten löschen“ verarbeitet wird, wird das Problem erkannt und im Protokoll angezeigt
Cannot delete the selected columns while some are referenced by the formulas of remaining columns.
Removing a formula leaves the data unchanged. Removing references replaces each reference with an empty value. These effects are permanent and cannot be undone.
Wenn Sie die Formel aus der Spalte „Rentabilität“ löschen, werden die Werte in statische Werte umgewandelt.
dt:Profitability << delete formula;
dann funktioniert das „Spalten löschen“ ordnungsgemäß.
Bezüglich Ihres Problems, den Mauszeiger über eine Variable zu bewegen, um deren Wert anzuzeigen, und eine Datentabelle erstellen möchten, um die Werte sehen zu können, gibt es eine viel einfachere Möglichkeit, dies zu tun.Anstatt mit der Maus über die Variable „col_names“ zu fahren, müssen Sie sie einfach markieren, dann mit der rechten Maustaste klicken und „Skript ausführen“ auswählen.Wenn in einem JMP-Skript etwas hervorgehoben ist, führt das „Skript ausführen“ standardmäßig nur die hervorgehobenen Zeilen/Anweisungen/Variablen aus.Die Ergebnisse werden im Protokoll angezeigt.