根据文本拆分列下午好。我正在尝试将一列拆分为三个新列,并将原始列中的一段字符串放入三个新列之一根据文本的上下文。我知道文本到列会根据某些分隔符解析出字符串,但是,这并不能完全让我到达我需要的地方。我需要一个函数来读取文本,检查某些关键字(年、月或日),然后将一段字符串(“年”、“月”或“日”之前的数值)放置在适当的列中。 我看到 word() 函数可以推断第一个单词或值,这将是一个开始,但随后该值仍然需要根据文本放置在三个潜在列之一中。 有人对如何编写此代码有想法吗?或者潜在解决方法的想法?任何见解都将受到高度赞赏。
随附示例,其中第 1 列显示当前格式的数据,第 2-4 列是理想状态。谢谢你!
斯蒂芬妮
质量和工艺工程回复:根据文本拆分列我不知道你在问什么。我的示例有一个数据表,然后根据该数据表在原始数据表中提供 3 个新列。这不是你所要求的吗?如果您只想将新列直接创建到现有数据表中,那么 JSL 将为
Names Default to Here( 1 );
dt = Current Data Table();
// or dt = Data Table("your data table's name");
dt << New Column( "AgeYears" );
dt << New Column( "AgeMonths" );
dt << New Column( "AgeDays" );
For( i = 1, i <= N Rows( dt ), i++,
Match( Word( 2, :Age[i], "- " ),
"day",
:AgeDays[i] =
Num( Word( 1, :age[i], "- " ) ),
"month",
:AgeMonths[i] =
Num( Word( 1, :age[i], "- " ) ),
"year",
:AgeYears[i] =
Num( Word( 1, :age[i], "- " ) )
)
);
看来你需要读点书了。如果您是 JMP 新手,您需要阅读发现 JMP 和使用 JMP 文档。要成为一名 JSL 脚本编写者,确实需要了解 JMP 中的可用功能。另外,阅读完这两个文档后,您还需要阅读脚本指南。
回复:根据文本拆分列接得好@蒂埃里_S 。谢谢 !
回复:根据文本拆分列这太棒了,谢谢@tx尼尔森!这段代码将大大减少我清理数据所需的时间,我非常感谢您的回复。 快速问题:有没有一种方法可以将新变量直接嵌入到现有的 dt 中,而不是创建一个新变量然后合并回原始 dt?
斯蒂芬妮
回复:根据文本拆分列你好,
我认为脚本末尾有一个小错字:在最后一个 Match 情况下,接收列应该是 :AgeYears[i],而不是 :AgeMonths[i]。
最好的,
TS回复:根据文本拆分列这是处理这个问题的一种方法
Names Default To Here( 1 );
dt = New Table( "Example dt",
Add Rows( 10 ),
Set Header Height( 46 ),
New Column( "Age",
Character,
"Nominal",
Set Selected,
Set Values(
{"2-day old", "43-day old", "3-day old",
"3-month old", "4-month old", "5-day old",
"32-day old", "13-year old", "10-year old",
"10-month old"}
)
)
);
dt << New Column( "AgeYears" );
dt << New Column( "AgeMonths" );
dt << New Column( "AgeDays" );
For( i = 1, i <= N Rows( dt ), i++,
Match( Word( 2, :Age[i], "- " ),
"day",
:AgeDays[i] =
Num( Word( 1, :age[i], "- " ) ),
"month",
:AgeMonths[i] =
Num( Word( 1, :age[i], "- " ) ),
"year",
:AgeYears[i] =
Num( Word( 1, :age[i], "- " ) )
)
);
以上已按所述更正。