如何編寫一個 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]^ ) )" ) ) )
);