JSL-Frage: Spalten auswählen und fehlende Werte durch Null ersetzenHat jemand ein Skript zum Entfernen von Spalten, die nur fehlende Werte enthalten? Ich stolpere durch das Aufräumen einer Datentabelle und dies wäre sehr hilfreich bei der Automatisierung dieses Prozesses.
Vielen Dank,
Pete
Betreff: JSL-Frage: Spalten auswählen und fehlende Werte durch Null ersetzenIch habe zu früh gesprochen (getippt). Sobald die Matrix (datatable) ein bisschen größer wird, ist die erste Methode schneller. Bei einer Matrix mit 100.000 Zeilen x 1000 Spalten dauert die erste Methode 2,48 Sekunden, während die zweite 6,51 Sekunden dauert. Ich gehe davon aus, dass die erste Methode für wirklich große Tabellen nur langsam ist, während die zweite Methode dies genau beschreibt.
Prost,
Brady
Betreff: JSL-Frage: Spalten auswählen und fehlende Werte durch Null ersetzenHey Pete, daran habe ich später gedacht ... Es ist viel schneller als die erste Methode, die ich vorgeschlagen habe. Beispielsweise dauerte die erste Methode in einer 1000-Zeilen-x1000-Spaltentabelle 0,82 Sekunden, während diese Methode 0,017 Sekunden dauerte.
dt << Delete Columns( Loc( V Max( Is Missing( dt << Get All Columns As Matrix ) ) ) );
Betreff: JSL-Frage: Spalten auswählen und fehlende Werte durch Null ersetzen @brady_brady ist wahrscheinlich besser, aber ich habe die Funktionen All () und Loc () für numerische und Zeichenspalten verwendet.
Etwas wie das:
dt=New Table( "untitled 25 2",
Add Rows( 4 ),
New Column( "Column 1",
Character,
"Nominal",
Set Values( {"a", "a", "a", "a"} )
),
New Column( "Column 2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [., ., ., .] )
),
New Column( "Column 3", Character, "Nominal", Set Values( {"", "", "", ""} ) ),
New Column( "Column 4",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [., 0, 0, 0] )
)
);
For( i = N Cols( dt ), i > 0, i--,
vals = Column( dt, i ) << get values;
show(vals);
If( (Column( dt, i ) << get data type) == "Character",
Show( Loc( vals, "" ) ),
Show( all( vals ) )
);
);
Betreff: JSL-Frage: Spalten auswählen und fehlende Werte durch Null ersetzenVielen Dank Brady
Betreff: JSL-Frage: Spalten auswählen und fehlende Werte durch Null ersetzenPete, wenn du die Spalten löschen willst (im Betreff des Beitrags steht, dass fehlende Spalten durch Nullen ersetzt werden sollen), ist dies der Fall.
dt = current data table();
For( i = N Col( dt ), i >= 1, i--,
If( Max( Is Missing( dt[0, i] ) ) > 0,
dt << Delete Columns( i )
)
);
Betreff: JSL-Frage: Spalten auswählen und fehlende Werte durch Null ersetzenDanke Mike,
Kennen Sie einen Weg, dies zu schreiben? Ich war auf eine ähnliche Lösung gekommen, konnte aber keine Möglichkeit finden, diese vollständig in einem Skript zu enthalten.
Betreff: JSL-Frage: Spalten auswählen und fehlende Werte durch Null ersetzenSie können dies mit dem Missing Value Explorer tun, vorausgesetzt, die Daten sind numerisch. Verwenden Sie einfach die Option "Nur Spalten mit fehlenden anzeigen". Wählen Sie dann (stellen Sie sicher, dass Sie zuvor keine Zeilen in der Datentabelle ausgewählt haben) die Spalten in der MVE aus, die die gleiche Anzahl fehlender Werte wie die Zeilen in der Datentabelle aufweisen. Dadurch werden die Spalten wieder in der Datentabelle ausgewählt. Sie können die Spalten dann einfach löschen, indem Sie mit der rechten Maustaste klicken oder das rote Dreieck-Menü verwenden.
Beste,
M