问题:我运行一个脚本从数据库加载数据。 我从数据表中删除所有公式。 我使用红色小三角菜单复制表脚本。 我将表脚本粘贴到脚本窗口中。 我运行脚本。 由表脚本生成的表具有不同的列分组,并将列放置在周围(请参见屏幕截图,显示原始表和表脚本并排创建的表的“列”面板。 另请参阅随附的文件以供参考)。

我最初怀疑这是由于表脚本没有保留列名称中的前导空格,但如下面的屏幕截图所示,前导空格确实是表脚本的一部分,只是在从表脚本。

有没有办法真正重新创建原始数据表,包括列名中的空格或者这通常是一个糟糕的脚本策略?
我通常会联系 jmp 支持来解决错误。 这篇文章应该是这种情况的一个很好的例子,所以请记住添加到此的链接。
(在我看来)重命名列绝对是一个好主意,而不是尝试管理某种奇怪的解决方法。 无论如何,这些空格最终可能会在以后引起问题。
@jthi谢谢。 我担心领先的空白是不好的做法。 此错误可以或可能添加到或报告的任何列表吗?
另外,我认为重写我的脚本以给出不同的列名称比实现您建议的解决方法更容易。 (当我实际上只是试图回复时,无意中将您的回复标记为解决方案。)一如既往,感谢您为教育其他 JMP 用户提供的宝贵意见和不懈努力。 这非常有帮助。
尽管我永远不会在列名中使用前导空格(我也会避免大多数特殊字符),但在这种情况下我会说它应该有效,因为它似乎是 JMP 中的有效列名。我想说这是新专栏的一个错误。
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(1),
New Column("A", Numeric, "Continuous", Format("Best", 12), Set Values([1])),
New Column(" A", Numeric, "Continuous", Format("Best", 12), Set Values([2]))
);
wait(1);
Column(dt, 2) << Set Name(" A");
wait(1);
dt << New Column(" A");
我想到的唯一“快速”解决方法是添加 << Set Name to New Table 脚本,但我不确定这是否会在分组完成之前触发
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(1),
New Column("A", Numeric, "Continuous", Format("Best", 12), Set Values([1])),
New Column(" A", Numeric, "Continuous", Format("Best", 12), Set Values([2]), << Set Name(" A"))
);
因此,您首先必须将脚本获取到剪贴板,然后将其作为文本获取并在运行之前对其进行修改。
这是一个非常简单的示例,适用于以下示例:
Names Default To Here(1);
str = JSL Quote(dt = New Table("Untitled",
Add Rows(1),
New Column("A", Numeric, "Continuous", Format("Best", 12), Set Values([1])),
New Column(" A", Numeric, "Continuous", Format("Best", 12), Set Values([2]))
));
new_lines = {};
For Each({line}, Words(str, "\!N"),
If(Starts With(Trim Whitespace(line), "New Column("),
// get column name
col_name = Regex(Trim Whitespace(line), "^New Column\(\!"(.+?)\!",\s", "\1");
// add set name
last_idx = Contains(line, ")", -1);
new_line = Left(line, last_idx - 1) || ", << Set Name(\!"" || col_name ||"\!")),";
Insert Into(new_lines, new_line);
,
Insert Into(new_lines, line);
);
);
old_dt = Eval(Parse(str));
new_dt = Eval(Parse(Concat Items(new_lines, "\!N")));