Convertissez les données en valeurs numériques, uniquement si cela est approprié !Je travaille avec des données stockées dans une table comme paramètre et valeur.Étant donné que la valeur peut être un caractère pour certains paramètres, le type de données dans la base de données est Caractère.Extraire les données dans JMP avec un script SQL est simple et diviser les données par paramètre est également simple.Mais maintenant, j'ai un tableau de colonnes dans lequel j'aimerais convertir certaines colonnes en valeurs numériques, mais pas d'autres. J'ai essayé cela, mais à ma grande surprise, JMP a heureusement converti toutes les colonnes en valeurs numériques, supprimant ainsi les informations qui correspondaient véritablement au caractère.
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"));
);
Comment puis-je faire un test pour convertir uniquement les colonnes où les données sont correctement numériques.
Re : Convertir les données en données numériques, uniquement si cela est approprié !Vince,
Merci pour la perspicacité.Je suppose que c'est une chose délicate car selon la situation, certains caractères peuvent avoir des significations différentes (par exemple "-" ou "e").Votre code a fonctionné comme vous l'avez écrit, mais il a échoué sur mon poste en raison de valeurs manquantes.Ceux-ci pourraient être gérés par plus d'arguments dans la commande Substitute pour rechercher et éliminer la chaîne "", .
Analyser ( Remplaçant ( carboniser (valeurs), "\!"\!"\!, " , "" , "\!"" , "" , "{" , "[" , "}" , "]" ));
Cependant, toutes mes colonnes 2 sont des valeurs qui pourraient être interprétées comme des dates, donc ce code les a également interprétées comme telles.
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");
);
);
Bien que ce ne soit pas parfait, je peux utiliser ceci ou le code de txnelson car la colonne qu'il convertit en date n'est pas importante pour moi.Si je savais que cela était interprété comme une date, je pourrais en faire une exception.Je n'ai pas de dates dans cet ensemble de données.
Tapoter
Re : Convertir les données en données numériques, uniquement si cela est approprié !C'est le traiter comme un rendez-vous
MDYHMS(num("100-0001-01"))
//returns
//"01/01/0100 00:00:00"
vous pourriez peut-être essayer d'analyser les caractères dans une matrice avec des guillemets remplacés par des chaînes vides
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");
);
)Re : Convertir les données en données numériques, uniquement si cela est approprié !Pour la plupart, cela a fonctionné, mais après une inspection plus approfondie, il existe un cas où des choses étranges se produisent.
J'ai des codes qui sont des chiffres avec des tirets.Je m'attendrais à ce qu'ils restent en tant que personnage.
Mais c'est ce que fait JMP.
num("100-0001-01") donne -56928614400
Je ne sais pas comment cela arrive, mais comme il ne manque pas, le code accepte cela comme un nombre.
Re : Convertir les données en données numériques, uniquement si cela est approprié !Merci. Cela a fonctionné.
Et j'ai copié le mauvais code ci-dessus. Cela aurait dû l'être.
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"));
);Re : Convertir les données en données numériques, uniquement si cela est approprié !Voici un exemple simple qui teste les 10 premières lignes de chaque colonne et si aucune valeur non numérique n'est trouvée, il convertit la colonne en numérique.
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 )
);
);