Wie lösche ich Zeilen mit variablen Spaltennummern, wenn allen Daten fehlen?Ich habe einen automatisch generierten Datensatz und einige der Spalten, die einen Teilstring „X_Clean“ enthalten, werden einige Nullwerte haben.Manchmal gibt es 2, 3, 4 oder sogar 5 verschiedene Spalten, abhängig vom Datensatz.Ich möchte die Zeilen nur löschen, wenn ALLE „n“ dieser „X_Clean“-Spalten Nullwerte haben, aber niemals, wenn mindestens eine von ihnen mit einem Wert gefüllt ist.
Ich habe darüber nachgedacht, eine FOR-Schleife durchzuführen, um die gewünschte Spaltenliste zu generieren, und das funktioniert.
col_list = dt <<GET column="" names="">0, i--,
if(!contains(col_list[i], "X_Clean"),
remove from(col_list, i);
));</GET>Aber dann bin ich mir über den nächsten Schritt nicht sicher.Da ich nicht für jede einzelne Spalte eine weitere FOR-Schleife ausführen kann, muss ich entweder die Werte aller dieser Spalten zusammenfassen und, wenn sie null sind, löschen ... oder etwas anderes?
Hier ist ein Beispiel meiner Tabelle. In diesem Fall würde nur die dritte Datumszeile zum Löschen in Frage kommen.
| Juristische Person | 2X_Clean | 3X_Sauber | 4X_Clean |
| A | 1 | 3 | 6 |
| B | | 4 | 5 |
| A | | | |
| B | 4 | 1 | 3 |
| A | 3 | 4 | 4 |
| 6 | 1 | 1 | 0 |
So hätte ich es gemacht, wenn ich bestimmte Spalten hart codieren könnte, aber das geht nicht, weil sie variieren.
dt << Select Where(Is Missing(:Name( "2X_Clean" ) | :Name( "3X_Clean" ) | :Name( "4X_Clean" )))<<DELETE rows=""></DELETE>
Irgendwelche Ideen?Danke!
Betreff: Wie lösche ich Zeilen mit variablen Spaltennummern, wenn allen Daten fehlen?Danke, Jim.
Betreff: Wie lösche ich Zeilen mit variablen Spaltennummern, wenn allen Daten fehlen?Das ist meine Schuld.Mir hätte klar sein müssen, dass eine Spalte, die mit einer Zahl beginnt, JMP verwirren würde.Ich habe :Name()-Funktionen um die Verweise auf die Spaltennamen herum hinzugefügt.
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>
Betreff: Wie lösche ich Zeilen mit variablen Spaltennummern, wenn allen Daten fehlen?Jim, das ist ein interessantes Thema. Wenn ich die angehängte Datentabelle öffne und die folgende JSL ausführe, scheint es, dass ich die gesamte Nullzeile nicht löschen kann. Warum?
dt = aktuelle Datentabelle () ;
theExpr = „dt << select where(isMissing(Sum(:“ || col_list [ 1 ] ;
Für ( ich = 2 , ich <= N Artikel ( col_list ) , ich ++,
theExpr = theExpr || ",":" || col_list [ ich ]
) ;
theExpr = theExpr || "))==1)< ;
Bewertung ( Analysieren ( theExpr ) ) ;
Betreff: Wie lösche ich Zeilen mit variablen Spaltennummern, wenn allen Daten fehlen?Alles, was Sie tun müssen, ist, eine literale Zeichenfolgenvariable zu erstellen, die den dynamischen Code darstellt, den Sie ausführen müssen, um das zu erreichen, was Sie wollen, und ihn dann nach der Erstellung auszuführen.Der folgende Code ist ein Beispiel dafür, wie Sie es tun würden
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>