根据多列中的 ID 来设置平均值吗?我需要一个 JSL 脚本来从多列数据中取平均值,并将它们子集化到单独的数据表中。但是,我需要将平均值按多个分类标识符分组。例如,对于下面的数据表,我需要将 SubjectA Group X 和 Subject A Group 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 ,
有几种不同的方法可以做到这一点,但最简单的方法之一可能是使用 Tabulate 平台。
使用您提供的示例数据表,只需一点点 JSL 即可完成:
Tabulate(
Add Table(
Column Table( Analysis Columns( :Data A, :Data B ), Statistics( Mean ) ),
Row Table( Grouping Columns( :Subject, :Group ) )
)
);
Tabulate 平台的相应输出如下所示:

我相信这正是您想要的。当然,您可以添加更多统计数据以包含或以其他方式执行制表,但我相信这是您想要的。然后,您可以单击“完成”,然后使用红色热按钮下拉菜单,选择“制作成数据表”,然后从平台获取数据表(您也可以使用 JSL 为您完成所有这些操作)。
看起来您引用的上一篇文章使用了列公式,这是我建议的另一种方法,但那里已经回答了这个问题,所以如果您愿意,您可以随时查看该帖子的更多详细信息。但是,我真的认为 Tabulate 平台就是您想要的——您可以尝试不同的分组列等,看看数据如何变化。
希望这有帮助!,
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>