如何找到每個測試來篩選一個單元我對 JMP 和 JSL 相當陌生,目前正在致力於在非常大的資料集中篩選出一個單元。 我的目標是獲得一個輸出表,其中包含每個測試的名稱,其中單元(由其 ECID 定義)的 z 分數大於 3(或我可以選擇的其他值)。 這些 z 分數需要基於每個測試各自通過單位的分佈。 是否有用於此目的的 JMP 功能或已製作的腳本來執行這些操作。 下面是我非常寬鬆的腳本偽代碼。
虛擬程式碼:
需要足夠大的資料集才能為不同的測試提供常態分佈(至少 30 個良好單元)
僅將基礎資料表子集為 bin 1 單元
僅使用透過單位計算每個測試的平均值和標準差
計算與每個測試的平均值和標準偏差相關的 z 分數
建立包含所有高於 3 的測試和分數的輸出表
自動化和腳本編寫視窗回覆:如何找到每個測試來篩選一個單元您能否提供導致錯誤的範例資料表?
回覆:如何找到每個測試來篩選一個單元嗨吉姆,
我查看了這個腳本,它似乎適用於我發送給您的範例資料集。 無論出於何種原因,當我修改幾行以滿足我的需要時,我收到以下錯誤:「範圍資料表存取需要資料表列或變數{1}」。 我更改了以下幾行以滿足我的需要:6、17、21 和 28。 除此之外,這與您上面提供的腳本相同。 有任何想法嗎?
回覆:如何找到每個測試來篩選一個單元以下是處理您的問題的一種方法的範例。我的設定方式是,您在輸入資料表中選擇要檢查的 ECID 行,然後執行腳本。檢查一下,看看它是否為您指明了可以進行所需的最終更改的方向。
Names Default To Here( 1 );
// Open Data Table: Probe.jmp
// → Data Table( "Probe" )
//dt = Open( "$SAMPLE_DATA/Process Measurements.jmp" );
dt = Data Table( "Modified_Probe_Input" );
// Only run if at least one ECID row has been selected
If( N Rows( dt << get selected rows() ) > 0,
// Create a new data table to place the results in
dtOutput = dt << subset( selected rows( 1 ), selected columns( 0 ) );
selRows = dt << get selected rows;
// Get column names for all continuous columns
colNames = dt << get column names( string );
Remove From( colNames, 1, 9 );
dtSum = dt << Summary(
invisible,
Group( :Bin ),
Mean( colNames ),
Std Dev( colNames ),
Freq( "None" ),
Weight( "None" ),
link to original data table(0)
);
dtSum << select where( :Bin != 1 );
Try( dtSum << delete rows );
For( i = 1, i <= N Items( colNames ), i++,
Mean = Column( dtSum, "Mean(" || colNames[i] || ")" )[1];
Stddev = Column( dtSum, "Std dev(" || colNames[i] || ")" )[1];
column( dtOutput, colNames[i]) << set name( column( dtOutput, colNames[i]) << get name || " Z Score" );
For( k = 1, k <= N Rows( dtOutput ), k++,
Column( dtOutput, colNames[i] )[k] = Abs( As Column( dtOutput, colNames[i] )[k] - Mean ) / Stddev
);
targetRows = dtOutput << get rows where( As Column( dtOutput, colNames[i] ) >= 3 );
Try( As Column( dtOutput, colNames[i] ) << color cells( "red", As List( targetRows ) ) );
);
);
close( dtSum, nosave );回覆:如何找到每個測試來篩選一個單元我已修改並附加探針範例資料集作為我的輸入資料表。 從那裡我想創建一個腳本,它可以輸出一個表,其中包含在原始資料集中找到的測試列表(列名稱),其中單個單元的參數資料(由其 ECID 表示)的 Z 分數高於 3 (或其他一些用戶控制的值)。 我在下面附上了範例表輸出。 附加的輸出表不是基於參數數據,而是我想要的範例。 在此範例中,我將篩選所有測試,其中探針資料集(ECID:Z1J4H_24_2_1)中的第一個單元的參數值與相應測試的平均值相差大於 3 西格瑪。 如果我可以澄清任何事情,請告訴我!
回覆:如何找到每個測試來篩選一個單元請提供範例輸入資料表以及您期望輸出的範例。
回覆:如何找到每個測試來篩選一個單元嗨吉姆,
我之前的問題沒說清楚。 我想根據整個資料集的分佈為每個測試找到一個單位 z 分數。 因此,我不能只對值得注意的 ECID 進行子集化。 其次,我不確定原始腳本是否正常工作。 經過進一步審查,我注意到許多 z 分數不太可能出現。 有些 z 分數接近三位數。

回覆:如何找到每個測試來篩選一個單元我只需創建原始數據表的子集並對其運行分析。
dt = current data table();
ECIDsToTest = { "413257", "56739",...........};
dt << select where( contains( ECIDsToTest, :ECID ) );
dtToTest = dt << subset( selected columns( 0 ), selected rows( 1 ) );
// Run the Z Score analysis on the new subset回覆:如何找到每個測試來篩選一個單元這是一個非常好的起點。 感謝您的幫助。 我想採用此腳本,以便我只能在大型資料集中具有特定 ECID 的單元上執行它。 如果我在每個數據點/晶片上運行此腳本,我將不幸使 JMP 崩潰。 您如何建議採用此腳本來實現此目的?
回覆:如何找到每個測試來篩選一個單元下面是一個範例腳本,它會建立 Z 分數並識別大於 3 的值。這是您想要的方向嗎?
Names Default To Here( 1 );
// Open Data Table: Probe.jmp
// → Data Table( "Probe" )
dt = Open( "$SAMPLE_DATA/Process Measurements.jmp" );
// Create a Bin column
dt << New Column( "Bin",
modeling type( nominal ),
set each value( If( Random Uniform( 0, 1 ) <= .8, 1, Random Integer( 2, 7 ) ) )
);
// Get column names for all continuous columns
colNames = dt << get column names( string, continuous );
For( i = 1, i <= N Items( colNames ), i++,
mean = .;
stddev = .;
// Create the Z scores for each test
dt << New Column( colNames[i] || " Z Score",
formula(
If( Row() == 1,
Mean = Col Mean( If( :Bin == 1, As Column( dt, colNames[i] ), . ) );
Stddev = Col Std Dev( If( :Bin == 1, As Column( dt, colNames[i] ), . ) );
);
Abs( :Process 1 - Mean ) / Stddev;
)
);
Column( dt, N Cols( dt ) ) << delete formula;
targetRows = dt << get rows where( As Column( dt, N Cols( dt ) ) >= 3 );
Try( As Column( dt, N Cols( dt ) ) << color cells( "red", As List( targetRows ) ) );
);