如何编写一个 for 循环以对数据表中的所有 Y 列运行单向方差分析我有一个大型数据表,其中包含 10,000 个不同的列名和少量行,其中包含来自 5 个不同样本组的复制品,包括一个标有“HN30”的对照组。如果我一次指定每个 Y 变量,我有一个脚本,它将对对照组 (HN30) 运行单向方差分析和 Dunnett 事后均值比较测试(即均值比较)。 但是,我不想输入所有 10,000 个不同的列名,也不想被提示运行 Dunnett 测试或为每个列分析输入控制名称。有人可以帮我编写一个 for 循环,该循环将一次遍历所有列的命令。 一旦我得到输出,我就知道如何使用 combine tables 命令来合并所有的输出 P 值。下面是我所拥有的适用于名为“SPP1”和“ABCC2”的两个指定列的内容,其中控制组行标记为“HN30”。只需要遍历所有列。 非常感谢 !
Fit Group(
Oneway(
Y( :SPP1 ),
X( :Cell lline ),
With Control( 1, {"HN30"} ),
Comparison Circles( 1 ),
SendToReport(
Dispatch(
{"Means Comparisons",
"Comparisons with a control using Dunnett's Method",
"LSD Threshold Matrix"},
"p-Value",
NumberColBox,
{Set Format( "Fixed Dec", 15, 15 )}
)
)
),
Oneway(
Y( :ABCC2 ),
X( :Cell lline ),
With Control( 1, {"HN30"} ),
Comparison Circles( 1 ),
SendToReport(
Dispatch(
{"Means Comparisons",
"Comparisons with a control using Dunnett's Method",
"LSD Threshold Matrix"},
"p-Value",
NumberColBox,
{Set Format( "Fixed Dec", 15, 15 )}
)
)
),
<<{Arrange in Rows( 1 )}
);脚本回复:我如何编写一个 for 循环以在数据表中的所有 Y 列上运行单向方差分析非常感谢你所有的时间。您的解决方案有效并且几乎是完美的。我感谢你花在帮助上的所有时间。只是想知道是否有命令或语法更改会强制循环的所有输出仅保留在一个窗口中。现在,每个循环都有自己的窗口,所以我会打开成千上万个窗口。此外,我不能使用组合数据表命令来整理类似的分析,因为每个结果都在单独的窗口中。以下是我使用您最后建议的代码。 显然,我自己不知道如何编码。有什么想法可以让它们全部输出到同一个窗口吗?
Names Default To Here( 1 );
cdt = Open( "F:/Stats/DTest.jmp" );
ow_expr = Expr(
Oneway(
Y( Column( all_ys[i] ) ),
X( :Cell lline ),
/* 3rd site is control */
With Control( 1, {"HN30"} ),
Comparison Circles( 1 ),
SendToReport(
Dispatch(
{"Means Comparisons", "Comparisons with a control using Dunnett's Method", "LSD Threshold Matrix"},
"p-Value",
NumberColBox,
{Set Format( "Fixed Dec", 15, 15 )}
)
)
)
);
all_ys = cdt << get column names( Continuous, String );
//For( i = 1, i <= n items(all_ys), i++,
For( i = 1, i <= n items(all_ys), i++,
Eval( Substitute( ow_expr, Expr( i ), i ) );
// Eval( Substitute( Expr( oneway( X( :Cell lline ), Y( Column( all_ys[i] ) ) ) ), Expr( i ), i ) )
// Eval( Parse( Eval Insert( "oneway( X( :Cell lline ), Y( :^all_ys[i]^ ) )" ) ) )
);回复:我如何编写一个 for 循环以在数据表中的所有 Y 列上运行单向方差分析你可以试试这个:
Names Default To Here( 1 );
cdt = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );
ow_expr = Expr(
Oneway(
Y( Column( all_ys[i] ) ),
X( :SITE ),
/* 3rd site is control */
With Control( 1, {3} ),
Comparison Circles( 1 ),
SendToReport(
Dispatch(
{"Means Comparisons", "Comparisons with a control using Dunnett's Method", "LSD Threshold Matrix"},
"p-Value",
NumberColBox,
{Set Format( "Fixed Dec", 15, 15 )}
)
)
)
);
all_ys = cdt << get column names( Continuous, String );
//For( i = 1, i <= n items(all_ys), i++,
For( i = 1, i <= 3, i++,
Eval( Substitute( ow_expr, Expr( i ), i ) );
// Eval( Substitute( Expr( oneway( X( :SITE ), Y( Column( all_ys[i] ) ) ) ), Expr( i ), i ) )
// Eval( Parse( Eval Insert( "oneway( X( :SITE ), Y( :^all_ys[i]^ ) )" ) ) )
);回复:我如何编写一个 for 循环以在数据表中的所有 Y 列上运行单向方差分析谢谢乔治,
我将您的示例调整到我的特定表中,现在让所有单向方差分析为每一列运行,这样这部分就可以工作了。但是,我仍然无法弄清楚如何在 Dunnett 测试中工作以遵循每个 ANOVA。不确定如何使用 for 循环构造该子命令。这是我到目前为止所拥有的,但我无法在底部显示的特定 Dunnett 测试在 for 循环中运行。有任何想法吗?再次感谢
Names Default To Here( 1 );
cdt = Open( "F:/Stats/DTest.jmp" );
all_ys = cdt << get column names( Continuous, String );
For( i = 1, i <= n items(all_ys), i++,
Eval( Parse( Eval Insert( "oneway( X( :Cell lLine ), Y( :^all_ys[i]^ ) )" ) ) )
);
Fit Group(
Oneway(
Y( :SPP1 ),
X( :Cell lline ),
With Control( 1, {"HN30"} ),
Comparison Circles( 1 ),
SendToReport(
Dispatch(
{"Means Comparisons",
"Comparisons with a control using Dunnett's Method",
"LSD Threshold Matrix"},
"p-Value",
NumberColBox,
{Set Format( "Fixed Dec", 15, 15 )}
)
)
),
Oneway(
Y( :ABCC2 ),
X( :Cell lline ),
With Control( 1, {"HN30"} ),
Comparison Circles( 1 ),
SendToReport(
Dispatch(
{"Means Comparisons",
"Comparisons with a control using Dunnett's Method",
"LSD Threshold Matrix"},
"p-Value",
NumberColBox,
{Set Format( "Fixed Dec", 15, 15 )}
)
)
),
<<{Arrange in Rows( 1 )}
);回复:我如何编写一个 for 循环以在数据表中的所有 Y 列上运行单向方差分析这是循环的一个示例。 也许你可以适应你的需要。
如果需要,您可以在脚本索引或脚本参考中找到所用命令的示例。
Names Default To Here( 1 );
cdt = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );
all_ys = cdt << get column names( Continuous, String );
For( i = 1, i <= n items(all_ys), i++,
Eval( Parse( Eval Insert( "oneway( X( :SITE ), Y( :^all_ys[i]^ ) )" ) ) )
);