大家好,我想問這個資料集
| ID | A欄 | B欄 | C欄
| D 欄 |
| 1 | A*05:01 A*25:01 B*08:01 B*39:01 C*05:01 C*07:06 C*07:18 C*12:03 DRB1*05:01 DRB1*07:01 DRB3*01:01 DRB4*09:03N DQA1*02:01 DQA1*05:01 DQB1*02:01 DQB1*02:02 | DQA1*01-03,DQB1*06-03_DQ6 | | |
| 2 | A*20:01 A*60:02 B*08:01 B*28:03 C*02:02 C*03:04 DRB1*01:02 DRB1*13:04 DRB3*02:02 DRB3*02:02 DQA1*01:01 DQA1*01:04 DQA1*01:05 DQA1*05:05 DQA1*05:09 DQB1*02:01 DQB1*05:01 | DQA1*05-01,DQB1*02-01_DQ2 | | |
| 3 | A*01:01 A*01:01 B*08:01 B*38:01 C*06:02 C*09:01 C*07:06 C*07:18 DRB1*07:01 DRB1*07:01 DRB4*01:01 DRB4*01:03 DRB4*01:05N DQA1*02:01 DQA1*02:01 DQB1*02:02 DQB1*03:03 | DQA1*03-03,DQB1*04-01_DQ4 | | |
| 4.... | A*01:01 A*01:01 B*08:01 B*38:01 C*06:02 C*09:01 C*07:06 C*07:18 DRB1*07:01 DRB1*07:01 DRB4*01:01 DRB4*01:03 DRB4*01:05N DQA1*02:01 DQA1*03:03 DQB1*02:02 DQB1*03:03 | DQA1*03-03 ,DQB1*04-01_DQ4 | DQA1*02:01 DQA1*03:03 DQB1*02:02 DQB1*03:03 | DQA1*03:03 |
Q1: 我該怎麼辦?我只想將 A 列中的文字 DQA1... 和 DQB1... 提取到 C 列。
Q2: 我該怎麼辦?我想將同一行中的 B 列和 C 列中的提取文字匹配到 D 列
我嘗試使用 regex 命令 - 但問題出現在 * 和 : 上,而且我不知道如何將部分文字與多個 ID 中的兩列相匹配...
我把我想要的東西放入ID 4.中,在這種情況下:和-是相同的。
提前謝謝你的幫忙!
對於 D 列,您可以在公式中使用 Words()、Substitute() 和 Associative Array() + Intersect 來尋找精確匹配
aa1 = Associative Array(Words(:Column B, ","));
aa2 = Associative Array(Words(Substitute(:Column C, ":", "-"), " \!N"));
aa1 << Intersect(aa2);
Concat Items(aa1 << Get Keys, ",");
對於 C 列,您可以從正規表示式中獲得好主意:無法取得匹配的字串的所有部分
編輯:
以下是 C 列的一種可能可行的選項。如果您不明白它的作用,我建議使用 While 循環和 Regex,因為這通常比 JMP 的模式匹配更容易理解。
result = {};
Pat Match(
:Column A,
Pat Repeat(
(Pat Regex("(DQ[AB]1.+)[\s$]") >> result)
|
Pat Len(1)
)
);
Concat Items(Words(result, " "), ", ");

打開表格,查看新增到 C 列和 D 列的公式(這兩個欄位都有公式)。

如果您不確定如何在 JMP 中建立公式,請查看 JMP 說明頁面:https://www.jmp.com/support/help/en/17.2/#page/jmp/create-formulas-in-jmp.shtml#