Assoziatives Array zum Umbenennen von DatentabellenspaltenHallo JMP-Community,
Ich habe eine Datentabelle (dt1) mit vielen Spalten und möchte sie umbenennen. Sie sind mit seltsamen Namen codiert. Aber ich habe 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. Etwas ä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 verhält sich nicht wie ich Gedanke die assoziativen Arrays verhielten sich.
Auch hier möchte ich versuchen, etwas Neues zu lernen und mit einem neuen JSL-Befehl besser zu werden, weshalb ich das Associative Array durcharbeiten möchte. Wenn es nicht möglich ist, mache ich es auf die Brute-Force-For-Loop-Weise.
Vielen Dank für alle Gedanken und Rückmeldungen dazu!,
DS
DatentabelleSkripterstellungBetreff: Assoziatives Array zum Umbenennen von DatentabellenspaltenHallo @David_Burnham ,
Ja, ich bin deinem Beispiel gefolgt und habe das Hardcoding verstanden. Beim Arbeiten mit einer anderen Tabelle mit Name- und Code-Spalten war es einfach, das assoziative Array zu erstellen (Hinweis: muss in der richtigen Reihenfolge sein), sodass beim Festlegen der Spaltennamen der richtige Wert auf den übereinstimmenden Schlüssel angewendet wird. Ich lief es, und es funktionierte perfekt. Nochmals vielen Dank für die Hilfe!
DS
Betreff: Assoziatives Array zum Umbenennen von DatentabellenspaltenNur um das klarzustellen, habe ich den Array-Inhalt hartcodiert, nur damit ich ein funktionierendes Beispiel hatte - es ist immer noch sinnvoll, die Schlüssel und Werte aus einer separaten Tabelle zu füllen.Beachten Sie auch, dass keine der Evals, Exprs usw. benötigt wurden. Viel Glück.
Betreff: Assoziatives Array zum Umbenennen von DatentabellenspaltenHallo @David_Burnham ,
Vielen Dank für Ihr Feedback. Ich muss eindeutig mehr in assoziative Arrays einlesen. Ich habe nichts gegen For-Schleifen, aber ich hatte gehofft, die Umbenennung eleganter 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. Die Funktionsweise des assoziativen Arrays in diesem Skript war so, wie ich dachte, dass es für die Tabellenspalten funktionieren würde, aber das ist eindeutig nicht der Fall. Ich habe in der Vergangenheit Spaltenumbenennungen mit For-Schleifen unter Verwendung von Listen {...} durchgeführt, wollte aber einen anderen Weg ohne Schleifen ausprobieren. Ich mag jedoch die assoziative Array-Methode, die Sie vorgestellt haben, und werde es auf diese Weise tun, 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 "Umcodierungs" -Funktion für die Spalte Namen.
Wie auch immer, ich schätze Ihre Antwort und Lösung auf meine Frage, assoziative Arrays zum Umbenennen von Spalten zu verwenden. Zeit, zu den Daten zurückzukehren!
Danke!,
DS
Betreff: Assoziatives Array zum Umbenennen von DatentabellenspaltenDie Verwendung von assoziierten Arrays und For-Schleifen schließen sich nicht gegenseitig aus.Ich weiß, dass viele Leute for-Schleifen gerne vermeiden, aber am Ende des Tages möchten Sie die Spalten einer Tabelle iterativ durchlaufen, und for-Schleifen sind dafür konzipiert, Iterationen durchzuführen.
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>