名前の正しい形式を見つける jslこんにちは!
次のような jsl スクリプトを作成しました。
For Each Row(
dt_fichier3,
// Lire la valeur de la colonne "Process" et les offsets
process_value = :Process;
first_offset = :first_OFFSET;
second_offset = :second_OFFSET;
third_offset = :third_OFFSET;
// Vérifier et assigner les valeurs des offsets si elles ne sont pas vides ou "."
If(
(Char(first_offset) != "." & Char(first_offset) != "") | (Char(second_offset) != "." &
Char(second_offset) != "") | (Char(third_offset) != "." & Char(third_offset) != ""),
// Créer une nouvelle colonne dans le fichier1 si elle n'existe pas encore
new_column_name = process_value || "_offset";
dt_fichier1 << New Column(new_column_name, Numeric, Continuous);
// Définir la formule pour la nouvelle colonne
Column(dt_fichier1, new_column_name) << Set Formula(
Eval(
Eval Expr(
If(:Supplier == "FIRST",
:Expr(process_value) + Expr(:first_OFFSET),
If(:Supplier == "SECOND",
:Expr(:Process) + Expr(:second_OFFSET),
If(
:Supplier == "THIRD",
:Expr(:Process) + Expr(:third_OFFSET),
,
:Expr(:Process) // Valeur par défaut si aucun fournisseur ne correspond
)
)
)
)
)
);
);
);
編集 (2024-08-08 jthi): jsl フォーマットを追加しました
問題は、列名が列情報->数式に「Column_name」として表示されるため、数式が機能しないことです。または、「Column-name」である必要があります。Name() 関数を使用しようとしましたが、機能しませんでした。:(
自動化とスクリプトデータアクセスデータの探索と視覚化Re: 名前 jsl の正しい形式を見つける式評価を使用して数式を構築するEval Insert、Eval Expr、Parse、および Substitute を使用して、ある式を別の式に挿入します。これは通常、私が好む方法です(または Eval(Substitute()) と NameExpr(AsColumn())
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
col1 = "height";
col2 = "weight";
new_col = Eval(EvalExpr(dt << New Column("mycol", Numeric, Continuous, Formula(
Expr(NameExpr(AsColumn(dt, col1))) * Expr(NameExpr(AsColumn(dt, col2)))
))));
new_col << get formula;Re: 名前 jsl の正しい形式を見つける右、
しかし、たとえばスクリプトをコンパイルした後、1 つの列を取得してその数式がどのようになっているかを確認すると、次のようになります。
If( :サプライヤー == "FIRST",
「列名」+ 4,
If( :サプライヤー == "SECOND",
「列名」+ 5,
If( :サプライヤー == "THIRD",
「列名」+ (-10)、
「列名」
)
)
)
これは動作しません。動作するためには次のようになる必要があるためです。
If( :サプライヤー == "FIRST",
"列名"n + 4,
If( :サプライヤー == "SECOND",
"列名"n + 5,
If( :サプライヤー == "THIRD",
"列名"n + (-10)、
"列名"n
)
)
)
ではスクリプトをどのように修正すればよいでしょうか? ありがとうございます:)
Re: 名前 jsl の正しい形式を見つける列に : がありません。元のスクリプトでは、少なくともこれらの :Expr(:Process) を変更する必要があります。また、process_value = :Process などの参照の代わりに列名を使用することをお勧めします (process_value = "Process" を使用することをお勧めします)。
Re: 名前 jsl の正しい形式を見つける分かりません、
process_value = "Process" を使用すると、文字列になり、列名は取得されません。
さらに、これらの:Expr(:Process)で何を変更する必要がありますか?
Re: 名前 jsl の正しい形式を見つける以前の返信では、それらの (文字列) を数式内の列に戻す 1 つの手法を示しました。
Re: 名前 jsl の正しい形式を見つけるああ... For Each Rowループを使用しているので、その場所では:Processを使用するのが正しいです。列から取得した値を列に戻すためにも同じ方法が適用されます。
Re: 名前 jsl の正しい形式を見つける私のスクリプトに適用できますか、わかりません
Re: 名前 jsl の正しい形式を見つけるデータ テーブルを提供していただければ、より良い例を提供できます。
Re: 名前 jsl の正しい形式を見つけるこれがデータです
Re: 名前 jsl の正しい形式を見つけるこれはあなたが探している機能だと思います。Eval(Substitute()) を使用したのは、コードから直接実行内容を読み取る方が少し簡単だからです。また、評価と式の構築を分離したので、どのように見えるかを確認したい場合は印刷できます。現在のデータ テーブルとして正しいテーブルがある限り、現在の行を特定の値に設定することで For Each ループをデバッグすることもできます。
Names Default To Here(1);
dt1 = Open("$DOWNLOADS/DATAtable1.jmp");
dt2 = Open("$DOWNLOADS/DATAtable2.jmp");
//Row() = 2;
For Each Row(
dt2,
process_value = :Process;
first_offset = :first_OFFSET;
second_offset = :second_OFFSET;
third_offset = :third_OFFSET;
If(
(Char(first_offset) != "." & Char(first_offset) != "") | (Char(second_offset) != "." &
Char(second_offset) != "") | (Char(third_offset) != "." & Char(third_offset) != ""),
new_column_name = process_value || "_offset";
col_expr = Substitute(
Expr(dt1 << New Column(new_column_name, Numeric, Continuous, Formula(
If(:Supplier == "FIRST",
_processval_ + _firstoffset_
, :Supplier == "SECOND",
_processval_ + _secondtoffset_
, :Supplier == "THIRD",
_processval_ + _thirdoffset_
, // else
_processval_
)
))),
Expr(_processval_), Name Expr(AsColumn(dt1, process_value)),
Expr(_firstoffset_), first_offset,
Expr(_secondtoffset_), second_offset,
Expr(_thirdoffset_), third_offset
);
//show(col_expr);
new_col = Eval(col_expr);
);
);
