你好,
我有一張像這樣的桌子
| ID | 第2欄 |
| ABC001235G | |
| ABC001234 | |
| ABC001235 | |
| ABC001234D | |
| ABC001234F | |
我想重新編碼 ID 列,以便我的所有值(例如“ABC001234D”和“ABC001234F”)變成“ABC001234” - 基本上我想刪除語句中的最後一個字母。 但是,我無法通過手動過程來做到這一點。 有太多行要做,我不可能為腳本中可能使用的每個 ID 手動編寫它。 尋找一種通過腳本來做到這一點的方法。 謝謝!
為此,我會使用正則表達式。 我曾經喜歡這樣至少在某種程度上使用正則表達式:正則酮還查看JMP 字符函數 - 正則表達式和來自腳本索引的正則表達式。
下面是一個示例,其中提供了兩種使用 JMP 中的正則表達式刪除結束字符的可能方法(可以輕鬆修改它們以支持非大寫字母):
Names Default To Here(1);
dt = New Table("Untitled 3",
Add Rows(5),
Compress File When Saved(1),
New Column("ID",
Character,
"Nominal",
Set Values(
{"ABC001235G", "ABC001234", "ABC001235", "ABC001234D", "ABC001234F"}
)
)
);
dt << New Column("Regex1", Character, Nominal, Formula(Regex(:ID, "^[A-Z]+(\d+)")));
dt << New Column("Regex2", Character, Nominal, Formula(Regex(:ID, "[A-Z]*$", "", GLOBALREPLACE);));
根據用例選擇一個(可以使用示例代碼輕鬆測試它們如何處理不同的字符串):
第一個將匹配字符串開頭的 1 個或多個大寫字符,後跟任意數量的數字(因此它將忽略數字後面的任何內容)。
第二個將匹配字符串末尾的零個或多個大寫字符,並將它們替換為空字符串。
您可以使用以下公式來完成此操作:
val = Reverse( :ID );
While( Is Missing( Num( Substr( val, 1, 1 ) ) ),
val = Substr( val, 2 )
);
Reverse( val );
這將刪除所有尾隨的非數字值
嗨,薩尼爾!
下面的公式可能會對您有所幫助,但您必須對 ID 變量的命名約定和準確性做出一些假設。
如果您的 ID 值始終以 3 個字符開頭,您可以創建一個新列並使用以下公式:
Substr(:ID, 1, 3) ||正則表達式( :ID, "\d+" )
此公式將允許數值長度不一致。對於 ID 值開頭字符數不一致的情況,調整公式也不是太難。但是,如果有人將 ID 錯誤地輸入為 0(數字)而不是 O(字母),或者任何其他某些印刷錯誤,您可能會得到意想不到的結果。
祝你好運,
凱文