日付こんにちは、みんな、
次のようなデータベースがあります(これはここに要約されています)。

このデータベースは、これまでのところうまく機能しているスクリプトからのものですが、最後の列では、他の列とは異なる最後の期間を計算できます。
この最後の列の値は、オブジェクトに対応する OP を表します。
たとえば、1 行目の場合、値 60 はオブジェクト 2041 に対応し、各行に期間 2041 = 終了日 2041 - 開始日 2041 などを許可する式が必要になります。
値が 0 の場合、値 0 を期間 2041 に割り当てることができます。
等々..
以下のスクリプトから始めました。
Names Default To Here(1);
dt = current data table();
If( !Is Missing(:"valeur ST1-2"n),
For Each Row(
idx = dt[row(), :"valeur ST1-2"n]
dt[idx, durée[idx]] = dt[idx, date fin[idx]] - dt[idx, date début[idx]];
),
0
);
データアクセスRe: 日付これは、あなたが望むことを達成するために使用するスクリプトです。
Names Default To Here( 1 );
dt = Current Data Table();
// Set the display format to a JMP Duration format
:"valeur ST1-2"n << format("hr:m:s");
// Loop through the rows and assign the new values
For Each Row(
If( :"valeur ST1-2"n != 0,
:"valeur ST1-2"n = :Date fin 2041 -
:Date début 2041,
:"valeur ST1-2"n = 0
)
);Re: 日付- 値 60 が 2041 に対応し、値 82 が 2000 に対応することはどのようにしてわかるのでしょうか?また、valeur ST1-2 値が 68 の場合はどうなるのでしょうか?
- 提供されたサンプル データ テーブルには、2000 年の日付の列がありません。
- どの列を使用するかを決定するためのルールが識別できる場合、または値 ST1-2 のリストがさまざまな値に使用する列。
Re: 日付ここではデータベースが縮小されていますが、ST1-2 値列の各値について、列によって OP 値と各オブジェクト間のリンクを作成できます (縮小されたデータベースでは、これらは列 711-2041-9916 です)。
1 行目で次のようになっているため、値 60 は 2041 に対応します。

それでは各行について… 2000 に対応する 82 の場合、これはもう 1 つの例にすぎませんが、これは 2 行目の列 2000 が値 82 で埋められることを意味します。
Re: 日付お返事ありがとうございます !
これは 1 行目では機能しますが、「ST1-2 値」列の値が変化するため、その後は再計算する必要があるのと同じ期間ではなくなります。
たとえば、3 行目の場合: ST1-2 値 = 82 で、82 はオブジェクト 2000 に対応するため、3 行目の期間 2000 = 終了日 2000 - 開始日 2000 にする必要があります。
これは、各オブジェクト (対応する OP 内の列 711-2041-9916) への OP の割り当ての概要を中間データベースに含めることを目的としています。
目的は期間列を置き換えることです。「ST1-2 値」列は変更されません。
私のスクリプトは正しく動作しません:
Names Default To Here(1);
dt14 = current data table();
dur_cols = Filter Each( {col_name}, dt14 << Get Column Names( "String", Continuous ),
Starts With( col_name, "Durée" )
);
fin_cols = Filter Each( {col_name}, dt14 << Get Column Names( "String", Continuous ),
Starts With( col_name, "Date fin" )
);
debut_cols = Filter Each( {col_name}, dt14 << Get Column Names( "String", Continuous ),
Starts With( col_name, "Date d" )
);
// for indexing later
num_colnr = Transform Each( {col_name}, dur_cols, Word( -1, col_name ) );
// Loop through the rows and assign the new values
For Each Row(
If( :"valeurs ST1-2"n != 0,
colidx = Loc(dt14[row(), num_colnr ] == :"valeurs ST1-2"n);
If( N items (colidx) > 0,
dt14[colidx,dur_cols] = Eval(dt14[colidx,fin_cols] - dt14[colidx,debut_cols]);
,
continue()
);
,
continue()
);
//show(colidx);
);
Re: 日付以下のスクリプトはあなたが望むもの、または少なくともそれに近いものを得ることができると思います
Names Default To Here( 1 );
dt14 = Current Data Table();
Lookup = Filter Each( {col_name}, dt14 << Get Column Names( "String", Continuous ),
Num( col_name ) > 0
);
dtArray = dt14 << Stack(
invisible,
columns( Lookup ),
Source Label Column( "theKeys" ),
Stacked Data Column( "valeur ST1-2" ),
Drop All Other Columns( 1 ),
Output Table( "Untitled 45.jmp" )
);
dtArray << delete rows( dtArray << get rows where( Is Missing( :"valeur ST1-2"n ) ) );
theLookup = Associative Array(
dtArray:"valeur ST1-2"n << get values,
dtArray:theKeys << get values
);
Close( dtArray, nosave );
// Loop through the rows and assign the new values
For Each Row(
row = Row();
If( :"valeur ST1-2"n != 0,
lookup = theLookup[:"valeur ST1-2"n];
If( :"valeur ST1-2"n == As Column( lookup ),
As Column( "Durée " || theLookup[:"valeur ST1-2"n] ) =
Num(
As Column( "Date fin " || theLookup[:"valeur ST1-2"n] )
-As Column( "Date début " || theLookup[:"valeur ST1-2"n] )
);
Continue();
);
,
Continue()
);
);Re: 日付お返事ありがとうございます !
最初の 2 行は正常に動作しているように見えますが、ST1-2 の値が変更されるとエラーが発生します。
4 行目では、期間 2231 がゼロである一方、終了日 2231 - 開始日 2231 の差が存在するはずであることがわかります (4 行目では ST1-2 値の値が 82 であり、82 がオブジェクト 2231 に対応しているため)。

表示されるエラーメッセージは次のとおりです。

オブジェクトは異なる OP に割り当てられる可能性があるため、テーブル「TheLookup」に矛盾がある可能性があります。
以下の例: 「theKeys」 = 2041 の場合、値「ST1-2 値」が「60」および「47」に等しいことがわかります。

Re: 日付キーを決定するには、2041、711、2231 という名前の列をすべてまとめて連想配列を作成します。列値 ST1-2 で番号 60 が見つかると、連想配列内で検索が行われ、2241 が返されます。 47 が入力された場合は、2241 も返されます。82 が見つかった場合は、2231 が返されます。私は、2041、711、2231 などと呼ばれる列にある数字には、valeur ST1 ~ 2 で見つかる可能性のあるさまざまな数字が含まれていると仮定しました。
使用しているサンプル データ テーブルを添付していただければ、発生している問題を解決してみます。