Comment vérifier si le contenu d'une liste est entièrement numérique sans bouclesSalut,
J'écris du code qui importe des données et j'aimerais effectuer des vérifications de données similaires à MessyTables pour python.
Les données peuvent être importées accidentellement en tant que caractère en raison de la présence de "NULL" ou similaire dans les données. Après avoir supprimé les instances courantes de ceux-ci, je voudrais vérifier à nouveau les données pour voir si elles sont numériques.
Pour ce faire, le moyen le plus simple consiste à utiliser Try() et Matrix() après avoir supprimé tout "" autour des éléments de la liste.
Je pourrais parcourir les columnKeys et si la conversion Num () échoue déclencher un Throw (), ce serait un gaspillage si la table est longue et que la colonne a de nombreux numéros uniques.
Le code ci-dessous écrit une erreur dans le long, ce qui est bien. Cependant, il déclenche également une fenêtre d'alerte JMP une fois que je l'intègre dans mon complément, mais pas si je l'exécute directement.
Avez-vous des suggestions d'alternatives pour vérifier si une liste est numérique ou pour supprimer la boîte de dialogue d'alerte JMP ?
Merci,
Étienne
dt = New Table( "Check Data",
Add Rows( 2 ),
New Column( "Column 1", Character, "Nominal", Set Values( {"+1%", "2", "-45"} ) )
);
a = Column(dt, "Column 1" ) << Get Values;
Try(
b = Matrix( Parse( Substitute( Char( a ), "\!"", "", " " ) ) );
Show( "Converted to Numeric." );
Show(b);
,
Show( "Not all Numeric..." );
Show(a);
);Re : Comment vérifier si le contenu d'une liste est entièrement numérique sans bouclesMerci! J'ai cherché quelque chose comme ça pendant des heures.Re : Comment vérifier si le contenu d'une liste est entièrement numérique sans bouclesIl faudrait probablement supprimer toutes les valeurs manquantes de la liste car cela causera également des problèmes.
Names Default to here(1);
a = {"1", "2", "", "45", "", "3"};
x = repeat(1, nitems(a));
x[loc(a, "")] = 0;
a = a[loc(x)];
Batch Interactive(1);
cap = Log Capture(
Try(
Parse( "[" || Concat Items( a, "," ) || "]" );
result = "ok";
,
result = "bad"
)
);
Batch Interactive(0);
Show( result );Re : Comment vérifier si le contenu d'une liste est entièrement numérique sans boucles<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Craige@JMP Merci, cela a fonctionné à merveille et je suis sûr que c'est quelque chose que j'utiliserai à nouveau avec d'autres instructions try.
Re : Comment vérifier si le contenu d'une liste est entièrement numérique sans bouclesEnfin, pour supprimer la boîte de dialogue, utilisez la fonction BatchInteractive.Notez qu'il y a deux appels, un avant et un après.Si vous laissez JMP s'exécuter dans l'état BatchInteractive(1), vous aurez du mal à fermer JMP.
dt = New Table( "Check Data",
Add Rows( 2 ),
New Column( "Column 1", Character, "Nominal", Set Values( {"1", "2a", "-45"} ) )
);
a = Column( dt, "Column 1" ) << Get Values;
Batch Interactive(1);
cap = Log Capture(
Try(
Parse( "[" || Concat Items( a, "," ) || "]" );
result = "ok";
,
result = "bad"
)
);
Batch Interactive(0);
Show( result );
Re : Comment vérifier si le contenu d'une liste est entièrement numérique sans boucleset pour supprimer les messages du journal :
dt = New Table( "Check Data",
Add Rows( 2 ),
New Column( "Column 1", Character, "Nominal", Set Values( {"1", "2", "-45"} ) )
);
a = Column( dt, "Column 1" ) << Get Values;
cap = Log Capture(
Try(
Parse( "[" || Concat Items( a, "," ) || "]" );
result = "ok";
,
result = "bad"
)
);
Show( result );
Re : comment contourner l'erreur parse("a+b)") ? discuté logcapture et essayez.
edit : suppression de l'affectation redondante au résultat.
Re : Comment vérifier si le contenu d'une liste est entièrement numérique sans bouclesVoici une variante de votre idée originale :
dt = New Table( "Check Data",
Add Rows( 2 ),
New Column( "Column 1", Character, "Nominal", Set Values( {"1", "2%", "-45"} ) )
);
a = Column(dt, "Column 1" ) << Get Values;
try(parse("["||concatitems(a,",")||"]"),"nope");
Re : Comment vérifier si le contenu d'une liste est entièrement numérique sans bouclesCela semble assez rapide. Il utilise simplement la fonctionnalité JMP (?) Où il transforme simplement les valeurs non numériques en valeurs manquantes si la colonne est spécifiée numérique.
*Modifier pour la vitesse*
lista = {"+1%", "2", "-45", ""};
dt = New Table( "Check Data",
New Column( "Character", Character, "Nominal", Set Values( lista ) ),
New Column("Numeric", Numeric, Set Values( lista )),
invisible
);
if( ColNMissing(Column(dt, "Character")) == ColNMissing(Column(dt, "Numeric")),
ret = as list(Column(dt, "Numeric") << get values),
ret = Expr(print("Non-Convertable"));
);
close(dt, no save);
ret;
Re : Comment vérifier si le contenu d'une liste est entièrement numérique sans bouclesJe trouve que le moyen le plus simple de vérifier si une colonne importée doit réellement être numérique, alors qu'en fait elle a été importée en tant que caractère, consiste à utiliser cette simple ligne de code. Elle renvoie le nombre de valeurs numériques trouvées :
numberofnumerics = Col Number(num(<THE target="" column="">));</THE>
vous pouvez également obtenir un rapport entre le nombre de chiffres et le nombre de colonnes non vides
ratio = Col Number(num(<THE target="" column="">)) / Col Number(<THE target="" column="">);</THE></THE>