Ho una tabella che ha ~ 4.000.000 di righe di dati che includono una grande varietà di condizioni di test. Uso la funzione Esplora valori anomali all'interno di JMP per modificare i valori delle celle che soddisfano i criteri anomali per mancare. Quindi voglio prendere l'id della colonna della riga associato ai valori mancanti ed escluderli dal set di dati principale. Ho provato Get Rows Where( Is Missing( :col ) ma non riesco a capire un modo per tradurlo efficacemente nella tabella principale. Questo è il meglio che posso inventare in questo momento. Qualsiasi aiuto è sempre apprezzato.
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 );
);
);
);Grazie per la risposta signor Nelson. Il problema non è trovare le righe mancanti. Il problema è il tempo necessario per ottenere gli ID della colonna della riga mancanti e nasconderli ed escluderli nella tabella principale... Se dovessi tracciare x = Input e Y = Output come vedi nell'esempio. Gli outlier di rimozione troveranno i dati che sono al di fuori della distribuzione e li cambieranno in mancanti su dt_screen. Voglio essere in grado di prendere gli ID delle colonne di riga e nasconderli/escluderli nella tabella principale per ripulire questa trama..

Se capisco il tuo problema, gli esempi seguenti potrebbero darti alcune informazioni su come trovare le righe del valore mancanti
names default to here(1);
dt=open("$SAMPLE_DATA/big class.jmp");
dt:weight[3]=.;
dt:weight[5]=.;
col= dt<<GET column="" names=""></GET>