Ich habe eine Tabelle mit ~ 4.000.000 Datenzeilen, die eine sehr große Vielfalt von Testbedingungen enthalten. Ich verwende die Funktion „Ausreißer untersuchen“ in JMP, um Zellwerte, die die Ausreißerkriterien erfüllen, in „fehlend“ zu ändern. Ich möchte dann die mit den fehlenden Werten verknüpfte Zeilenspalten-ID nehmen und sie aus dem Hauptdatensatz ausschließen. Ich habe Get Rows Where( Is Missing( :col ) versucht, aber ich kann keinen Weg finden, es effektiv in die Haupttabelle zu übersetzen. Das ist das Beste, was mir im Moment einfällt. Jede Hilfe ist immer willkommen.
Try( If( Is Scriptable( dt_screen ), Close( dt_Screen, No Save ) ) );
Current Data Table( ::dt_testdata );
::dt_testdata = Current Data Table();
input_1 = {8, 8.25, 8.5, 8.75, 9, 9.25, 9.5, 9.75, 10, 10.25, 10.5, 10.75, 11, 14.75, 15, 15.25, 15.5, 15.75, 16, 16.25, 16.5, 16.75, 17, 17.25, 17.5, 17.75};
setid = {1100};
i = 1;
For( i = 1, i <= N Items( setid ), i++,
id = setid[i];
dt_Screen = New Table( "Screened" );
For( j = 1, j <= N Items( input_1 ), j++,
input_2 = input_1[j];
a = ::dt_testdata << Get Rows Where( :set_id == id & :teststate == "6" & :Input == input_2 );
If( j == 1,
b = Column(::dt_testdata, "wafer_number")[a];
Wait( 0 );
c = Column(::dt_testdata, "part_number")[a];
Wait( 0 );
d = Column(::dt_testdata, "channel")[a];
Wait( 0 );
e = Column(::dt_testdata, "RowCol_Chnl_PartNo" )[a];
Wait( 0 );
dt_Screen << New Column( "wafer_number", Character, Values( b ) );
Wait( 0 );
dt_Screen << New Column( "part_number", Character, Values( c) );
Wait( 0 );
dt_Screen << New Column( "channel", Character, Values( d ) );
Wait( 0 );
dt_Screen << New Column( "RowCol_Chnl_PartNo", Character, Values( e ) );
);
f = Column( ::dt_testdata, Eval( "Output" ) )[a];
Wait( 0 );
dt_Screen << New Column( Eval Insert( "Output @ ^input_2^"), Numeric, Values( f ) );
);
colsToScreen = dt_Screen << Get Column Names( Numeric );
Show( colsToScreen );
z = 1;
For( z = 1, z <= N Items( colsToScreen ), z++,
cols = Char( colsToScreen[z] );
test = colsToScreen[z];
eo = dt_Screen << Explore Outliers(
Y( Column( cols ) ),
K Sigma( 3 ),
Robust Fit Outliers( 1 ),
Show Only Columns With Outliers( 1 ),
Invisible
);
eoRep = Report( eo );
table = eoRep[Table Box( 1 )];
colListEO = eoRep[String Col Box( 1 )];
nCols = N Items( colListEO << get );
For( c = 1, c <= nCols, c++,
CMD = Expr(
table << Set Selected Rows( {colTBD} )
);
Substitute Into( CMD, Expr( colTBD ), Eval( c ) );
CMD;
eo << ColorCells( 1 );
eo << ChangeToMissing( 1 );
);
);
b = 1;
For( b = 2, b <= N Items( colsToScreen ), b++,
cols = colsToScreen[b];
RowColToDelete = dt_screen << Get Rows Where( Is Missing( cols ) );
c = 1;
For( c = 1, c <= N Items( RowColToDelete ), c++,
row = RowColToDelete[c];
::dt_testdata << Select Where( :RowCol_Chnl_PartNo == row ) << Hide( 1 ) << Exclude( 1 );
Wait( 0 );
);
);
);Danke für die Antwort Herr Nelson. Das Problem besteht nicht darin, die fehlenden Zeilen zu finden. Das Problem ist die Zeit, die benötigt wird, um die fehlenden Zeilenspalten-IDs zu erhalten und sie in der Haupttabelle auszublenden und auszuschließen ... Wenn Sie x = Input und Y = Output darstellen würden, wie Sie im Beispiel sehen. Die Ausreißer entfernen finden die Daten, die außerhalb der Verteilung liegen, und ändern sie auf dem dt_screen in fehlend. Ich möchte in der Lage sein, Zeilenspalten-IDs zu nehmen und sie in der Haupttabelle auszublenden / auszuschließen, um dieses Diagramm zu bereinigen.

Wenn ich Ihr Problem verstehe, können Ihnen die folgenden Beispiele einen Einblick geben, wie Sie die Zeilen mit fehlenden Werten finden
names default to here(1);
dt=open("$SAMPLE_DATA/big class.jmp");
dt:weight[3]=.;
dt:weight[5]=.;
col= dt<<GET column="" names=""></GET>