非常に多様なテスト条件を含む約4,000,000行のデータを含むテーブルがあります。 JMP内の外れ値の探索機能を使用して、外れ値の基準を満たすセル値を欠落に変更します。 次に、欠落している値に関連付けられている行列IDを取得し、それらをメインデータセットから除外します。 Get Rows Where(Is Missing(:col)を試しましたが、メインテーブルに効果的に変換する方法がわかりません。 これは私が現時点で思いつくことができる最高のものです。 ありとあらゆる助けは常にありがたいです。
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 );
);
);
);ネルソンさんからの返信ありがとうございます。 問題は、欠落している行を見つけられないことです。 問題は、欠落している行列IDを取得し、メインテーブルでそれらを非表示および除外するのにかかる時間です... 例に示すように、x=入力およびY=出力をプロットする場合。 外れ値を削除すると、分布外のデータが検出され、dt_screenで欠落しているデータに変更されます。 このプロットをクリーンアップするために、行の列IDを取得し、メインテーブルでそれらを非表示/除外できるようにしたいと思います。

私があなたの問題を理解している場合、以下の例は、欠落している値の行を見つける方法についての洞察を与えるかもしれません
names default to here(1);
dt=open("$SAMPLE_DATA/big class.jmp");
dt:weight[3]=.;
dt:weight[5]=.;
col= dt<<GET column="" names=""></GET>