Stapeln Sie Spalten basierend auf der Regex-Auswahl<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich stapele ständig Hunderte von Spalten, die gemeinsame Präfixe haben und mit einer anderen Zahl oder einem anderen Suffix enden.
Ich möchte ein Skript schreiben, um:
- Suchen Sie nach Spalten basierend auf einem Regex-Muster, z. B. „BLUE_CARS_*_\d{1,2}“, „HOMES_(SINGLE|DOUBLE)_WIDE“ usw.
- Wählen Sie diese Spalten aus
- Stapeln Sie die Spalten (und platzieren Sie sie in einem neuen Datenblatt).
Ich kann beim besten Willen nicht herausfinden (oder bei Google nicht richtig danach suchen), wie man Regex mit der Spaltenauswahl verwendet.
Ich habe darüber nachgedacht, die Spalten nach Datentyp auszuwählen, aber es sind andere Spalten vorhanden, die denselben Datentyp haben, nicht aber
Erwähnen Sie, dass ich etwas viel flexibleres möchte.
Wir würden uns sehr über Vorschläge oder Codeausschnitte freuen und bedanken uns im Voraus.
Betreff: Stapeln Sie Spalten basierend auf der Regex-AuswahlMithilfe von show() und den Details darüber, was vor sich ging, konnte ich erkennen, dass wir es tatsächlich angewiesen haben, einen Spaltennamen und nicht die eigentliche Spalte zu verwenden. Ich nehme an, das macht Sinn, da nc = dt << Spaltennamen abrufen;< /code> wurde an erster Stelle verwendet. Also statt
cname = nc<I> << get name;</I>
wir brauchten
cname = Spalte(nc<I> ) << get name;</I>
Ich vermute, dass get Column Names() standardmäßig die Zeichenfolgen zurückgibt, keine Liste der Spalten. Ah, nun ja, es funktioniert jetzt wie erwartet.
Danke für die Hilfe!
Betreff: Stapeln Sie Spalten basierend auf der Regex-Auswahlshow( i, nc );
zeigt die aktuellen Werte der beiden Variablen an.Fügen Sie das nach dem „i++“-Inkrement in die Schleife ein.nc *sollte* als Liste (in geschweiften Klammern) von Spaltennamen angezeigt werden.Die <<
Überprüfen Sie das Protokoll, nachdem Sie es mit dem Befehl „show“ ausgeführt haben, und sehen Sie, was falsch ist.
Skriptfähige Objekte in JMP sind Objekte, die Nachrichten verstehen.Eine Variable könnte eine Matrix, eine Liste oder eine Zahl enthalten, die keine skriptfähigen Objekte sind, oder die Variable könnte ein Anzeigefeld, eine Datentabelle oder eine Spalte enthalten, die keine skriptfähigen Objekte sind.Es gibt auch viele andere Typen, einige davon sind skriptfähig, andere nicht.
Ich vermute, dass die Datentabelle nicht explizit vom Add-In ausgewählt wird und die Fehler von dort aus kaskadieren.Möglicherweise benötigen Sie vor dieser eine weitere show().
Craige
Betreff: Stapeln Sie Spalten basierend auf der Regex-AuswahlIch habe Probleme bei der Umwandlung dieses Codes in ein JMP-Add-In (mit einer Schaltfläche). Der Code funktioniert gut, wenn ich ihn über den Skripteditor ausführe, aber wenn ich versuche, ihn als Add-In auszuführen, erscheint die folgende Beschwerde:
Send erwartet ein skriptfähiges Objekt beim Zugriff oder bei der Auswertung von „Send“, nc<I> << /*###*/get name/*###*/</I>
For( i = 1, i <= N Items( nc ), i++, cname = nc<I> << /*###*/get name/*###*/; model = nc<I> << get modeling type;</I></I>
Wenn ich die erste Zeile so ändere, dass sie lautet: cname = dt << get name(nc<I> );</I> Es geht weiter, um sich über die nächste Zeile zu beschweren.
Ich ändere diese Zeile dann so, dass sie lautet: model = dt << get modeling type(nc<I> );</I> und es geht weiter zu einer sort()-Funktion, die den Fehler ändert:
<CODE> Send erwartet ein skriptfähiges Objekt beim Zugriff oder bei der Auswertung von „Send“, transponiert <<SPAN style="font-family: arial, helvetica, sans-serif;"> und der Code lautet</SPAN>
transposed = transposed << /*###*/ sort(replace table, by("Row 1"), order(Descending))/*###*/;<BR /><SPAN style="font-family: arial, helvetica, sans-serif;">Irgendwelche Ideen, wie ich dieses Problem beheben und es portabel machen kann (sowohl im Editor als auch als Add-In problemlos funktionieren)? Ich entschuldige mich dafür, dass dies unklar erscheint.</SPAN>
(Wow, warum gibt es keinen Nachrichtenvorschau-Button...).
Betreff: Stapeln Sie Spalten basierend auf der Regex-AuswahlUnd ja, ich habe einige Show-Funktionen in der JSL belassen, weil sie hilfreiche Debugging-Hilfen sind.Nehmen Sie sie heraus, wenn Sie fertig sind, damit das Protokoll nicht mit alten Antworten auf alte Fragen überfüllt ist.
Craige
Betreff: Stapeln Sie Spalten basierend auf der Regex-AuswahlWillkommen, danke.Verwenden Sie nach Möglichkeit eine explizite Datentabelle:
dtstacked = dt << Stack(
Spalten( icols ),
Spalte „Quellenbeschriftung“ („Label“),
Gestapelte Datenspalte („Daten“)
);
dtstacked verweist auf die Datentabelle, die sich aus dt<Betreff: Stapeln Sie Spalten basierend auf der Regex-Auswahl
Großartig! Das ist genau das, was ich brauchte.
Ich bin immer noch dabei, mich mit der JSL-Syntax und der Notwendigkeit, alles zu „zeigen“, vertraut zu machen.
Und für die Regex()-Funktion konnte ich keine Dokumentation zur Verwendung außerhalb einer regulären Spaltenfunktion finden, daher ist es praktisch, dass sie genauso funktioniert. Dies wird sich in vielerlei Hinsicht als nützlich erweisen.
Wie stelle ich in diesem Zusammenhang sicher, dass die neue Tabelle/das neue Fenster für die Verwendung im Rest eines Skripts ausgewählt ist?
Außerdem musste ich die Übersetzung unbedingt deaktivieren, da sie den Code durcheinander brachte.
Danke schön!
Betreff: Stapeln Sie Spalten basierend auf der Regex-AuswahlMöglicherweise müssen Sie das Kontrollkästchen „Übersetzen“ oben auf dem Bildschirm deaktivieren, um die JSL korrekt anzuzeigen.
Betreff: Stapeln Sie Spalten basierend auf der Regex-AuswahlEtwas wie das.
dt = Open( "$sample_data/big class.jmp" );
allCols = dt << getcolumnnames;
Show( allCols ); // das sind Namen, keine Strings
acols = {}; // Spalten mit „a“ im Namen
icols = {}; // Spalten mit „i“ im Namen
n = N Items( allCols );
For( k = 1, k <= n, k++,
cname = allCols << getname; // Das sind Strings, gut für Regex
Show( cname );
If( !Is Missing( Regex( cname, "a" ) ),
Einfügen in( acols, allCols) // Behalte die Namen
);
If( !Is Missing( Regex( cname, "i" ) ),
Einfügen in( icols, allCols) // Behalte die Namen
);
);
Show( acols, icols ); // {:name, :age} und {:height, :weight}
dt << Stack(
Spalten( icols ),
Spalte „Quellenbeschriftung“ („Label“),
Gestapelte Datenspalte („Daten“)
);
