Distinguere tra l'intera colonna e la riga correnteCiao,
Faccio fatica a implementare una semplice formula "contiene". Ecco un esempio di set di dati e formula:

Ecco il testo: Contiene(:Colonna 1, :Colonna 2)
Il problema: penso che controlli sempre la riga corrente della colonna 1 (intera). Voglio che controlli l'intera colonna, non solo la riga corrente. Puoi vedere che E e B sono nella colonna 2, ma l'output dice che non trova la parte nel tutto.
Come posso dire esplicitamente di controllare l'intera colonna e non solo la riga corrente della colonna?
Grazie mille!
Analisi e modellazione dei dati di baseRe: Distinguere tra l'intera colonna e la riga correnteEcco un modo per risolvere il problema
As Constant( colList = :Column 1 << get values );
Contains( colList, :Column 2 );
Re: Distinguere tra l'intera colonna e la riga correnteCIAO @KevinBrunner ,
Penserei che il modo più ovvio per confrontare colonne (piuttosto che righe) in JMP sarebbe utilizzare l'unione di tabelle.
forse qualcosa del genere
// 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 )
);
può anche essere fatto utilizzando il clic anziché lo scripting. come nella foto qui sotto

Re: Distinguere tra l'intera colonna e la riga correnteForse posso chiarire un po' di più l'obiettivo.
Nella colonna 3 voglio una funzione che restituisca 1 se viene trovata la riga corrente nella colonna 2 ovunque nella colonna 1. Quindi nel mio esempio, la colonna 3 dovrebbe visualizzare 1, 1, 0, 1, 0. Perché la E e la B in quelle righe si trovano nella colonna 1.
Grazie mille!
Re: Distinguere tra l'intera colonna e la riga correnteHo provato questo. È molto più vicino, ma non è proprio quello che sto cercando. Conta qualcosa in più di quello che cerco. Dice che B è 5 ed E è 2. Ho solo bisogno di vero o falso, 1 o 0.

Re: Distinguere tra l'intera colonna e la riga correnteAs Constant( colList = :Column 1 << get values );
Contains( colList, :Column 2 ) > 0;
Re: Distinguere tra l'intera colonna e la riga corrente
... seguente @txnelson il secondo suggerimento:
https://community.jmp.com/t5/Discussions/Differentiate-between-entire-column-and-current-row/mp/675677/highlight/true#M86260
In alternativa:
Local( {t0 = :Column 1 << get values}, Contains( t0, :Column 2 ) > 0 )che genera una variabile locale:

che viene calcolato una volta e utilizzato per ogni riga.
Peggio:
t0 = :Column 1 << get values;
Contains( t0, :Column 2 ) > 0;
Questa versione lo farà Ottenere IL valori ancora e ancora per ogni singola riga.
Re: Distinguere tra l'intera colonna e la riga correnteGrazie ancora per il vostro aiuto.
sono riuscito a semplificare il codice:
Contiene(:Colonna 1 << Ottieni valori, :Colonna 2) > 0;
Fa esattamente quello che voglio. Forse questo ti aiuterà in futuro.
Saluti.
Re: Distinguere tra l'intera colonna e la riga correntePuoi anche usare use Come costante() da valutare solo sulla prima riga
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: Distinguere tra l'intera colonna e la riga correntee che ne dici degli aggiornamenti delle tabelle?
Se Jmp aggiorna le voci in col 1 , tutte e 3 le varianti vengono aggiornate, quindi tutto sembra andare bene ...
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: Distinguere tra l'intera colonna e la riga corrente... finché non lo provi manualmente.
Mi interessava se il come costante nota l'aggiornamento. Nessun problema qui.
Ma in qualche modo sorprendente, c'è un problema con la colonna "Formula" che in realtà non mi aspettavo:
Dopo un primo, corretto calcolo, il Primo delle colonne calcolate smette di funzionare correttamente e inizia a confrontare le voci delle colonne 1 per 1 !?!
(il mio codice è corretto, vero?)
Secondo il manuale di Jmp, il primo argomento di contiene deve essere

Che bello che consenta anche un simbolo JSL (come t0) 
Ma non sembra sentirsi a proprio agio con un'espressione più complicata.
Re: Distinguere tra l'intera colonna e la riga correnteJMP 19.0.4 -> stessi problemi.