Comment faire correspondre une partie de texte en 2 colonnes ?Salut à tous, j'aimerais poser des questions sur cet ensemble de données
| IDENTIFIANT | Colonne A | Colonne B | Colonne C
| Colonne 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 : Comment puis-je faire ? Je souhaite extraire le texte uniquement DQA1... et DQB1... de la colonne A dans la colonne C.
Q2 : Comment puis-je faire ? Je souhaite faire correspondre le texte extrait de la colonne B et de la colonne C de la même ligne dans la colonne D.
J'essaie d'utiliser la commande regex - mais le problème se produit avec * et :, et je n'ai aucune idée de comment faire correspondre une partie du texte avec deux colonnes dans plusieurs ID...
Je mets ce que je veux dans l'ID 4., dans ce cas : et - sont identiques.
Merci d'avance pour votre aide!
Analyse et modélisation des données de basemacOSRe : Comment faire correspondre une partie de texte en 2 colonnes ?Merci pour votre aide! c'est du travail maintenant.
Re: Comment faire correspondre une partie de texte dans 2 colonnes ?Ouvrez le tableau et vérifiez les formules ajoutées aux colonnes C et D (elles contiennent toutes les deux des formules).

Si vous ne savez pas comment créer des formules dans JMP, consultez la page d'aide de JMP : https://www.jmp.com/support/help/en/17.2/#page/jmp/create-formulas-in-jmp.shtml#
Re : Comment faire correspondre une partie de texte en 2 colonnes ?Bonjour Jarmo, Merci encore pour votre aide. Mais même si j'utilise votre ensemble de données 735102.jmp et que je copie/colle la commande, cela ne fonctionne pas. Pourriez-vous s'il vous plaît me fournir le script sur le fichier 735102.jmp ?
Merci!
Re : Comment faire correspondre une partie de texte en 2 colonnes ?Avez-vous copié-collé la formule directement ? Comme je n'ai pas votre tableau de données, il peut y avoir des différences dans les séparateurs utilisés (voir le fichier ci-joint).
Re : Comment faire correspondre une partie de texte en 2 colonnes ?Merci pour vos conseils, mais sur la génération de la colonne C, l'erreur s'est produite comme
tentative d'attribution à un objet qui n'est pas une valeur L lors de l'accès ou de l'évaluation de 'Assign', Current Data Table() << result = /*###*/{} /*###*/" et
Doit être une chaîne ou une matrice 1x2 lors de l'accès ou de l'évaluation de 'Words', Bad Argument( result ), Words/*###*/(result, " ")
s'il vous plaît, guidez-moi davantage !
Merci
Re : Comment faire correspondre une partie de texte en 2 colonnes ?Pour la colonne D, vous pouvez utiliser Words(), Substitute() et Associative Array() + Intersect, dans une formule, pour trouver des correspondances exactes
aa1 = Associative Array(Words(:Column B, ","));
aa2 = Associative Array(Words(Substitute(:Column C, ":", "-"), " \!N"));
aa1 << Intersect(aa2);
Concat Items(aa1 << Get Keys, ",");
Pour la colonne C, vous pouvez obtenir de bonnes idées à partir de Regex : impossible d'obtenir toutes les parties de la chaîne qui correspondent
Modifier:
Voici une option pour la colonne C qui pourrait fonctionner. Si vous ne comprenez pas ce qu'il fait, je suggère d'utiliser la boucle While et l'expression régulière, car elles sont généralement plus faciles à comprendre que la correspondance de modèles de JMP.
result = {};
Pat Match(
:Column A,
Pat Repeat(
(Pat Regex("(DQ[AB]1.+)[\s$]") >> result)
|
Pat Len(1)
)
);
Concat Items(Words(result, " "), ", ");
