wie man eine Teilmenge einer Tabelle erstellt und Daten aus der Schleife anhängtHallo,
Ich habe eine Reihe von Daten (siehe Anhang). Ich möchte jede Zeile in einer Spalte (nach bestimmten Kriterien) überprüfen und dann Zeilen isolieren, die diese Kriterien nicht erfüllen, und diese in eine neue Datentabelle unterteilen. Ich möchte in der Lage sein, dies für mehrere Spalten (wobei jede ihre eigenen Kriterien hat) zu wiederholen und diese Teilmenge-Tabelle hinzuzufügen, die ich ursprünglich erstellt habe. Ich habe Probleme damit und habe gehofft, dass jemand helfen könnte.
Folgendes habe ich getan:
path = "xxxxxxx/";
data_table = Open( path || "Sample Data.jmp" );
Sub_Table = New Table( "Rejected Parts Table", invisible );
New_table = data_table;
For( k = 1, k < N Col( New_table ), k++,
Print( k );
New_table << select where( Column( 1 + k )[] >= 0.2 | Column( 1 + k )[] <= 0.02 );
alp = New_table << Subset( Selected Rows, output table name( "subset" ) );
alp << Concatenate( Sub_Table, output table name( "Rejected Parts Table" ) ) <<
Save( path || "Rejected Parts.jmp" );
Close( alp );
New_table << delete rows();
);
Re: wie man eine Untermenge einer Tabelle erstellt und Daten aus der Schleife anhängtEin alternativer Ansatz, der dieselben Kriterien für alle Spalten verwendet:
dt = Data Table( "Sample Data.jmp" );
r = Loc( V Sum( Transpose( !(0.02 < dt << get as matrix < 0.2) ) ) );
dt << Subset( rows( r ), output table name( "Rejected Parts Table" ) );
dt << delete rows( r );
Etwas komplizierter, wenn jede Spalte ihre eigenen Kriterien hat, zum Beispiel:
dt = Data Table( "Sample Data.jmp" );
upper = [0.2 0.3 0.2 0.4 0.2];
lower = [0.02 0.03 0.02 0.04 0.02];
r = Loc( V Sum( Transpose( !(Repeat( lower, N Row( dt ) ) < dt << get as matrix < Repeat( upper, N Row( dt ) )) ) ) );
dt << Subset( rows( r ), output table name( "Rejected Parts Table" ) );
dt << delete rows( r );
Re: wie man eine Untermenge einer Tabelle erstellt und Daten aus der Schleife anhängtDas hier war etwas knifflig. Das wichtigste Problem ist die Verwendung von AS COLUMN in Ihrer select-Anweisung. Ich habe die Logik dahingehend geändert, dass Zeilen abgerufen werden und eine Liste von Zeilen erstellt werden soll, um die Teilmenge zu löschen. Die Funktion get_unique_values wurde mit freundlicher Genehmigung dieses Forums bereitgestellt!
get_unique_values = Function( {in_list},
{Default Local},
tmp = [=> 0];
Insert Into( tmp, in_list );
tmp << get keys;
);
path = "c:\temp\";
New_table = Open( path || "Sample Data.jmp" );
all_selected_rows = [];
For( k = 1, k < N Col( New_table ), k++,
Print( k );
selected_rows = new_table << get rows where( As Column( 1 + k ) >= .2 | As Column( 1 + k ) <= .02 );
// Append the rows we just found to the master list
If( N Rows( selected_rows ) > 0,
all_selected_rows = all_selected_rows |/ selected_rows
);
);
// Convert matrix to a list and get unique values
all_selected_list = get_unique_values( As List( all_selected_rows ) );
alp = New_table << Subset( rows( all_selected_list ), output table name( "Rejected Parts Table" ) );
alp << Save( path || "Rejected Parts.jmp" );
Close( alp );
New_table << delete rows( all_selected_list );