查找名称 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() 函数,但它不起作用:(
自动化和脚本数据访问数据探索与可视化回复:查找名称 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;回复:查找名称 jsl 的正确格式正确的,
但是例如在脚本编译之后,如果我取一列来查看它的公式是什么样的,我会得到这样的结果:
如果(:供应商 == “第一”,
“列名称” + 4,
如果(:供应商 == “第二”,
“列名称” + 5,
如果(:供应商 == “第三”,
“列名称” + (-10),
“列名称”
)
)
)
但是它不起作用,因为它应该是这样的:
如果(:供应商 == “第一”,
“列名称”n + 4,
如果(:供应商 == “第二”,
“列名称”n + 5,
如果(:供应商 == “第三”,
"列名称"n + (-10),
“列名称”n
)
)
)
那么我该如何修改我的脚本?谢谢:)
回复:查找名称 jsl 的正确格式您的列中缺少 :,在原始脚本中,您至少需要修改这些 :Expr(:Process)。我还建议使用列名而不是引用,例如 process_value = :Process(我更喜欢使用 process_value = "Process")。
回复:查找名称 jsl 的正确格式我不明白你的意思,
如果我使用process_value = "Process" 那么它将变成一个字符串并且不会采用列名。
此外,我需要在这些:Expr(:Process)中改变什么?
回复:查找名称 jsl 的正确格式我在之前的回复中确实展示了一种将这些(字符串)转换回公式内的列的技术。
回复:查找名称 jsl 的正确格式啊……使用 :Process 在那个位置是正确的,因为你正在使用 For Each Row 循环。仍然使用相同的方法将从列中获得的值转换回列
回复:查找名称 jsl 的正确格式你能把它应用到我的脚本中吗,我不明白
回复:查找名称 jsl 的正确格式如果您可以提供您的数据表,我可以提供更好的示例。
回复:查找名称 jsl 的正确格式以下是数据
回复:查找名称 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);
);
);
