Tabboxループ内の管理図こんにちは、私はパラメータのリストに基づいて管理図を出力するための自動化されたスクリプトに取り組んでいます。以下のようなスタックデータテーブルがあります。

私はこれから管理図を作成しようとしています。スクリプトに関する限り、これはこれまでのところです。
Rcols = dt_final << Get Column Names();
id = dt_final << get kets;
tb = tabbox();
for(i, i<=nitems(id), i++,
cols = Rcols;
dt = dt_final << subset(by(id[i]));
dt << sort(by(dt, :DATE_TIME_START), Order(Ascending), Replace Table);
ccExpr = Expr(Control Chart(
Sample Label( column(dt,:DATE_TIME_START) ),
KSigma( 3 ),
For( i = 1, i <= N Items( cols ), i++,
insert into(ccExpr, EvalExpr(Chart Col( Column( dt_final, Expr(cols[i]) ), Levey Jennings )))
);
cc = Eval(EvalExpr(
platform(dt_final,
Expr(
nameexpr(ccExpr)
)
)
));
);
tb << Append(group, cc);
// Create the display window
));
nw = New Window( "Control Charts", Outlinebox("Control Charts By Process ID", tb));私はおそらくこれに取り組むための最善の方法から外れていることを知っていますが、これは最終的に私がする必要があるものです:
- グループ化によるサブセットdt_final
- 日付列を数値 - >連続 - >時間 - > m / d / yhに変更します。
- date_time_startでサブセットをソートします
- 各列のレヴェjennings管理図を生成し、それをタブボックスに追加する
- また、すべての列にすべての列があり、データがない状態でチャートが削除されるわけではない
ただし、誰かがこのループについて何らかの指示を与えることができるのであれば、日付データ型の変更に関する限り、ここにはまだいくつかのステップがありません。
ありがとう。
再:Tabboxループの管理図申し訳ありませんが、元のスクリプトのスクリプトにcolsとRcolsの両方が含まれていたためです(どちらも同じ)。 私はcolsを削除しましたが、それが管理図の列のリストを作成するスクリプトの部分を更新するのを忘れていました。 私はまだメモリにcolsを持っていたので、それはその時うまくいった。 これを修正するために、前回の返信でスクリプトを更新します。
再:Tabboxループの管理図うわー、これは素晴らしいです私はあなたに感謝し、すべての改装をお願い申し上げます。これを実行しようとするとエラーが発生しますが、その意味がわからないために理解していただけると幸いです。
エラー
'Subscript'へのアクセスまたは評価の際の添字の範囲、cols [/ * ### * / j]
再:Tabboxループの管理図[更新]スクリプトのバグを修正しました
これはすべての基準を満たしているように見えますが、IDごとにたくさんのテーブルを作成しないため、最終的にはもっときれいになると思います。 テーブルをサブセット化する代わりに、各タブの管理図にWhere()句を使用して、各IDのデータをサブセット化します。
dt_final = Current Data Table();
//Sort by Grouping and Start Time
dt_final << Sort(
By( :GROUPING, :DATE_TIME_START ),
Order( Ascending, Ascending ),
Output Table( "Final Sorted" ),
Replace Table
);
//List of Columns and Individual IDs
Rcols = dt_final << Get Column Names();
id = Associative Array(dt_final:GROUPING) << get keys;
//Initialize the window
nw = New Window("Control Charts",
Outlinebox("Control Charts By Process ID",
tb = tabbox();
)
);
//Create expression for control charts - use same expression for each subset of the data table
//We'll substitute different values for GroupID and col_list for each grouping
ccExpr = "Control Chart(
Sample Label( :DATE_TIME_START ),
KSigma( 3 ), col_list, Where(:GROUPING == \!"GroupID\!"))";
//Loop through each ID and add control charts to a new tab
for(i=1, i <= N Items(id), i++,
//If column has data, add it to the control chart report
cols_temp = ""; //will hold list of control charts for the current ID
//Loop through each column, determine if column has data for current ID
For( j = 3, j <= N Items( Rcols ), j++,
If(Sum(!Is Missing(Column(dt_final, j)[dt_final << Get Rows Where(:GROUPING == id[i])])) > 0,
cols_temp = cols_temp || Eval Insert("\[, Chart Col( Column( "^Rcols[j]^" ), Levey Jennings )]\");
)
);
//Substitute in the current ID for GroupID in ccExpr
ccExpr_temp = Substitute(ccExpr, "GroupID", id[i]);
//Substitute in the list of control chart columns for col_list in ccExpr
ccExpr_temp = Substitute(ccExpr_temp, "col_list", cols_temp);
//Add results to the tab box by parsing the string ccExpr_temp into an expression and evaluating it
tb << Add(id[i], platform(dt_final, Eval(Parse(ccExpr_temp))));
);
ここで説明することがたくさんあるので、あなたが何について質問があるのか私に知らせてください。
再:Tabboxループの管理図ええ、もちろん、これは私が名前を洗ったデータテーブルです。
再:Tabboxループの管理図あなたが私たちがあなたのスクリプトで使用できるテーブルを投稿することができますか(必要に応じてそれをサニタイズ)?
私が最初に気付くのは「<< get kets」です。 それは「キーを取得する」ことになっていますか?もしそうなら、データテーブルではなく配列でそれを使用する必要があります。 GROUPINGのすべてのユニークな値のリストがほしいと思うだけです。 あなたはこれでそれをすることができます:
id = Associative Array(dt_final:GROUPING << Get Values) << Get Keys;
私のスクリプトにはもっとたくさんのものがありますが、テーブルを使わずにデバッグしようとはしません。