如何用非结构化字符串拆分列嗨,专家
我喜欢将非结构化字符串的列拆分成多列。但是由于太复杂,我没能做到。
我的想法是通过换行符来分割,但不能通过分隔符将其从文本拆分为列。另一种方法是用分隔符中可用的任何信号替换换行符。一个选项是运行正则表达式(:Column 1,“^ \ R”,“#”,GLOBALREPLACE),但它会显示意外结果。

数据探索与可视化回复:如何使用非结构化字符串拆分列回复:如何使用非结构化字符串拆分列您可以通过替换然后替换双换行符(或 JMP 的 \!N)来获得此信息(我使用了 ¤
Names Default To Here(1);
dt = Open("$DOWNLOADS/example3.jmp");
dt << New Column("Col2", Character, Nominal, Formula(
Substitute(:Column 1, "\!N\!N", "¤")
));

然后需要一个(或几个)额外步骤来获取列名称
回复:如何使用非结构化字符串拆分列我有一个类似的想法:使用替代并搜索 2x 换行符。
为了正确获取列名,可以使用“:”作为分隔符,但是:
- “:” 也用于条目内
— 样本有一个“:”— 但之后缺少换行符。
因此我结合了这两种方法:
- 搜索 2x 换行符
- 搜索 ”:”
找到标题。
为了分隔列名和条目,可以使用Contiguous设置堆叠列。
Col2 只是暂时使用,因此可以在最后删除它 - 或者将其添加为转换列。
通过转换列中的文本到列生成的列是表中的第一列。
这样可以很容易地选择和堆叠它们。只需计算新列的数量并按索引选择它们即可。
使用连续设置,会添加一些虚拟列,这些列会在最后一步被删除。

dt = Open( "$DOWNLOADS/example3.jmp" );
tmpCol = dt << Transform Column ( "split",
Character,
Formula(
Substitute(
Regex(
Substitute( :Column 1, "\!r\!n", "#", "Sample:", "Sample^\!n" ),
"#{2,}(.*?):",
"^\1^",
GLOBALREPLACE
),
"#", "\!r"
)
)
);
before = NItems(dt << get column names());
dt << Text to Columns(
columns (tmpCol),
Delimiters( "^" )
);
newCols = NItems(dt << get column names()) - before;
result = dt << Stack(
columns(
Eval(1::newCols)
),
Number of Series( Eval(newCols/2) ),
Contiguous,
Drop All Other Columns( 1 )
);
// Move column names up
result << Move up;
cols= result << get column names();
cols = Filter each({col}, cols, Contains(col << get name, "split"))
result << Delete Columns(cols);看上去不太美观也不流畅...
B计划:设置一台图灵机来计算条目;)
回复:如何使用非结构化字符串拆分列感谢@jthi !对于“创建新公式列”,返回对新创建的列的引用:
自 JMP18 起,新公式列返回新生成的列的列表
文本到列也可以返回包含对生成的列的引用的列表:
这是愿望: 将由文本创建的列列表保存到列
请注意:
使用关联数组和删除操作的解决方法在这里不起作用 - 它通过排序然后按“字母顺序”对列进行打乱,即 10 <2 - 这会破坏堆栈操作。
回复:如何使用非结构化字符串拆分列这是一个非常棒的想法。
回复:如何使用非结构化字符串拆分列如果您喜欢正则表达式,但仍然发现 JSL 大多难以理解,您可以重新编码该列,然后执行字符串替换(参见红色三角形,“替换字符串...”)并使用正则表达式替换为奇怪的字符(“%”是我经常使用的),然后根据该字符拆分列(列 -> 文本到列)。
然后,您可以通过将 alt-ctrl-shift-r 绑定到“重新编码”并将 alt-ctrl-shift-s 绑定到“文本到列”,看起来像 JMP 超级英雄,只需按几个键即可完成所有操作。
回复:如何使用非结构化字符串拆分列@BHarris谢谢你的建议。顺便问一下,我该如何用正则表达式替换掉换行符,使其变成奇怪的字符?

回复:如何使用非结构化字符串拆分列在正则表达式中,换行符是“\n”。因此,搜索“\n”(无引号),然后单击“使用正则表达式”,然后将其替换为“%”。