Auswählen von Zellen mit leeren DatenIch habe eine Tabelle, die wie die folgende aussieht:
| Operator |
M-Typ |
Beschreibung |
Beschreibung 2 |
M1 |
M2 |
M3 |
M4 |
M5 |
M6 |
| 415 |
Nxyz |
Ein heißer |
Heißreinigung 1 |
415 |
415 |
415 |
415 |
415 |
415 |
| 615 |
Nxyz |
B kalt |
Kaltreinigung 1 |
615 |
615 |
615 |
|
615 |
615 |
| 815 |
Nxyz |
Ein heißer |
Heißreinigung 2 |
815 |
815 |
815 |
815 |
815 |
815 |
| 1015 |
Nxyz |
B kalt |
Kaltreinigung 2 |
1015 |
|
1015 |
1015 |
1015 |
1015 |
| 1215 |
Nxyz |
Ein heißer |
Heißreinigung 1 |
1215 |
1215 |
1215 |
1215 |
1215 |
1215 |
| 1415 |
Nxyz |
B kalt |
Kaltreinigung 1 |
1415 |
1415 |
1415 |
1415 |
1415 |
|
| 1615 |
Nxyz |
Ein heißer |
Heißreinigung 2 |
1615 |
1615 |
1615 |
1615 |
1615 |
1615 |
| 1815 |
Nxyz |
B kalt |
Kaltreinigung 2 |
1815 |
1815 |
1815 |
|
|
1815 |
Ich möchte nur die leeren Zeilen auswählen. Da die Spalten M1–M6 jedes Mal variieren können, wenn ich die Daten abrufe, kann ich die Spaltennamen im JSL-Skript nicht verwenden. Ich versuche unten eine FOR-Schleife zu verwenden, um die Zeilen mit leeren Daten auszuwählen, aber dadurch werden nur die Zeilen ausgewählt, in denen die letzte Zelle leer ist.
dt = Current Data Table();
nc = dt << get column names( Numeric );
For( i = 1, i <= N Items( nc ), i++,
dt <<SELECT where=""></SELECT>
Schließlich möchte ich, dass die Ausgabetabelle wie folgt aussieht
| Operator |
M-Typ |
Beschreibung |
Beschreibung 2 |
Maschine |
| 615 |
Nxyz |
B kalt |
Kaltreinigung 1 |
M4 |
| 1015 |
Nxyz |
B kalt |
Kaltreinigung 2 |
M2 |
| 1415 |
Nxyz |
B kalt |
Kaltreinigung 1 |
M6 |
| 1815 |
Nxyz |
B kalt |
Kaltreinigung 2 |
M4 |
| 1815 |
Nxyz |
B kalt |
Kaltreinigung 2 |
M5 |
Der große Trick dabei besteht darin, dies ohne Codierung in den Spaltennamen für (M1, M2 usw.) zu tun, da diese sich ändern werden.
Irgendwelche Ideen
Automatisierung und SkripterstellungBetreff: Zellen mit leeren Daten auswählen<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Vielen Dank an alle.....Alles hat funktioniert, außer Loc Nonmissing.....Ich habe im Moment nur JMP9 (zu faul für ein Upgrade) und diese Funktion funktioniert in JMP9 nicht...Ich bin immer noch ein JSL-Neuling.....Nochmals vielen Dank
Betreff: Zellen mit leeren Daten auswählenMS, das ist noch schicker – sehen wir uns jetzt an, wie Sie es in 0 Codezeilen machen!Ha ha, das zeigt nur, dass es in JSL mehrere Möglichkeiten gibt, dasselbe zu tun.
Betreff: Zellen mit leeren Daten auswählenWenn ich Ihre Nachricht richtig verstehe, haben Sie meiner Meinung nach tatsächlich zwei Fragen.
- So finden Sie die Zeilen, die für einen bestimmten Spaltensatz alle fehlen.
- So machen Sie Ihren Code unabhängig von den Namen dieser Spalten und deren Anzahl.
Es überrascht nicht, dass es viele verschiedene Möglichkeiten gibt, 1. PMroz , MS Und Craige@JMP habe Dir dort einige Möglichkeiten aufgezeigt.
Ich werfe noch einen rein. Du könntest das verwenden Fehlendes Datenmuster Dienstprogramm, um sie zu finden.
dt = Open( "$SAMPLE_DATA\Cities.jmp" );
//delete some columns from this table to make it fit your example
dt << delete columns( "PM10", "X", "Y" );
//change name of data table to ensure this modified version doesn't get saved
//over the sample data
dt << set name( "CitiesModified" );
//I want to use the columns starting at column 9,
//so I build a list of references to them
mycols = {};
For( i = 9, i <= N Cols( dt ), i++,
Insert Into( mycols, Column( dt, i ) )
);
mdp = Dt << Missing Data Pattern( columns( Eval( mycols ) ), Output Table( "Missing Data Pattern" ) );
//The patterns columns shows the pattern of missing values
//the Missing Data Pattern data table is sorted,
//so if there are rows with all missing data
//the last row of the Missing Data Pattern data table will be all 1s.
//The Repeat() function just builds a string of 1s for as many columns as I'm working with
If( Column( mdp, "Patterns" )[N Rows( mdp )] == Repeat( "1", N Items( mycols ) ),
//The Missing Data Pattern data table is linked to the source table so selecting a row
//in it, selects all the rows that it represents in the source table
mdp << Select Rows( N Rows( mdp ) );
//now I can delete the rows in the source table
dt << delete rows;
,
Show( "No all missing rows" )
);
Ich habe versucht zu zeigen, wie dieser Code für eine beliebige Anzahl von Spalten funktioniert. Da ich in diesem Fall eine Liste von Spalten zur Übergabe an das Dienstprogramm „Missing Data Pattern“ benötigte, habe ich eine Liste basierend auf den Spaltennummern erstellt.
Auch wenn ich das alles geschrieben und gezeigt habe, wie man das Missing Data Pattern Utility verwendet, denke ich, dass meine Lieblingslösung hier wäre PMroz ist zu verwenden Stapelspalten . Am Ende möchten Sie die Daten ohnehin gestapelt haben. Wenn Sie dies also zunächst tun, können Sie ganz einfach die fehlenden Zeilen in der gestapelten Spalte auswählen und löschen.
dt = Open( "$SAMPLE_DATA\Cities.jmp" );
//delete some columns from this table to make it fit your example
dt << delete columns( "PM10", "X", "Y" );
//change name of data table to ensure this modified version doesn't get saved
//over the sample data
dt << set name( "CitiesModified" );
//again I need a list of columns to use in the Stack()
mycols = {};
For( i = 9, i <= N Cols( dt ), i++,
Insert Into( mycols, Column( dt, i ) )
);
//stack those columns creating a new data table
stacked_dt = dt << Stack(
columns( Eval( mycols ) ),
Source Label Column( "Gas" ),
Stacked Data Column( "PPM" )
);
missing_rows = stacked_dt << get rows where( Is Missing( :PPM ) );
stacked_dt << delete rows( missing_rows );
Betreff: Zellen mit leeren Daten auswählenNoch eine andere Möglichkeit, Zeilen mit leeren Zellen auszuwählen:
dt << select where(!Contains(Loc Nonmissing(dt << get as matrix), Row()));
Betreff: Zellen mit leeren Daten auswählenSehr glatt.Wusste nicht, dass man in einen Ausdruck (e) einfügen kann.ich dachte einfügen in brauchte eine Liste.
Betreff: Zellen mit leeren Daten auswählenGleiche Antwort wie PMroz Verwendung von Ausdrucksmanipulation:
dt = Current Data Table();
e = Expr( Or() ); // the OR of the ismissing(columns) will be built here
nc = dt << get column names( Numeric );
For( i = 1, i <= N Items( nc ), i++,
Insert Into( e, Eval Expr( Is Missing( Expr( nc ) ) ) )
);
dt << selectwhere( e );
der Ausdruck „e“ sieht so aus
nameexpr(e)
/*:
Is Missing( :m1 ) | Is Missing( :m2 ) | Is Missing( :m3 ) | Is Missing( :m4 ) | Is Missing( :m5 ) | Is Missing( :m6 )
Head Arg Rekursionsformel
Selbstbeobachtung

Betreff: Zellen mit leeren Daten auswählenSie können den Befehl STACK verwenden, um Ihre Daten zu stapeln, einschließlich der Werte von M1-Mn .Wählen Sie dann leere Zeilen aus und löschen Sie sie.
Oder versuchen Sie es mit diesem Code:
dt = Current Data Table();
col_list = dt << get column names( Numeric, string );
where_clause = "";
For( i = 1, i <= N Items( nc ), i++,
one_col = col_list[i];
if (i == 1,
// then
where_clause =evalinsert("\[dt << select where(is missing(as column(dt, "^one_col^"))]\");
// else
,
where_clause = evalinsert("\[^where_clause^ | is missing(as column(dt, "^one_col^"))]\");
);
);
where_clause = where_clause || ")";
eval(parse(where_clause));