Diferenciar entre la columna completa y la fila actualHola,
Estoy luchando por implementar una fórmula simple de "contiene". Aquí hay un conjunto de datos de muestra y una fórmula:

Aquí está el texto: Contiene (:Columna 1, :Columna 2)
El problema: creo que siempre está verificando la fila actual de la Columna 1 (completa). Quiero que verifique toda la columna, no solo la fila actual. Puede ver que E y B están en la columna 2, pero el resultado dice que no encuentra la parte en el todo.
¿Cómo digo explícitamente que verifique toda la columna y no solo la fila actual de la columna?
¡Muchas gracias!
Análisis y modelado de datos básicosRe: Diferenciar entre toda la columna y la fila actualAquí hay una forma de resolver el problema.
As Constant( colList = :Column 1 << get values );
Contains( colList, :Column 2 );
Re: Diferenciar entre toda la columna y la fila actualHola @KevinBrunner ,
Creo que la forma más obvia de comparar columnas (en lugar de filas) en JMP sería utilizar la combinación de tablas.
tal vez algo como esto
// 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 )
);
También se puede hacer haciendo clic en lugar de mediante secuencias de comandos. como en la imagen de abajo

Re: Diferenciar entre toda la columna y la fila actualQuizás pueda aclarar un poco más el objetivo.
En la columna 3 quiero una función que devuelva un 1 si se encuentra la fila actual en la columna 2 en cualquier lugar en la columna 1. Entonces, en mi ejemplo, la columna 3 debería mostrar 1, 1, 0, 1, 0. Porque la E y la B en esas filas se encuentran en la columna 1.
¡Muchas gracias!
Re: Diferenciar entre toda la columna y la fila actualIntenté esto. Está mucho más cerca, pero no es exactamente lo que estoy buscando. Está contando algo más de lo que busco. Dice que B es 5 y E es 2. Sólo necesito verdadero o falso, 1 o 0.

Re: Diferenciar entre toda la columna y la fila actualAs Constant( colList = :Column 1 << get values );
Contains( colList, :Column 2 ) > 0;
Re: Diferenciar entre toda la columna y la fila actual
... siguiente @txnelson La segunda sugerencia de:
https://community.jmp.com/t5/Discussions/Differentiate-between-entire-column-and-current-row/mp/675677/highlight/true#M86260
Alternativamente:
Local( {t0 = :Column 1 << get values}, Contains( t0, :Column 2 ) > 0 )que genera una variable local:

que se calcula una vez y se utiliza para cada fila.
Peor:
t0 = :Column 1 << get values;
Contains( t0, :Column 2 ) > 0;
Esta versión conseguir el valores una y otra vez para cada fila.
Re: Diferenciar entre toda la columna y la fila actualDe nuevo, gracias por tu ayuda.
Pude simplificar el código:
Contiene(:Columna 1 << Obtener valores, :Columna 2) > 0;
Hace exactamente lo que quiero. Quizás esto te ayude en el futuro.
Salud.
Re: Diferenciar entre toda la columna y la fila actualTambién puedes usar usar Como constante() evaluar solo en la primera fila
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: Diferenciar entre toda la columna y la fila actual¿Y qué tal las actualizaciones de tablas?
Si Jmp actualiza las entradas en la columna 1, las 3 variantes se actualizan, por lo que todo parece estar bien...
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: Diferenciar entre toda la columna y la fila actual... hasta que lo pruebes manualmente.
Me interesaba si el como constante nota la actualización. No hay problema aquí.
Pero de alguna manera sorprendente, hay un problema con la columna "Fórmula" que en realidad no esperaba:
Después de un primer cálculo correcto, el primero de las columnas calculadas deja de funcionar correctamente y comienza a comparar las entradas de las columnas 1 por 1.
(mi código es correcto, ¿no?)
Según el manual de Jmp, el primer argumento de contiene debe ser

Qué bueno que también permita un símbolo JSL (como t0) 
Pero no parece sentirse cómodo con una expresión más complicada.
Re: Diferenciar entre la columna completa y la fila actualJMP 19.0.4 -> los mismos problemas.