根據文本拆分列下午好。我正在嘗試將一列拆分為三個新列,並將原始列中的一段字符串放入三個新列之一根據文本的上下文。我知道文本到列會根據某些分隔符解析出字符串,但是,這並不能完全讓我到達我需要的地方。我需要一個函數來讀取文本,檢查某些關鍵字(年、月或日),然後將一段字符串(“年”、“月”或“日”之前的數值)放置在適當的列中。 我看到 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], "- " ) )
)
);
以上已按所述更正。