スクリプティングに非常に慣れていないので、このスクリプトを生成して、研究グループのデータ分析を合理化することができました。 現在のところ、あまりユーザーフレンドリーではありません(スクリプトに移動して手動でターゲットファイルパスを挿入し、すべての「By1」と「By1変数#」をターゲットファイルパスで定義されたサンプル名と一致するように変更する必要があります( By1 =ターゲットファイルパス)、スクリプトが開くすべてのデータ、集計、およびレポートウィンドウを手動で閉じます。 私はスクリプトインデックスを通じて、これらすべての障害を克服し、スクリプトを合理化する方法を自分自身に教えようとしていますが、それは比較的遅いです。
私の目標は、オペレーターが2つのプロンプトウィンドウを操作するだけでよいことです。1つは開くファイルを指定するように要求し、もう1つはスクリプトによって生成されたすべてのウィンドウを閉じながら最終的に生成されたデータテーブルを保存するように要求します。
どんな提案やヒントも歓迎します。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列のデータからFitGroupセクションの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" )
);