Konvertieren Sie Daten nur dann in numerische Werte, wenn dies angemessen ist!Ich arbeite mit Daten, die in einer Tabelle als Parameter und Wert gespeichert sind.Da der Wert für einige Parameter ein Zeichen sein kann, ist der Datentyp in der Datenbank „Zeichen“.Das Abrufen der Daten in JMP mit einem SQL-Skript ist einfach und das Aufteilen der Daten nach Parametern ist ebenfalls einfach.Aber jetzt habe ich eine Spaltentabelle, in der ich einige Spalten gerne in numerische Spalten umwandeln möchte, andere jedoch nicht. Ich habe es versucht, aber zu meiner Überraschung hat JMP glücklich alle Spalten in numerische Spalten umgewandelt und dabei die Informationen verworfen, die tatsächlich Zeichen waren.
Tcols = dt << Get Column Names(String);
For(i=2, i<=n items(Tcols), i++,
try(column(dt,i) << Data Type(Character);
column(dt,i) << Modeling Type("Nominal"));
);
Wie kann ich einen Test durchführen, um nur Spalten zu konvertieren, in denen die Daten entsprechend numerisch sind?
Betreff: Daten nur dann in numerische Werte umwandeln, wenn dies angemessen ist!Vince,
Danke für den Einblick.Ich denke, das ist eine knifflige Sache, denn je nach Situation können einige Zeichen unterschiedliche Bedeutungen haben (z. B. „-“ oder „e“).Ihr Code hat so funktioniert, wie Sie ihn geschrieben haben, aber auf meinem Set ist er aufgrund fehlender Werte fehlgeschlagen.Diese könnten durch weitere Argumente im Substitute-Befehl behandelt werden, um die Zeichenfolge „“, zu finden und zu entfernen.
Analysieren ( Ersatz ( verkohlen (Werte), "\!"\!"\!, " , „“ , „\!““ , „“ , „{“ , „[“ , „}“ , „]“ ));
Alle meine Werte in Spalte 2 sind jedoch Werte, die als Datumsangaben interpretiert werden könnten, sodass dieser Code sie auch als solche interpretierte.
names default to here(1);
dt = New Table( "Test",
Add Rows( 4 ),
New Column( "Column 1",
Character,
"Nominal",
Set Values( {"A", "B", "C", "D"} )
),
New Column( "Column 2",
Character,
"Nominal",
Set Values( {"100-0001-01", "100-0001-01", "100-0001-01", "100-0001-01"} )
),
New Column( "Column 3",
Character,
"Nominal",
Set Selected,
Set Values( {"1", "2", "", "4"} )
)
);
dt = current data table();
for(i=1, i<=ncols(dt), i++,
col = Column(dt, i);
values = col << Get Values;
Try(
Parse(Substitute(char(values), "\!"\!"\!, ", "", "\!"", "", "{", "[", "}", "]"));
col << Data Type("Numeric") << Modeling Type("Continuous");
);
);
Obwohl nicht perfekt, kann ich diesen oder den Code von txnelson verwenden, da die Spalte, die er als Datum konvertiert, für mich nicht wichtig ist.Wenn ich wüsste, dass es als Datum interpretiert wird, könnte ich eine Ausnahme machen.Ich habe keine Daten in diesem Datensatz.
Klopfen
Betreff: Daten nur dann in numerische Werte umwandeln, wenn dies angemessen ist!Es behandelt es als Datum
MDYHMS(num("100-0001-01"))
//returns
//"01/01/0100 00:00:00"
Sie könnten vielleicht versuchen, die Zeichen in eine Matrix zu analysieren, wobei Anführungszeichen durch leere Zeichenfolgen ersetzt werden
names default to here(1);
dt = New Table( "Test",
Add Rows( 4 ),
New Column( "Column 1",
Character,
"Nominal",
Set Values( {"A", "B", "C", "D"} )
),
New Column( "Column 2",
Character,
"Nominal",
Set Values( {"100-0001-01", "2", "4", "8"} )
),
New Column( "Column 3",
Character,
"Nominal",
Set Selected,
Set Values( {"1", "2", "3", "4"} )
)
);
for(i=1, i<=ncols(dt), i++,
col = Column(dt, i);
values = col << Get Values;
Try(
Parse(Substitute(char(values), "\!"", "", "{", "[", "}", "]"));
col << Data Type("Numeric") << Modeling Type("Continuous");
);
)Betreff: Daten nur dann in numerische Werte umwandeln, wenn dies angemessen ist!Im Großen und Ganzen hat es funktioniert, aber bei näherer Betrachtung gibt es einen Fall, in dem seltsame Dinge passieren.
Ich habe einige Codes, bei denen es sich um Zahlen mit Bindestrichen handelt.Ich würde erwarten, dass sie als Charakter bleiben.
Aber genau das macht JMP.
num("100-0001-01") ergibt -56928614400
Ich weiß nicht, wie es darauf kommt, aber da es nicht fehlt, akzeptiert der Code dies als Zahl.
Betreff: Daten nur dann in numerische Werte umwandeln, wenn dies angemessen ist!Danke. Das hat funktioniert.
Und ich habe oben den falschen Code kopiert. Es hätte sein sollen.
Tcols = dt << Get Column Names(String);
For(i=2, i<=n items(Tcols), i++,
try(column(dt,i) << Data Type(Numeric);
column(dt,i) << Modeling Type("Continuous"));
);Betreff: Daten nur dann in numerische Werte umwandeln, wenn dies angemessen ist!Hier ist ein einfaches Beispiel, das die ersten 10 Zeilen jeder Spalte testet. Wenn keine nicht numerischen Werte gefunden werden, wird die Spalte in einen numerischen Wert konvertiert
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// set all columns to character
For( i = 1, i <= N Cols( dt ), i++,
Column( i ) << set data type( character )
);
// Convert only numerics
For( i = 1, i <= N Cols( dt ), i++,
isNumeric = "NO";
For( theRow = 1, theRow <= 10, theRow++,
If( Column( i )[theRow] != "" & Is Missing( Num( Column( i )[theRow] ) ) == 1,
isNumeric = "NO";
Break();
,
isNumeric = "YES"
)
);
If( isNumeric == "YES",
Column( i ) << set data type( numeric )
);
);