Ausgewählte Spalten ausschließenHallo,
Ich erhalte eine variierende Liste von Spalten aus einer Quelle und wähle diese Spalten in meiner Datentabelle aus. Die Datentabelle enthält viele andere Spalten, aber ich möchte die Spalten ausblenden/ausschließen, die nicht in der mir bereitgestellten Liste enthalten sind, während mein Skript ausgeführt wird und einige Analysen durchführt ...
Ich kann alle Spalten, die ich nicht benötige, in der folgenden Zeile auswählen:
dt <
Nächster Schritt: Diese ausgewählten Spalten ausschließen. Wie mache ich das?
Aus dem Skriptbuch kann ich sehen Spalte("X") < würde die Spalte mit dem Namen X ausschließen, aber gibt es eine Methode, um bereits ausgewählte Spalten auszuschließen?
Danke.
Betreff: Ausgewählte Spalten ausschließenDies liegt daran, dass assoziative Arrays Schlüsselwertpaare speichern und höchstwahrscheinlich nicht wirklich weiß, was zu tun ist, wenn Sie „Spalten auswählen“ direkt mit assoziativen Arrays verwenden. Normalerweise sollte nichts ausgewählt werden, und bei einer Umkehrung würden dann alle Spalten ausgewählt (es kann vorkommen, dass das assoziative Array als 1 ausgewertet wird, sodass die erste Spalte ausgewählt wird).
Um die Schlüssel aus dem assoziativen Array abzurufen, können Sie << get key verwenden.
Names Default To Here(1);
cols_list = {"Col A", "Col B"};
cols_aa = Associative Array({"Col A", "Col B"});
Show(cols_list);
Show(cols_aa);
Show(cols_aa << get keys);
Weitere Informationen zu assoziativen Arrays finden Sie auf der JMP-Hilfeseite Skripthandbuch > Datenstrukturen > Assoziative Arrays . In diesem Fall hätte ich sie möglicherweise aufgrund ihrer festgelegten Operationen verwendet
Betreff: Ausgewählte Spalten ausschließenVielen Dank für deine Antwort, jthi!Das war schnell!
Habe gerade deine Antwort gesehen. Ich habe verschiedene Dinge ausprobiert und bin auf eine sehr einfache 2-Zeilen-Lösung gekommen.
cols = {"Col A", "Col B"};
dt << Select Columns(cols) << Invert Column Selection;Ich habe noch nie gesehen, dass assoziative Arrays verwendet werden, und als ich versuchte, eines anstelle dessen zu verwenden, was ich derzeit für „cols“ habe, wählte „Select Columns“ eine Spalte aus, die nicht in „cols“ war, sondern nur eine der invertierten Auswahlen war. Seltsam.Wissen Sie, woran das liegen könnte?
cols = Associative Array({"Col A", "Col B"});
dt << Select Columns(cols) << Invert Column Selection;Betreff: Ausgewählte Spalten ausschließenSie sollten N Items(col_names) anstelle von N Items(dt) in der for-Schleife verwenden.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
col_names = {"age", "sex", "weight"};
for( i = 1, i <= N Items(col_names), i++,
Column( dt, col_names[i] ) << set selected;
);
dt << Invert Column Selection;
Sie können den Code auch vereinfachen, indem Sie „Spalten auswählen“ verwenden
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
col_names = {"age", "sex", "weight"};
wait(1); // for demo purposes
dt << Select Columns(col_names);
wait(1); // for demo purposes
dt << Invert Column Selection;
Sie können das Invertieren auch vermeiden, indem Sie direkt die richtigen Spalten auswählen. Dies ist jedoch höchstwahrscheinlich schwieriger zu verstehen
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
col_names = Associative Array({"age", "sex", "weight"});
all_col_names = Associative Array(dt << Get Column Names("String"));
all_col_names << Remove(col_names);
dt << Select Columns(all_col_names << get keys);Betreff: Ausgewählte Spalten ausschließenEs tut mir leid, diesen Thread wiederzubeleben, aber ich habe die gleiche Frage und wollte wissen, ob dieser Ansatz funktionieren würde und wie ich ihn verbessern kann:
//List of wanted columns<BR />col_names = (":Col A", ":Col B", etc);
<BR />//Iterates through list and uses the string names to identify and select
for( i = 1, i <= N Items(dt), i++,
Column( dt, col_names[i] ) << set selected
);
dt << Invert Column Selection</CODE></P></LINGO-BODY><LINGO-SUB id="lingo-sub-73693" slang="en-US" mode="NONE">Betreff: Ausgewählte Spalten ausschließen</LINGO-SUB><LINGO-BODY id="lingo-body-73693" slang="en-US" mode="NONE"><P>Danke!!! Das habe ich auch herausgefunden, aber es war etwas länger. Dies ist perfekt :)</img></P></LINGO-BODY><LINGO-SUB id="lingo-sub-73657" slang="en-US" mode="NONE">Betreff: Ausgewählte Spalten ausschließen</LINGO-SUB><LINGO-BODY id="lingo-body-73657" slang="en-US" mode="NONE"><P>Hier ist die Syntax, wie das geht:</P>
<PRE><CODE class=" language-jsl">Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
Column( dt, 4 ) << set selected( 1 );
Column( dt, 5 ) << set selected( 1 );
selcols = dt << get selected columns;
For( i = 1, i <= N Items( selcols ), i++,
Column( dt, selcols[i] ) << exclude( 1 )
);