从列标题中提取字符串并添加到另一个列标题中你好,
我有一个导入脚本,用于将结果从 excel 导入 JMP。许多人都在使用模板 excel,并且已锁定编辑。excel 中有两个结果列,都称为“结果 - XXX”,其中 XXX 使用 excel 宏替换为正在研究的内容,因此每个文件中都会发生变化。我们还有称为 JMP 结果 1 和 JMP 结果 2 的列,它们等于结果列,并且采用数字格式。我们将其用作 JMP 导入,无法从 excel 导入科学数字。当我在 JMP 中打开 excel 时,我得到了类似下图的内容:

我正在尝试编写一个脚本,从列标题中提取“结果 - ”后面的单词并替换 JMP 结果列标题,但确保它替换了正确的标题。因此结果将是:

不确定在 JMP 中这是否可行,但任何帮助都将不胜感激。甚至不确定如何从提取列标题字符串的结尾开始,更不用说后面的步骤了。提前致谢。
自动化和脚本回复:从列标题中提取字符串并添加到另一个列标题中这是纯 JSL 选项。它可能(并且将会)相当容易地根据你的数据而中断,因为我必须做出相当多的假设
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(1),
Compress File When Saved(1),
New Column("Results - DNA", Numeric, "Continuous", Format("Best", 12), Set Values([.]), ),
New Column("Results - Protein", Numeric, "Continuous", Format("Best", 12), Set Values([.])),
New Column("JMP Result 1", Numeric, "Continuous", Format("Best", 12), Set Values([.])),
New Column("JMP Result 2", Numeric, "Continuous", Format("Best", 12), Set Values([.]))
);
// Assume that you extract last word from result columns
// and results are first then jmp columns and there is equal amount
result_columns = {};
jmp_columns = {};
colnames = dt << Get Column Names("String");
For Each({colname}, colnames,
If(Starts With(colname, "Results - "),
Insert into(result_columns, Word(-1, colname, " "));
,
Insert Into(jmp_columns, colname)
)
);
For Each({{rescol, jmpcol}}, Across(result_columns, jmp_columns),
Column(dt, jmpcol) << Set Name(rescol);
);
Write();回复:从列标题中提取字符串并添加到另一个列标题中你好,
我附加了一个测试数据表。尝试一下这个脚本:
dt = current data table();
for each({name,i}, dt << get column names(string),
if (contains(name, "Results -"),
new_name_string = word(2, name, "- ");
column(dt,i) << set name(substitute(name, "Results -", "Results_Excel -" ));
for each({name2,p}, dt << get column names(string),
if (contains(name2, "JMP Result"),
column(dt,p) << set name(new_name_string);
Break();
,
);
);
,
);
);
这应该能满足您的要求。如果没有,请告诉我们。
编辑:刚刚看到 Jarmos 的出色解决方案。如果您不想更改“excel”列的名称,您可以选择这个。
干杯,
乔纳斯
回复:从列标题中提取字符串并添加到另一个列标题中我还想到了非脚本选项。
创建堆叠表

从标签创建最后一个单词列

现在你有了映射表

返回原始表格并重新编码列名称

使用应用映射表...


然后点击重新编码


遗憾的是,JMP 无法自动为此创建适当的脚本,因为它只会直接在脚本中使用映射值,所以这可能是手动过程,除非您能够以某种方式创建“完整映射表”以将其填写到脚本中
// Recode column names
Local({dt = Data Table("Untitled 2"), names},
names = Recode(
dt << Get Column Names(String),
{Map Value(
_rcOrig,
{"JMP Result 1", "DNA", "JMP Result 2", "Protein"},
Unmatched(_rcNow)
)}
);
For Each({name, i}, names, Column(dt, i) << Set Name(name));
);