根據多列中的 ID 對平均值進行子集化?我需要一個 JSL 腳本來獲取多列資料的平均值,並將它們子集到一個單獨的資料表中。但是,我需要將平均值按多個分類標識符進行分組。例如,對於下面的資料表,我需要科目 A 組 X 和科目 A 組 y 的平均值,作為單獨的行,如第二個範例表所示。與上一個問題類似。如何修改腳本以包含多列的平均值?如果我需要在來源資料表中建立平均列,然後單獨子集化,這也可以。
源表示例:
| 主題 | 團體 | 數據A | 數據B |
| A | x | 5 | 2 |
| A | y | 0 | 2 |
| A | x | 5 | 0 |
| B | z | 5 | 2 |
| B | x | 5 | 2 |
| B | x | 5 | 2 |
輸出表示例:
| 主題 | 團體 | 數據A平均值 | 數據B平均值 |
| A | x | 5 | 1 |
| A | y | 0 | 2 |
| B | x | 5 | 2 |
| B | z | 5 | 2 |
我在 Windows 上使用 JMP Pro 18。
自動化和腳本編寫資料混合與清理視窗回覆:根據多列中的 ID 對平均值進行子集化?嗨@Mcc99 ,
有幾種不同的方法可以做到這一點,但最簡單的方法之一可能是使用製表平台。
使用您提供的範例資料表,只需一點點 JSL 即可完成:
Tabulate(
Add Table(
Column Table( Analysis Columns( :Data A, :Data B ), Statistics( Mean ) ),
Row Table( Grouping Columns( :Subject, :Group ) )
)
);
Tabulate 平台的對應輸出如下所示:

我相信這正是您所追求的。您當然可以添加更多統計資料以包括或以其他方式執行製表,但我相信這就是您想要的。然後,您可以按一下“完成”,透過紅色熱按鈕下拉式選單,您可以選擇“產生資料表”,然後從平台取得資料表(您也可以使用 JSL 為您完成所有這些操作)。
看起來您引用的上一篇文章使用了列公式,這是我建議的另一種方式,但它已經在那裡得到了回答,因此如果您想要這樣做,您可以隨時更詳細地查看該文章。但是,我確實認為製表平台正是您想要的 - 您可以使用不同的分組列等來查看資料如何變化。
希望有幫助!
DS
回覆:根據多列中的 ID 對平均值進行子集化?謝謝!我什至沒有想到使用製表,但它使我的腳本比列公式乾淨得多。但是,我在將製表表儲存為新資料表時遇到問題。我在上面的製表腳本之後添加了下面的腳本。儘管表格視窗打開,但新資料表卻沒有打開。
<< Make Into Data Table(Outputtable("Average data"));回覆:根據多列中的 ID 對平均值進行子集化?@Mcc99
您可以考慮的另一個選項是使用“表”>“摘要”。預覽窗格有助於確保您獲得正確的輸出,特別是當您按多列分組時。
表格 > 摘要:

源腳本:
Data Table( "Data Table Name" ) << Summary(
Group( :Subject, :Group ),
Mean( :Data A ),
Mean( :Data B ),
Freq( "None" ),
Weight( "None" ),
output table name( "Summary of Data Table Name by Subject, Group" )
);
回覆:根據多列中的 ID 對平均值進行子集化?嗨@Mcc99 ,
您確定在 JSL 中正確引用了物件嗎?如果您使用下面的程式碼(假設您正在使用範例中的資料表結構,它將使用 Tabulate 產生正確的表格資料表,然後將其放入具有給定名稱的資料表中,並關閉 Tabulate 視窗。
Names Default To Here( 1 );
dt = Current Data Table();
dttab = dt << Tabulate(
Add Table(
Column Table( Analysis Columns( :Data A, :Data B ), Statistics( Mean ) ),
Row Table( Grouping Columns( :Subject, :Group ) )
)
);
dttab << Make Into Data Table( OutputTable( "Average Data" ) );
dttab <<CLOSE window=""></CLOSE>
<P>希望有幫助!</P>
<P>DS</P>