Tabelle di datiCIAO,
Voglio confrontare più di 2 tabelle in JMP per una colonna comune presente in tutte le tabelle. Ora voglio restituire 1 se i valori in quella specifica colonna sono presenti in ogni tabella, altrimenti 0. Questo è possibile per alcune tabelle predefinite e utilizzando uno script JSL che aggiunge una colonna extra in ogni tabella e restituisce 0 o 1.
Ma voglio rendere questo script generico in modo da non dover predefinire il nome delle tabelle. Dovrebbe essere così: ogni volta che eseguo questo script, dovrebbe chiedermi quali tabelle voglio confrontare.
Dopodiché, voglio anche che questo script funzioni in modo tale da darmi anche la possibilità di selezionare quale colonna voglio confrontare
Attualmente sto usando questo script
// Get references to the three tables
dt1 = Data Table("Untitled 9");
dt2 = Data Table("Untitled 10");
dt3 = Data Table("Untitled 11");
// Extract ID values from each table
ids1 = dt1:ID << Get Values;
ids2 = dt2:ID << Get Values;
ids3 = dt3:ID << Get Values;
// Find common IDs manually
commonIDs = {};
For(i = 1, i <= N Items(ids1), i++,
If(Contains(ids2, ids1[i]) & Contains(ids3, ids1[i]),
Insert Into(commonIDs, ids1[i])
)
);
// Function to add indicator column
AddIndicatorColumn = Function({dt},
dt << New Column("PresentInAll",
Numeric,
Formula(If(Contains(commonIDs, :ID), 1, 0))
)
);
// Apply to all tables
AddIndicatorColumn(dt1);
AddIndicatorColumn(dt2);
AddIndicatorColumn(dt3);
Modifica (jthi): aggiunta formattazione jsl
Seleziono tre tabelle Senza titolo 9, Senza titolo 10 e Senza titolo 11 e la colonna che sto confrontando è "ID"
Per favore aiutatemi in questo,
Grazie

Automazione e scriptingAccesso ai datiRe: Tabelle datiQuante righe contengono le tue tabelle e quanti valori univoci contengono? Questo può influire sul modo in cui questa operazione dovrebbe essere eseguita per evitare problemi di prestazioni.
Re: Tabelle datiIn ogni caso, puoi creare l'interfaccia utente utilizzando Get Data Table List + List Boxes. Di seguito è riportata una versione rapida che può aiutarti a iniziare.
Names Default To Here(1);
dts = Get Data Table List();
If(N Items(dts) < 2,
Throw("Not enough tables open");
);
run_expr = Expr(
Show(lb_tables << get selected, lb_columns << get selected);
);
tables = dts << get name;
nw = New Window("",
H List Box(
Panel Box("Select tables",
lb_tables = List Box(tables,
<< Set Function(Function({this},
sel = this << get selected;
If(N Items(sel) < 1,
return(0);
);
cols = Datatable(sel[1]) << Get Column Names("String");
lb_columns << Set Items(cols);
))
),
),
Panel Box("Pick Column",
lb_columns = List Box({}, << Set Max Selected(1))
),
Panel Box("Actions",
Lineup Box(N Col(1),
Button Box("OK",
run_expr
),
Button Box("Cancel",
nw << close window;
)
)
)
)
);
Write();
Re: Tabelle datiEcco un esempio di JSL più dettagliato che prende il JSL di Jarmo e lo espande per fornirti i risultati mostrati nella tua discussione iniziale.
Utilizza array associativi per trovare l'intersezione sia dei nomi delle colonne che compaiono in tutte e 3 le tabelle, sia dei valori che compaiono nella colonna selezionata.
Utilizza anche la piattaforma di aggiornamento per riportare i risultati nelle 3 tabelle originali. La metodologia dovrebbe essere piuttosto efficiente anche su tabelle di dati molto grandi.

Names Default To Here( 1 );
dts = Get Data Table List();
If( N Items( dts ) < 2,
Throw( "Not enough tables open" )
);
tables = dts << get name;
// Create the table and column selection window
nw = New Window( "",
H List Box(
// Define the Table selection box
Panel Box( "Select tables",
lb_tables = List Box(
tables,
maxselected( 3 ),
<
<SET function="">
0, lb_columns << Set Items( cols ); pickPBox << visibility( "Visible" ); ); ); ) ) ), ), // Define the column selection box pickPBox = Panel Box( "Pick Column", lb_columns = List Box( {}, Max Selected( 1 ), <
<SET function=""></SET>
</SET>
<BR />