你好,
我有一張像
| ID | 第 2 列 |
| ABC001235G | |
| ABC001234 | |
| ABC001235 | |
| ABC001234D | |
| ABC001234F | |
我想重新編碼 ID 列,以便我所有的值,如 'ABC001234D' 和 'ABC001234F' 變成 'ABC001234' - 基本上我想刪除語句中的最後一個字母。 但是,我無法通過手動過程來做到這一點。 有太多行要做,我不可能為腳本中可能使用的每個 ID 手動編寫它。 尋找一種通過腳本來做到這一點的方法。 謝謝!
嗨,薩內爾!
這是一個可能對您有所幫助的公式,但您必須對 ID 變量的命名約定和準確性做出一些假設。
如果您的 ID 值始終以 3 個字符開頭,您可以創建一個新列並使用以下公式:
Substr(:ID, 1, 3) ||正則表達式(:ID,“\d+”)
此公式將允許數值的長度不一致。調整公式以在 ID 值的開頭具有不一致的字符數也不是太難。但是,如果有人將 ID 錯誤地輸入為 0(數字)而不是 O(字母),或者任何其他特定的印刷錯誤,您可能會得到意想不到的結果。
祝你好運,
凱文
您可以使用以下公式執行此操作:
val = Reverse( :ID );
While( Is Missing( Num( Substr( val, 1, 1 ) ) ),
val = Substr( val, 2 )
);
Reverse( val );
這將刪除所有尾隨的非數字值
為此,我會使用正則表達式。 我曾經喜歡這個,至少在某種程度上開始使用正則表達式:正則基因也退房JMP 字符函數 - 正則表達式和來自腳本索引的正則表達式。
這是一個示例,其中包含在 JMP 中使用 Regex 刪除結束字符的兩種可能方法(它們也可以輕鬆修改以支持非大寫字母):
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 個或多個大寫字符,後跟任意數量的數字(因此它將忽略數字後面的任何內容)。
第二個將匹配字符串末尾的零個或多個大寫字符,並將它們替換為空字符串。