Faire la différence entre une colonne entière et la ligne actuelleBonjour,
J'ai du mal à mettre en œuvre une formule simple "contient". Voici un exemple d'ensemble de données et de formule :

Voici le texte : Contient(:Colonne 1, :Colonne 2)
Le problème : je pense qu'il vérifie toujours la ligne actuelle de la colonne 1 (entière). Je veux qu'il vérifie toute la colonne, pas seulement la ligne actuelle. Vous pouvez voir que E et B sont dans la colonne 2, mais le résultat indique qu'il ne trouve pas la partie dans le tout.
Comment puis-je dire explicitement de vérifier la colonne entière et pas seulement la ligne actuelle de la colonne ?
Merci beaucoup!
Analyse et modélisation des données de baseRe : Faire la différence entre une colonne entière et la ligne actuelleVoici une façon de résoudre le problème
As Constant( colList = :Column 1 << get values );
Contains( colList, :Column 2 );
Re : Faire la différence entre une colonne entière et la ligne actuelleSalut @KevinBrunner ,
je pense que le moyen le plus évident de comparer des colonnes (plutôt que des lignes) dans JMP serait d'utiliser la jointure de table.
peut-être quelque chose comme ça
// New data table
// → Data Table( "Untitled" )
dt1 = New Table( "Untitled" );
dt1 << New Column("Column 1", Character, "Nominal", Set Values({"A", "B", "C", "D", "E"}));
// New data table
// → Data Table( "Untitled 2" )
dt2 = New Table( "Untitled 2" );
dt2 << New Column("Column 2", Character, "Nominal", Set Values({"A", "E", "F", "B", "H"}));
// Join data tables
// → Data Table( "Untitled 3" )
dt1 << Join(
With( dt2 ),
Match Flag( 1 ),
By Matching Columns( :Column 1 = :Column 2 ),
Drop multiples( 0, 0 ),
Include Nonmatches( 1, 1 ),
Preserve main table order( 1 )
);
cela peut également être fait en cliquant plutôt qu'en scriptant. comme sur l'image ci-dessous

Re : Faire la différence entre une colonne entière et la ligne actuellePeut-être que je peux clarifier un peu plus l'objectif.
Dans la colonne 3, je veux une fonction qui renvoie un 1 si la ligne actuelle de la colonne 2 est trouvée n'importe où dans la colonne 1. Ainsi, dans mon exemple, la colonne 3 devrait afficher 1, 1, 0, 1, 0. Parce que les E et B de ces lignes se trouvent dans la colonne 1.
Merci beaucoup!
Re : Faire la différence entre une colonne entière et la ligne actuelleJ'ai essayé ça. C'est beaucoup plus proche, mais ce n'est pas tout à fait ce que je recherche. Cela compte quelque chose de plus que ce que je recherche. Il est dit que B vaut 5 et E vaut 2. J'ai juste besoin de vrai ou faux, 1 ou 0.

Re : Faire la différence entre une colonne entière et la ligne actuelleAs Constant( colList = :Column 1 << get values );
Contains( colList, :Column 2 ) > 0;
Re : Faire la différence entre une colonne entière et la ligne actuelle
... suivant @txnelson Deuxième suggestion de :
https://community.jmp.com/t5/Discussions/Differentiate-between-entire-column-and-current-row/mp/675677/highlight/true#M86260
Alternativement :
Local( {t0 = :Column 1 << get values}, Contains( t0, :Column 2 ) > 0 )qui génère une variable locale :

qui est calculé une fois et utilisé pour chaque ligne.
Pire:
t0 = :Column 1 << get values;
Contains( t0, :Column 2 ) > 0;
Cette version sera obtenir le valeurs encore et encore pour chaque ligne.
Re : Faire la différence entre une colonne entière et la ligne actuelleMerci encore pour votre aide.
J'ai pu simplifier le code :
Contient(:Colonne 1 << Obtenir les valeurs, :Colonne 2) > 0;
Il fait exactement ce que je veux. Peut-être que cela vous aidera à l'avenir.
Acclamations.
Re : Faire la différence entre une colonne entière et la ligne actuelleVous pouvez également utiliser utiliser Comme constante() pour évaluer uniquement sur la première ligne
Names Default To Here(1);
row_count = 10000; // 100 000 starts getting slow
dt = New Table("test",
Add Rows(row_count),
New Column("Die X", Numeric, Nominal),
New Column("Die Y", Numeric, Nominal),<BR />invisible
);
dt << Begin Data Update;
For Each Row(dt,
:Die X = Random Integer(1, N Rows(dt));
:Die Y = Random Integer(1, N Rows(dt) * 2);
);
dt << End Data Update;
wait(0);
start = HP Time();
dt << New Column("Formula", Numeric, Nominal, Formula(
Contains(:Die X << Get Values, :Die Y) > 0;
));
dt << Run Formulas;
Show(HP Time() - start);
start = HP Time();
dt << New Column("Formula As Constant", Numeric, Nominal, Formula(
As Constant(x_m = :Die X << get values);
Contains(x_m, :Die Y) > 0;
));
dt << Run Formulas;
Show(HP Time() - start);
Re : Faire la différence entre une colonne entière et la ligne actuelleet qu'en est-il des mises à jour des tables ?
Si Jmp met à jour les entrées dans la col 1, les 3 variantes sont mises à jour - donc tout semble bien se passer...
Names Default To Here(1);
row_count = 10; // 100 000 starts getting slow
dt = New Table("test",
Add Rows(row_count),
New Column("col1", set each value(Random Integer(1, row_count))),
New Column("col2", set each value(Random Integer(1,row_count*2))));
wait(0);
New Column( "Formula", Formula( Contains( :col1 << Get Values, :col2 ) > 0 ));
New Column( "Formula with local variable", Formula( Local( {t0 = :col1 << get values()}, Contains( t0, :col2 ) > 0 ) ));
New Column( "Formula As Constant", Formula(As Constant( t_1 = :col1 << get values ); Contains( t_1, :col2 ) > 0));
:col1 << set each value(-10);
:col1[1] = :col2[1];
Re : Faire la différence entre une colonne entière et la ligne actuelle... jusqu'à ce que vous l'essayiez manuellement.
J'étais intéressé si le comme constante remarque la mise à jour. Aucun problème ici.
Mais d'une manière ou d'une autre, il y a un problème avec la colonne "Formule" auquel je ne m'attendais pas :
Après un premier calcul correct, le d'abord des colonnes calculées cesse de fonctionner correctement et commence à comparer les entrées de colonnes 1 par 1 !?!
(mon code est correct, n'est-ce pas ?)
Selon le manuel Jmp, le premier argument de contain doit être

C'est bien qu'il autorise également un symbole JSL (comme t0) 
Mais il ne semble pas être à l’aise avec une expression plus compliquée.
Re : Différencier la colonne entière et la ligne actuelleJMP 19.0.4 -> mêmes problèmes.