我對腳本編寫非常陌生,因此能夠生成此腳本來幫助簡化研究小組的數據分析。 到目前為止,它還不是很友好,(必須進入腳本並手動插入目標文件路徑,更改所有“ By1”和“ By1變量#”以匹配目標文件路徑定義的樣本名稱( By1 =目標文件路徑),然後手動關閉腳本打開的所有數據,製表和報告窗口。 我正在嘗試通過腳本編制索引來教我自己如何克服所有這些障礙並簡化腳本,但是進展相對緩慢。
我的目標是,操作員只需與兩個提示窗口交互,一個提示窗口要求您指定要打開的文件,然後一個提示窗口保存最終生成的數據表,同時關閉腳本生成的所有窗口。
歡迎任何建議和技巧,第一次在JSL中學習腳本非常有趣!
Names Default To Here( 1 );
dt = Open( "Target File Path");
obj = dt << Tabulate(
Add Table(
Column Table(
Analysis Columns( :X1, :Y, :X2, :X3 ),
Statistics( Mean )
),
Row Table( Grouping Columns( :By1, :By2 ) )
)
);
obj << Make into Data Table;
nw = New Window ("Bivarate By2 Fit",
V List Box(
Fit Group(
Biv = Bivariate(
SendToByGroup( {:By1 == "By1 Variable 1"} ),
SendToByGroup( {:By1 == "By1 Variable 1"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 1", Platform Index( 2 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 1", Platform Index( 3 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 2"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 2", Platform Index( 2 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 2", Platform Index( 3 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 3"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 3", Platform Index( 2 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 3", Platform Index( 3 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 4"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 4", Platform Index( 2 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 4", Platform Index( 3 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 5"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 5", Platform Index( 2 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 5", Platform Index( 3 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 6"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 6", Platform Index( 2 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 6", Platform Index( 3 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 7"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 7", Platform Index( 2 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 7", Platform Index( 3 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 8"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 8", Platform Index( 2 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 8", Platform Index( 3 )},
Y( :Name( "Mean(X2)" ) )
),
X( :Name( "Mean(Y)" ) ),
Fit Line( {Line Color( {212, 73, 88} )} ),
By( :By1 )
)
)
)
);
Report ( Biv[1] ) ["Parameter Estimates"][Table Box(1)] << Make Combined Data Table;
dt = current data table ();
obj = dt << Split(
Split By( :Term ),
Split( :Y, :By1, :Estimate ),
Remaining Columns( Drop All ),
Sort by Column Property
);
New Column( "By2", Numeric, Continuous );
:"By2" << Format( "Percent", ,2 );
:"Estimate Mean(Y)" << Set Name ("Estimate Mean");
dt = current data table();
col =Column(dt, "By2");
col << Set Formula (:Estimate Mean() / :Estimate Intercept);
obj = dt << Tabulate(
Add Table(
Column Table(
Grouping Columns( :By1 Intercept ),
Analysis Columns( :By2 )
),
Row Table( Grouping Columns( :Y Intercept ) )
)
);
obj << Make into Data Table;
我知道了打開和關閉的功能,但是仍然難以確定如何從打開的文件“ By1”列中的數據中自動填充“適合組”部分中的By1變量。
有什麼建議麼?下面的更新腳本
dt1 = Open(
Pick File("Select JMP File",
"$Documents",
{"JMP Files|jmp", "All Files|*"},
1,
0
)
);
obj1 = dt1 << Tabulate(
Add Table(
Column Table(
Analysis Columns( :X1, :Y, :X2, :X3 ),
Statistics( Mean )
),
Row Table( Grouping Columns( :By1, :By2 ) )
)
);
obj1 << Make into Data Table;
dt2 = current data table();
Close (dt1);
nw1 = New Window ("Bivarate Fit",
V List Box(
Fit Group(
Biv = Bivariate(
SendToByGroup( {:By1 == "Series-1"} ),
SendToByGroup( {:By1 == "Series-1"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "Series-1", Platform Index( 2 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup(
{:By1 == "Series-1", Platform Index( 3 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 2"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 2", Platform Index( 2 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 2", Platform Index( 3 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 3"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 3", Platform Index( 2 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 3", Platform Index( 3 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 4"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 4", Platform Index( 2 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 4", Platform Index( 3 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 5"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 5", Platform Index( 2 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 5", Platform Index( 3 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 6"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 6", Platform Index( 2 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 6", Platform Index( 3 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 7"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 7", Platform Index( 2 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 7", Platform Index( 3 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 8"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 8", Platform Index( 2 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 8", Platform Index( 3 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 9"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 9", Platform Index( 2 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 9", Platform Index( 3 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 10"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 10", Platform Index( 2 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 10", Platform Index( 3 )},
Y( :Name( "Mean(X3)" ) )
),
X( :Name( "Mean(Y)" ) ),
Fit Line( {Line Color( {212, 73, 88} )} ),
By( :By1 )
)
)
)
);
Report ( Biv[1] ) ["Parameter Estimates"][Table Box(1)] << Make Combined Data Table;
dt3 = current data table ();
obj2 = dt3 << Split(
Split By( :Term ),
Split( :Y, :By1, :Estimate ),
Remaining Columns( Drop All ),
Sort by Column Property
);
New Column( "By2", Numeric, Continuous );
:"By2" << Format( "Percent", ,2 );
:"Estimate Mean(Y)" << Set Name ("Estimate Mean");
Close (dt3);
dt4 = current data table();
col =Column(dt4, "By2");
col << Set Formula (:Estimate Mean() / :Estimate Intercept);
obj3 = dt4 << Tabulate(
Add Table(
Column Table(
Grouping Columns( :By1 Intercept ),
Analysis Columns( :By2 )
),
Row Table( Grouping Columns( :Y Intercept ) )
)
);
obj 3 << Make Into Data Table;
Close (dt4);
dt = current data table();
If( dt << Save( "" ),
Write( "\!nsaved to " || (dt << GetPath) ),
Write( "\!nsave canceled" )
);