Assoziatives Array zum Umbenennen von DatentabellenspaltenHallo JMP Community,
Ich habe eine Datentabelle (dt1) mit vielen Spalten und möchte diese umbenennen. Sie sind mit seltsamen Namen codiert. Ich habe jedoch eine andere Datentabelle (dt2) mit nur zwei Spalten: Name und: Code. Jede Zeile in dt2 hat den aussagekräftigen Namen, der dem Code zugeordnet ist.
Ich weiß, wie man das mit for-Schleifen macht, aber ich versuche, etwas Neues zu lernen und hoffe, es durch ein assoziatives Array zu tun. Ähnliches wie in diesem Thread Hier . Ich dachte, ich könnte so etwas tun:
Names Default To Here( 1 );
dt = Data Table( "dt1" );
dtnames = Data Table( "dt2" );
aa_name_code = Associative Array(
Column( dtnames, "Name" ) << Get Values,
Column( dtnames, "Code" ) << Get Values
);
aavalues = aa_name_code << Get Values;
aakeys = aa_name_code << Get Keys;
Eval( Eval Expr( Column(dt,Expr( aavalues )))) << Set Name( Expr( aakeys ) ) ) );
Aber das funktioniert leider nicht. Es benimmt sich nicht so wie ich habe gedacht Die assoziativen Arrays verhielten sich.
Wieder möchte ich versuchen, etwas Neues zu lernen und mit einem neuen JSL-Befehl besser zu werden. Deshalb möchte ich das assoziative Array durcharbeiten. Wenn es nicht möglich ist, mache ich es auf die Brute-Force-For-Loop-Art.
Vielen Dank für Ihre Gedanken und Ihr Feedback dazu!
DS
DatentabelleSkriptingBetreff: Assoziatives Array zum Umbenennen von DatentabellenspaltenDie Verwendung von assoziierten Arrays und for-Schleifen schließt sich nicht gegenseitig aus.Ich weiß, dass viele Leute gerne for-Schleifen vermeiden, aber am Ende des Tages möchten Sie über die Spalten einer Tabelle iterieren, und for-Schleifen sind für die Iteration ausgelegt.
namesDefaultToHere(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
arr = [=>];
arr["name"] = "first name";
arr["age"] = "age";
arr["sex"] = "gender";
arr["height"] = "height (inches)";
arr["weight"] = "weight (lbs)";
for (i=1,i<=ncols(dt),i++,
cname = column(i)<<GETNAME></GETNAME>Betreff: Assoziatives Array zum Umbenennen von DatentabellenspaltenHallo @ David_Burnham ,
Vielen Dank für Ihr Feedback. Ich muss eindeutig mehr in assoziative Arrays lesen. Ich habe nichts gegen For Loops, aber ich hatte gehofft, die Umbenennung auf elegantere Weise zu codieren. Der Link zum anderen Thread war eine sehr elegante Lösung, um Spaltenwerte basierend auf dem numerischen Eintrag einer anderen Spalte neu zu ordnen. Ich dachte, dass das assoziative Array in diesem Skript für die Tabellenspalten funktionieren würde, aber das ist eindeutig nicht der Fall. Ich habe in der Vergangenheit mit For Loops mithilfe von Listen {...} Spalten umbenannt, wollte aber einen anderen Weg ohne Loops versuchen. Ich mag jedoch die von Ihnen vorgestellte assoziative Array-Methode und werde sie auf diese Weise ausführen, anstatt Listen zu erstellen.
Ich denke, ich dachte, dass man mit einer Liste der Spaltennamen in der ersten Datentabelle und dem assoziativen Array aus der zweiten Datentabelle die Namen aufgrund des assoziativen Arrays leicht neu zuweisen könnte, fast wie eine "Rekodierungs" -Funktion für die Spalte Namen.
Wie auch immer, ich freue mich über Ihre Antwort und Lösung auf meine Frage, assoziative Arrays zum Umbenennen von Spalten zu verwenden. Zeit, zu den Daten zurückzukehren!
Vielen Dank!,
DS
Betreff: Assoziatives Array zum Umbenennen von DatentabellenspaltenUm ganz klar zu sein, habe ich den Array-Inhalt fest codiert, damit ich ein funktionierendes Beispiel habe. Es ist immer noch sinnvoll, die Schlüssel und Werte aus einer separaten Tabelle zu füllen.Beachten Sie auch, dass keine Evals, Exprs usw. benötigt wurden. Viel Glück.
Betreff: Assoziatives Array zum Umbenennen von DatentabellenspaltenHallo @ David_Burnham ,
Ja, ich bin Ihrem Beispiel gefolgt und habe die Hardcodierung verstanden. Bei der Arbeit mit einer anderen Tabelle mit Namens- und Codespalten war es einfach, das assoziative Array zu erstellen (Hinweis: muss in der richtigen Reihenfolge vorliegen), damit beim Festlegen der Spaltennamen der richtige Wert auf den übereinstimmenden Schlüssel angewendet wird. Ich habe es ausgeführt und es hat perfekt funktioniert. Nochmals vielen Dank für die Hilfe!
DS