Supprimez les lignes avec une ou plusieurs valeurs vides à l'aide de JSL<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />J'ai un tableau où chaque ligne contient un seul type de mesure à trois températures, chacune stockée dans sa propre colonne. En fin de compte, je souhaite calculer les deltas entre ces mesures, puis empiler ces données dans un nouveau tableau. Cependant, toutes les mesures ne sont pas prises aux trois températures et je dois exclure les mesures (lignes) pour lesquelles une ou plusieurs colonnes de données sont vides. Je dois le faire en utilisant un script JMP 9.0.
Donné:
dtSplit =
| La mesure | T1 | T2 | T3 |
|---|
| Mesure A | 5 | 12 | 89 |
| Mesure B | 13 | | 8 |
| Mesure C | | 52 | 57 |
| Mesure D | 22 | 21 | |
| Mesure E | 8 | | |
| Mesure F | | | 15 |
| Mesure G | | 54 | |
Je dois produire :
dtNettoyage =
| La mesure | T1 | T2 | T3 |
|---|
| Mesure A | 5 | 12 | 89 |
J'essayais d'utiliser quelque chose comme :
dtSplit << Select Where(
Is Empty(:T1) ||
Is Empty(:T2) ||
is Empty(:T3)
) << Delete Rows;
Cependant, tout Select Where(Is Empty(:COL)) sélectionne toujours toutes les lignes.
Je suis sûr qu'il me manque quelque chose de simple, votre aide est grandement appréciée, merci,
- Mat
Re : Supprimer les lignes avec une ou plusieurs valeurs vides à l'aide de JSLSalut
Merci pour votre contribution. J'ai vérifié le modèle de données manquantes que vous avez recommandé et cela fonctionne en quelque sorte, mais pas complètement.
Dans ma table de données, chaque nom comporte 4 lignes différentes. Chacune des 4 lignes d'un nom est le résultat d'un test (sens, masque, EVM et puissance)
Dans mon exemple de table de données, l'appareil A échoue au premier test "Sens" et réussit les 2ème, 3ème et 4ème tests. Étant donné que le périphérique A échoue à "Sens", il s'agit d'un périphérique défaillant même s'il réussit les 2ème, 3ème et 4ème tests.
Si j'utilise Tables==>Missing Data Pattern, les 2e, 3e et 4e lignes de A seront supprimées. Ce n'est pas ce que je recherche. Je souhaite supprimer 4 lignes de chaque nom lorsqu'elles ne contiennent aucune donnée (aucune donnée sur 10 MHz, 20 MHz, 30 MHz et 1000 MHz). Dans ma table de données, les noms C, G, H, I, JK et N seront supprimés.
Merci pour votre aide
Re : Supprimer les lignes avec une ou plusieurs valeurs vides à l'aide de JSLVous devez examiner la plate-forme de modèle de données manquantes. formulaire.Cela vous permettra d'identifier toutes les lignes qui ont toutes les valeurs manquantes, puis vous pourrez choisir de supprimer les lignes, etc.
Tables==>Modèle de données manquantes
Re : Supprimer les lignes avec une ou plusieurs valeurs vides à l'aide de JSLSALUT
Ceci est mon premier message et je ne sais pas si le fichier Excel ci-joint est transmis ou non. Sinon,
Je joins également le PNG de l'exemple de fichier de données
Je suis très nouveau sur JMP (j'utilise JMP 14) et j'ai besoin d'aide avec le script de suppression de ligne.
Mon tableau de données contient des données de nombreux appareils différents pour lesquels chaque appareil est testé
quatre pannes différentes (sensibilité, masque, EVM et puissance) sur une large gamme de fréquences
de 10 MHz à 1000 MHz. Les appareils qui passent sont ceux qui ont des cellules vides "" pour les quatre
tester sur des plages de fréquences et j'aimerais les supprimer du tableau de données.
(supprimez les lignes en vert du fichier Excel ci-joint - appareils C, G, H, I, J, K et N)
1er Problème : Comment supprimer les lignes vides (avec des colonnes de 10 MHz à 1000 MHz = vides)
La commande ci-dessous que j'ai trouvée est similaire mais pas utile car j'ai 100 colonnes différentes et "et"
les sortir tous est assez long et non évolutif si nous décidions plus tard d'augmenter la fréquence
au-delà de 1000 MHz
dtsplit << Sélectionner Où (Manquant(:T1) | Manquant(:T2) | manquant(:T3)) << Supprimer les lignes ;
J'ai aussi essayé cette commande :
Pour( je = 2, je <= 101, je++,
dtSplit << sélectionner où (est manquant (colonne (i) [])) << supprimer les lignes
);
Cette commande me donne une erreur :
Dans le script suivant, erreur marquée par /*###*/
dt = Table de données actuelle ();
Pour( je = 2, je <= 100, je++,
dtSplit/*###*/ < );
2ème problème : les lignes supprimées doivent être un multiple de 4 puisque chaque appareil est testé 4 fois.
Je ne sais pas exactement comment faire ça
j'apprécierais vraiment votre aide à ce sujet
Merci
nouveau_2_JMP
Re : Supprimer les lignes avec une ou plusieurs valeurs vides à l'aide de JSLSi vous ne vérifiez qu'une seule cellule :
if ( Is Missing( Column( dt,"Value" )[7] ),
dt << delete rows([7]);
);
Re : Supprimer les lignes avec une ou plusieurs valeurs vides à l'aide de JSLVotre code vérifie uniquement la ligne 7. Vous devez tester chaque ligne
dt << select where( Is Missing( Column( dt,"weight" )[row()] ) ) << delete rows;
Re : Supprimer les lignes avec une ou plusieurs valeurs vides à l'aide de JSLSalut,
J'essaie de faire un peu la même chose.
Je dois vérifier si une cellule est vide, puis supprimer la ligne si oui.
J'ai essayé ce qui suit -
dt << sélectionner où (est manquant (colonne (dt, "Value" )(7] ) ) << supprimer les lignes ;
Mais cela supprime toutes les lignes du tableau.
À la recherche d'idées.
Re : Supprimer les lignes avec une ou plusieurs valeurs vides à l'aide de JSLExcellente discussion. Nous avons eu un problème similaire, lors de l'importation à partir de fichiers de capteurs, nous avions beaucoup de lignes vides à la fin du fichier. Nous voulions supprimer les lignes dans lesquelles aucune donnée de capteur ne se trouvait. Cependant, je ne souhaitais pas supprimer les lignes où il y avait encore des informations.Ci-dessous a été écrit en JMP14, mais je pense que cela fonctionnera pour les versions précédentes. Dans JMP14, je sais qu'il existe une sélection de lignes > Sélectionner les lignes en double. Mais je n'ai pas trouvé de fonction similaire qui additionnerait toutes les colonnes numériques sur une ligne. Dans le script ci-dessous, Sum() renverrait null sur toute la ligne de la matrice, mais je voulais un zéro. J'ai trouvé que la sortie de V Sum() renverrait 0 pour tous les valeurs nulles. Pour faire fonctionner, il suffisait de transposer le vecteur ligne en vecteur colonne.Cela fonctionne quel que soit le nombre de colonnes numériques dont vous disposez, tant qu'elles sont toutes vides. Toujours intéressé si quelqu'un a une meilleure solution.
dt = Current Data Table();
// Get all numeric data
m = dt << Get As Matrix;
// for each row, test if the V Sum is 0 or non-zero
// V Sum returns 0 for all null
// Sum() returns null for all null
rowlist = {};
For(i= N Rows(m), i>=1,i--,
If(V Sum(Transpose(m[i,0]))[1] == 0,
Insert Into(rowlist,i)
)
);
dt << Delete Rows(rowlist);Re : Supprimer les lignes avec une ou plusieurs valeurs vides à l'aide de JSLL'utilisation de l'opérateur de concaténation était une erreur de transcription : les vieilles habitudes ont la vie dure.
il s'avère que le problème était mes noms de colonnes, qui étaient en fait « 88 », « 95 » et « 105 », et l'utilisation de Is Missing(:88) a sélectionné toutes les lignes.
dtsplit << Select Where(Is missing(:Name("T1")) | Is missing(:Name("T2")) | is missing(:Name("T3"))) << Delete Rows;
Fonctionne très bien.
Re : Supprimer les lignes avec une ou plusieurs valeurs vides à l'aide de JSLVous utilisiez l'opérateur de concaténation de chaînes || au lieu de l'opérateur OR |.Comme MS l'a montré, vous devez utiliser la fonction Is Missing et non Is Empty.Votre code devient :
dtsplit << Select Where(Is missing(:T1) | Is missing(:T2) | is missing(:T3)) << Delete Rows;
Re : Supprimer les lignes avec une ou plusieurs valeurs vides à l'aide de JSLDésolé, j'ai manqué l'exigence JMP9. La fonction Loc Nonmissing() semble être nouvelle dans JMP 10, donc ce qui précède ne fonctionne pas dans JMP 9.
Voici une approche alternative qui fonctionne dans JMP 9, similaire à votre code mais utilisant une boucle.
For( i = 2, i <= 4, i++,
dtSplit << select where( Is Missing( Column( i )[] ) ) << delete rows
);
Re : Supprimer les lignes avec une ou plusieurs valeurs vides à l'aide de JSLCela peut être accompli de différentes manières. Pour les colonnes numériques, les fonctions matricielles sont souvent efficaces.
Voici un exemple de suppression de toutes les lignes avec des cellules manquantes dans les colonnes 2, 3 et 4 :
keeprows = Loc Nonmissing( dtSplit << get as matrix( {2, 3, 4} ) );
dtSplit << select rows( keeprows ) << invert Row Selection << delete rows;
Voici une approche alternative créant un sous-ensemble de colonnes sans cellules manquantes (en gardant le tableau d'origine inchangé) :
dtClean = dtSplit << Clear Column Selection() << subset( rows( Loc Nonmissing( dt << get as matrix( {2, 3, 4} ) ) ) );Re : Supprimer les lignes contenant une ou plusieurs valeurs vides à l'aide de JSLCe script commencera à fonctionner après la colonne intitulée « Noms » et continuera jusqu'à la fin du tableau en supprimant les lignes vides.
// Get the current data table
dt = Current Data Table();
// Get all column names as strings
cnmes = dt << Get Column Names("string");
// Initialize Start and End indices
Start = .;
End = N Items(cnmes);
// Find the index of the "Device 2" column
For(k = 1, k <= N Items(cnmes), k++,
If(Contains(cnmes[k], "Names"),
Start = k + 1;
Break(); // Exit loop once found
);
);
// Loop through the columns from Start to End and delete rows with missing values
For(i = Start, i <= End, i++,
dt << Select Where(Is Missing(Column(i)[])) << Delete Rows;
);