Comment supprimer des lignes de numéros de colonnes variables lorsqu'il manque toutes des donnéesJ'ai un ensemble de données généré automatiquement et certaines des colonnes, celles qui contiennent une sous-chaîne "X_Clean", auront des valeurs nulles.Parfois, il y a 2, 3, 4 ou même 5 colonnes différentes, selon le jeu de données.Je souhaite supprimer les lignes uniquement lorsque TOUTES les "n" de ces colonnes "X_Clean" ont des valeurs nulles, mais jamais si au moins l'une d'entre elles contient une valeur.
Je pensais faire une boucle FOR pour générer la liste des colonnes d'intérêt, et cela fonctionne.
col_list = dt <<GET column="" names="">0, i--,
if(!contains(col_list[i], "X_Clean"),
remove from(col_list, i);
));</GET>Mais je ne suis pas sûr de la prochaine étape.Parce que je ne peux pas faire une autre boucle FOR pour chaque colonne individuelle, je dois soit résumer les valeurs de toutes ces colonnes et si null puis supprimer... ou autre chose ?
Voici un exemple de mon tableau, dans ce cas seule la 3ème ligne de date serait éligible pour être supprimée.
| Entité | 2X_Nettoyer | 3X_Nettoyer | 4X_Nettoyer |
| UN | 1 | 3 | 6 |
| B | | 4 | 5 |
| UN | | | |
| B | 4 | 1 | 3 |
| UN | 3 | 4 | 4 |
| 6 | 1 | 1 | 0 |
Voici comment je l'aurais fait si j'avais pu coder en dur des colonnes spécifiques, sauf que je ne peux pas car elles varient.
dt << Select Where(Is Missing(:Name( "2X_Clean" ) | :Name( "3X_Clean" ) | :Name( "4X_Clean" )))<<DELETE rows=""></DELETE>
Des idées?Merci!
Re : Comment supprimer des lignes de numéros de colonnes variables lorsqu'il manque toutes des donnéesMerci Jim.
Re : Comment supprimer des lignes de numéros de colonnes variables lorsqu'il manque toutes des donnéesC'est ma faute.J'aurais dû comprendre qu'une colonne commençant par un chiffre confondrait JMP.J'ai ajouté des fonctions :Name() autour des références aux noms de colonnes.
dt = Current Data Table();
col_list = dt << get column names( string );
For( i = N Items( col_list ), i > 0, i--,
If( !Contains( col_list[i], "X_Clean" ),
Remove From( col_list, i )
)
);
theExpr = "dt << select where(isMissing(Sum(:name(\!"" || col_list[1];
For( i = 2, i <= N Items( col_list ), i++,
theExpr = theExpr || "\!"),:name(\!"" || col_list[i]
);
theExpr = theExpr || "\!")))==1)<<DELETE rows=""></DELETE>
Re : Comment supprimer des lignes de numéros de colonnes variables lorsqu'il manque toutes des donnéesJim, c'est un sujet intéressant. Lorsque j'ouvre la table de données, telle qu'elle est jointe, et que j'exécute le jsl suivant, il semble que je ne puisse pas supprimer toutes les lignes nulles. Pourquoi?
dt = table de données actuelle () ;
l'Expr = "dt << select where(isMissing(Sum(:" || col_list [ 1 ] ;
Pour ( je = 2 , je <= N articles ( col_list ) , je ++,
l'Expr = l'Expr || ",:" || col_list [ je ]
) ;
l'Expr = l'Expr || "))==1)< ;
Éval ( Analyser ( l'Expr ) ) ;
Re : Comment supprimer des lignes de numéros de colonnes variables lorsqu'il manque toutes des donnéesTout ce que vous avez à faire est de construire une variable de chaîne littérale qui est le code dynamique que vous devez exécuter pour accomplir ce que vous voulez, puis une fois construit, exécutez-le.Le code ci-dessous est un exemple de la façon dont vous le feriez
theExpr = "dt << select where(isMissing(Sum(:" || col_list[1];
For( i = 2, i <= N Items( col_list ), i++,
theExpr = theExpr || ",:" || col_list[i]
);
theExpr = theExpr || "))==1)<<DELETE rows=""></DELETE>