由于对脚本编写非常陌生,我能够生成此脚本来帮助我的研究小组简化一些数据分析。 到目前为止,它还不是很用户友好,(必须进入脚本并手动插入目标文件路径,更改所有“By1”和“By1 Variable #”以匹配目标文件路径定义的样本名称( 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 列中的数据自动填充 Fit Group 部分中的 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" )
);