Eigentlich bin ich in die Community gekommen, um zu sehen, ob es dazu schon etwas Neues gibt, bin mir immer noch nicht sicher, ob ich etwas vermisse, das jetzt eingebaut ist ...
Ich möchte mit JSL bestimmte Werte (wie -999 oder> 998) durch fehlende in vielen Spalten (möglicherweise alle numerischen Spalten) ersetzen. Es ist nicht schwer, dies zu skripten. schönes Beispiel dafür, was ich meine und was ich gerade hier mache:
https://community.jmp.com/t5/Discussions/Deleting-cell-values/td-p/46957
Aber (1) dies scheint etwas zu sein, das ziemlich häufig vorkommt, also möglicherweise eine eigene integrierte Funktion wert ist (oder die Fähigkeit, die Umcodierungsfunktion zu skripten) und (2) es ist bei großen Datenmengen nicht blitzschnell, also wenn es möglich ist, vielleicht eine mehr Ressource Eine effiziente zugrunde liegende Methode könnte Teil einer solchen Lösung sein.(?)
Falls es schneller geht, ist auch das Abonnieren von Datentabellen eine Option:
dt = open("$SAMPLE_DATA/Big Class.jmp");
r = loc(dt[0, 4]==61)
dt[r, 4] = .;Ein Wunschlistenpunkt, der vor einiger Zeit angefordert wurde, war die Zuweisung von Spalteneigenschaften zu einer definierten Tabellengruppenspalte (eine Liste von Spalten).
Eine ziemlich einfache Alternative besteht darin, die Spalten auszuwählen, die "gereinigt" werden müssen. Kopieren Sie eine Codeeigenschaft für einen fehlenden Wert in die Zwischenablage und senden Sie dann die JSL-Nachricht Fügen Sie die Eigenschaften mehrerer Spalten ein zur Datentabelle. Das angehängte Skript zeigt eine Matrixmethode zum Ersetzen von Werten ohne For-Schleife, aber ich finde den Code für fehlende Werte nützlicher: Die (ursprünglichen) Datenwerte der Datenbank werden nicht geändert, es kann mehr als ein Wert festgelegt werden, und die ursprünglichen Werte können wiederhergestellt werden.
Names Default to Here(1);
//create example table
dt = New Table( "example",
Add Rows( 3 ),
New Column( "A",
Character,
"Nominal",
Set Values( {"", "", ""} )
),
New Column( "B",
Character,
"Nominal",
Set Values( {"", "", ""} )
),
New Column( "C",
Character,
"Nominal",
Set Values( {"", "", ""} )
),
New Column( "x_1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 2, 8] )
),
New Column( "x_2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [8, 8, 8] )
),
New Column( "x_3",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [2, 8, 2] )
),
New Column( "x_4",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [7, 8, 5] )
),
New Column( "x_5",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [2, 8, 3] )
),
New Column( "x_6",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [2, 8, 8] )
),
New Column( "E",
Character,
"Nominal",
Set Values( {"", "", ""} )
)
);
// this replaces values
<STRONG>cnme = dt << get column names(numeric);
dt << select Columns(cnme);</STRONG>
mat = dt << get as matrix;
mat[loc(mat==8)]=empty();
dt[1::nrow(dt),cnme]=mat;
//Close dt and rerun the code to create dt
<STRONG>set clipboard("{Add Column Properties(Set Property(\!"Missing Value Codes\!", {8}))}");
dt << Paste Multi Columns Properties;</STRONG>
//The value of 8 appears, but is treated as missing.
//There is a request that column property settings can be assigned to a column group