Converti i dati in numerici, solo se appropriato!Lavoro con i dati memorizzati in una tabella come parametro e valore.Poiché il valore può essere un carattere per alcuni parametri, il tipo di dati nel database è Carattere.Estrarre i dati in JMP con uno script SQL è semplice e anche dividere i dati per parametro è semplice.Ma ora ho una tabella di colonne in cui vorrei convertire alcune colonne in numeriche, ma altre no. L'ho provato ma con mia sorpresa JMP ha convertito felicemente tutte le colonne in numeriche, eliminando le informazioni che erano veramente caratteri.
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"));
);
Come posso eseguire un test per convertire solo le colonne in cui i dati sono opportunamente numerici.
Ri: Converti i dati in numerici, solo se appropriato!Vinci,
Grazie per l'intuizioneImmagino che sia una cosa complicata perché a seconda della situazione alcuni caratteri possono avere significati diversi (ad esempio "-" o "e").Il tuo codice ha funzionato come lo hai scritto, ma non è riuscito sul mio set a causa di valori mancanti.Questi potrebbero essere gestiti da più argomenti nel comando Sostituisci per trovare ed eliminare la stringa "", .
Analizzare ( Sostituire ( car (valori), "\!"\!"\!, " , "" , "\!"" , "" , "{" , "[" , "}" , "]" ));
Tuttavia, tutta la mia colonna 2 sono valori che potrebbero essere interpretati come date, quindi anche questo codice li ha interpretati come tali.
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");
);
);
Sebbene non sia perfetto, posso utilizzare questo o il codice di txnelson perché la colonna che converte in data non è importante per me.Se sapessi che viene interpretata come una data, potrei fare un'eccezione.Non ho date in questo insieme di dati.
colpetto
Ri: Converti i dati in numerici, solo se appropriato!Lo tratta come un appuntamento
MDYHMS(num("100-0001-01"))
//returns
//"01/01/0100 00:00:00"
potresti forse provare ad analizzare i caratteri in una matrice con virgolette sostituite con stringhe vuote
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");
);
)Ri: Converti i dati in numerici, solo se appropriato!Per la maggior parte ha funzionato, ma dopo un'ulteriore ispezione, c'è un caso in cui accadono cose strane.
Ho alcuni codici che sono numeri con trattini al loro interno.Mi aspetterei che rimanessero come personaggio.
Ma questo è ciò che fa JMP.
num("100-0001-01") restituisce -56928614400
Non so come sia possibile, ma poiché non manca il codice lo accetta come numero.
Ri: Converti i dati in numerici, solo se appropriato!Grazie. Ha funzionato.
E ho copiato il codice sbagliato sopra. Sarebbe dovuto essere.
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"));
);Ri: Converti i dati in numerici, solo se appropriato!Ecco un semplice esempio che verifica le prime 10 righe di ciascuna colonna e, se non vengono trovati valori non numerici, converte la colonna in numerica
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 )
);
);