Re: フォーミュルコロン1 つの質問: ENT4 には 2500 からの期間が含まれているのに、ENT2 には 1749 からの期間が含まれていないのはなぜですか?
Re: 列の式データベースにエラーが発生したため、データベースを更新しました。
ご指摘ありがとうございます。
Re: フォーミュルコロン数式を使用してこれを行うこともできますが、私ならスクリプトを使用してこれを行います。 以下は、少なくともサンプルデータで機能する一例です
Names Default To Here(1);
dt = Open("$DOWNLOADS/Test(1).jmp");
// get duration columns
dur_cols = Filter Each({col_name}, dt << Get Column Names("String", Continuous),
Starts With(col_name, "durée")
);
// for indexing later
num_colnr = Transform Each({col_name}, dur_cols, Output("Matrix"), Num(Word(-1, col_name)));
dt << New Column("DUREE TOT", Numeric, Continuous, << Set Each Value(
colidx = Loc(num_colnr > :T); // indices of num colums larger than :T value
If(N Items(colidx) > 0,
val = Sum(dt[Row(), dur_cols[colidx]]);
If(IsMissing(val),
0
,
val
);
,
0
)
));Re: 列の式お返事ありがとうございます。
コメントがあります。コードでは列 T の要素と比較しているように見えますが、T の値は任意の順序で指定できる (必ずしも増加する必要はない) ことを指定するのを忘れていました。操作の昇順に並べられています。
例えば :
T = 690 / オペ = 47
T = 550 / オペ = 55
そして、進行は操作の順序に従います。
2番目のコメントは、私のデータベースには、「h:m:s」形式の期間Tの期間形式の数値があります。
Re: フォーミュルコロン私が正しく理解していれば、私の解決策はまだ機能するはずです。 :1500、:1749、... 列が :duree 1500、:duree 1749、... 列と同じ順序であるという事実のみに依存します。 また、JMP が実際にはきれいに書式設定された期間値を表示したとしても (私はそう思います)、それらは依然として秒です (これは、たとえば列設定から書式を最適に変更することで確認できます)。
Re: 列の式コードに問題があると思います。
ここでの問題は、「colidx」変数の割り当てにあります。変数 T の数値を比較するのではなく、これらの数値に対応する演算 (ここでは黄色の列) を比較します。
上記の例の最初の行は次のようになります。
最初の行「:1500」>最初の行「:op」の場合 -> 継続時間 1500 を追加
if 最初の行 ":1749" > 最初の行 ":op" -> 期間を追加 1749最初の行「:2100」>最初の行「:op」の場合 -> 継続時間 2100 を追加
最初の行「:2500」>最初の行「:op」の場合 -> 継続時間 2500 を追加
これを行ごとに実行します...
Re: フォーミュルコロンだから変更してください
colidx = Loc(num_colnr > :T);
に
colidx = Loc(num_colnr > :"opé"n);
Loc (列名の代わりに特定の行を使用) と num_colnr (数字である必要はない) に対応する変更を加えます。
Re: 列の式
ご回答ありがとうございます。ご指摘の通り、すでに「colidx」の割り当てを変更しました。
しかし、どのような変更を加えるべきかわかりません。「そして、Loc (列名の代わりに特定の行名を使用) と num_colnr (数字は必要ありません) に対応する変更を加えてください。」
もっと詳しく教えてもらえますか?
Re: 列の式このコードで num_colnr の値を変更し、以下に必要な列を選択しました。
SNames = dt << Get Column Names(String, "Nominal");
For(i=1, i <= N Items(Snames), i++,
sclmn = 列(Snames[i]);
show(sclmn);
);
このコードにより、データベースの黄色の部分に対応するすべての列を取得できます。
ただし、「Loc」に対応する変更を加えることができないようです。
Re: フォーミュルコロンNames Default To Here(1);
dt = Open("$DOWNLOADS/Test (1).jmp");
// get duration columns
dur_cols = Filter Each({col_name}, dt << Get Column Names("String", Continuous),
Starts With(col_name, "durée")
);
// for indexing later
num_colnr = Transform Each({col_name}, dur_cols, Word(-1, col_name));
dt << New Column("DUREE TOT", Numeric, Continuous, << Set Each Value(
colidx = Loc(dt[Row(), num_colnr] > :"opé"n);
If(N Items(colidx) > 0,
val = Sum(dt[Row(), dur_cols[colidx]]);
If(IsMissing(val),
0
,
val
);
,
0
)
));
データテーブルの添字付け
Re: 列の式私のデータベースには 900 の異なる列 (黄色の列) があります。これは、数値「num_colnr」が多くの数値を含むリストであることを意味します。

共有していただいた JSL スクリプトを実行すると、次のようなエラーが発生します。

上図の num_colnr は数値のリストですが、
Re: 列の式そして、「Num」を追加して数値に変換します。
num_colnr = Transform Each({col_name}, dur_cols, Num(Word(-1, col_name)));
show(num_colnr);次のようなエラーが表示されます。

Re: フォーミュルコロンデータテーブルに「711」という名前の列はありますか? このエラーメッセージはフランス語なので理解できませんが、おそらくこれと同じものだと思います
Expecting a number or list of numbers at row 1 in access or evaluation of 'dt[ /*###*/Row(),num_colnr]', <BR />Bad Argument("1500"), dt[/*###*/Row(), num_colnr]
at line 14 in C:\Users\jarmo\Documents\Script.jsl
これは、「711」という名前の列が欠落していることを意味する可能性があります。
Re: 列の式
はい、これが私の最初のコラムです (黄色のコラムの中で):
Re: フォーミュルコロンOK、おそらく、これらの列の 1 つ (または複数) が欠落していることを示しており、実際にはどの列であるかはわかりません。 したがって、デュレ列からこれらを取得する方法の私のロジックは間違っている可能性があります
Re: 列の式はい、おそらくあなたの言う通りです、私は味方になります。
貴重なご助力をありがとうございました!
列の式こんにちは、みんな、
データベース内の複数の列に対して数式を構築したいと考えています。 理解するのは簡単ではありません。例を使用して目標を説明します。

灰色の部分:
ここでは、4 つの異なるタイプのオブジェクト (ENT1、...、ENT4) を示します。 各オブジェクトは進行状況番号 (列 T) に関連付けられており、これらの番号は明確に定義された操作にリンクされています。
黄色の部分:
これらのセルは、各オブジェクトがどの「番号」を受けるかを示し、この番号を操作に関連付けます。 セルが空の場合、オブジェクトはこの操作を受けないことを意味します。
目的は次のとおりです。
- オブジェクトが進行していることを認識して、継続時間を合計します (例: ENT2 オブジェクトは番号 1749 に位置するため、1500 年に以前に行われたことには興味がありません)。
- ENT2 オブジェクトを例に挙げます。持続時間 2100 と持続時間 2500 を追加する必要があります。これらは、このオブジェクトが経験しなければならない数値だからです。
ご協力いただきありがとうございます、
心から
自動化とスクリプト作成