Script JSL pour filtrer les lignes entières où une colonne particulière contient des valeurs manquantesChère Communauté,
je suis un utilisateur débutant et j'aimerais demander votre aide avec mon code suivant. L'argument de la fonction "manquant" semble incorrect.
J'aimerais que le script affiche un tableau dans lequel les lignes contenant des valeurs dans certaines plages sont affichées. De plus, les lignes comportant des cellules vides dans les deux colonnes utilisées pour le filtrage sont à exclure.
Voici le code :
dt = Current Data Table(); // Assumes you have a data table already opened
// Convert Column1 to numeric data type
dt << As Numeric("Temperatur");
// Convert Column2 to numeric data type
dt << As Numeric("Menge");
// Create the conditions to filter the rows
condition1 = Column(dt, "Temperatur") << Get Values() > 25;
condition2 = Column(dt, "Menge") << Get Values() > 0;
// Create a condition to remove empty cells
condition3 = Any(Is Missing(dt << Get Values("Temperatur"))) == 0 | Any(Is Missing(dt << Get Values("Menge"))) == 0;
// Apply all three conditions to filter the data table
filtered_dt = dt << Select Where(condition1 & condition2 & condition3);
// Show the filtered data table
filtered_dt << Show();
Merci beaucoup d'avance pour toute navigation. J'utilise JMP version 17
Michael
Automatisation et scriptsRe : Script JSL pour filtrer des lignes entières où une colonne particulière contient des valeurs manquantesSalut Michael.
Ce qui est cool dans JMP : vous n'avez pas besoin de connaître de script, vous pouvez simplement utiliser l'interface graphique et votre souris.
Ensuite, après avoir exécuté les étapes, vous pouvez accéder au journal avancé et vérifier le code...
- Lignes/Sélection de lignes/Sélectionner où (Ctrl + W)

- ouvrir la vue des données pour les lignes sélectionnées :

- vérifiez le journal :

Jmp comprend ce que vous voulez - et combine même les deux étapes en une seule ligne de code :

Si vous souhaitez construire la commande vous-même, vous pouvez définir des chaînes, les concaténer, puis analyser et évaluer le code final :
cond1 = "Is Missing( :age )";
cond2 = ":age > 16";
Eval(Parse("dt << Select where( "|| cond1 || " | " || cond2 || " ) << Data View;"))
Ma suggestion : investissez du temps pour apprendre et comprendre la gestion des expressions
Un excellent tutoriel : Utiliser JSL pour développer des applications efficaces et robustes (UE 2018 415) par @joseph_morgan
Vous verrez, en fait c'est assez similaire à votre approche :
stockez certaines conditions sous forme de "symboles" JSL condition 1, condition 2... puis utilisez-les pour construire votre expression finale et l'évaluer.
Avec quelques correctifs de code et Expr() et Name Expr() ici et là (pour empêcher Jmp d'évaluer les conditions avant qu'elles puissent être insérées dans la dernière ligne de code), le code devrait ressembler à ceci :
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
condition 1 = Expr(Is Missing( :age ));
condition 2 = Expr(:age > 16 );
combined condition=Expr(or());
Insert into(combined condition, Name Expr(condition1));
Insert into(combined condition, Name Expr(condition2));
Eval(Substitute(dt << Select where( _cond_ ) << Data View),
Expr(_cond_),Name Expr(combined condition)));
Re : Script JSL pour filtrer des lignes entières où une colonne particulière contient des valeurs manquantesVous mélangez la comparaison matricielle et la sélection à partir d'un tableau de données. Dans ce cas, vous souhaiterez probablement simplement utiliser << Select Where ou << Get Rows Where et non << Get Values (vous souhaiterez peut-être utiliser << Get Rows Where à la place). de << Sélectionnez Où mais cela dépend de ce que vous souhaitez faire).
Vous pouvez combiner les conditions directement en une seule instruction Select Where (si vous souhaitez les séparer, je le ferais avec des commentaires sauf si vous souhaitez réutiliser exactement les mêmes instructions)
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
dt[[1 2 3 20 30], "height"] = .;
dt[[10 15 16 30], "weight"] = .;
// Comparison
dt << Select Where((:height > 60) & (:weight > 90));
selrows = dt << get selected rows; // to get a matrix of selected row numbers
r = dt << Get Rows Where((:height > 60) & (:weight > 90));
et vérifier ces valeurs manquantes n'est pas nécessaire dans ce cas
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
dt[[1 2 3 20 30], "height"] = .;
dt[[10 15 16 30], "weight"] = .;
// Comparison
r1 = dt << Get Rows Where((:height > 60) & (:weight > 90) & (!IsMissing(:height) | !Is Missing(:weight)));
r2 = dt << Get Rows Where((:height > 60) & (:weight > 90));
r1 == r2;Re : Script JSL pour filtrer des lignes entières où une colonne particulière contient des valeurs manquantesMerci beaucoup, Hogi, avec votre aide, j'ai réussi à le faire fonctionner !
Re : Script JSL pour filtrer des lignes entières où une colonne particulière contient des valeurs manquantesMerci beaucoup, Jthi, avec votre aide, j'ai réussi à le faire fonctionner !