<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Ciao,
questo problema mi lascia davvero perplesso.
Voglio fare un concatenamento ma in una tabella (dt2) ho anche alcune voci che ho già nella prima (dt1). Voglio mantenere quelli nella prima tabella dati (dt1) e voglio eliminarli nella seconda (dt2).
Ho già provato e ho un altro problema usando select where ed elimina i duplicati nella seconda tabella prima di concatenare. Ho un elenco di tutti i duplicati, ma non posso utilizzare l'elenco come variabile nella clausola select where né nel filtro dati
Summarize( a = by(column(dt, "band")),c=count );
La variabile ha questo aspetto:
a = {"2_12_000264_0_9", "2_12_000265_0_1", "2_12_000267_0_3", "2_12_000269_1_3", "2_12_000269_2_1", "2_12_000270_1_7", "2_12_000270_2_5", "2_1_0272", _000272_1_9", "2_12_000272_2_7", "2_12_000273_1_1", "2_12_000273_2_8" , "2_12_000274_0_4", "2_12_000275_1_3", "2_12_000275_2_1", "2_12_000276_1_4", "2_12_000276_2_2"};
e il filtro dati completo:
dt2 << Data Filter( Add Filter( columns( :Bandname ), Where( :Bandname == {"2_12_000264_0_9", "2_12_000265_0_1", "2_12_000267_0_3", "2_12_000269_1_3", "2_12_000269_2_1", "2_12_000270_1_7", "2_12_000270_2_5", "2_12_000271_0_1", "2_12_000272_1_9", "2_12_000272_2_7", "2_12_000273_1_1", "2_12_000273_2_8", "2_12_000274_0_4", "2_12_000275_1_3", "2_12_000275_2_1", "2_12_000276_1_4", "2_12_000276_2_2"}), Display( :Bandname, Size( 221, 259 ), List Display ), Mode( Show( 1 ) ) ));
Ma l'uso della variabile non funziona:
Add Filter( columns( :Bandname ), Where( :Bandname == a ), Display( :Bandname, Size( 221, 259 ), List Display ), Mode( Show( 1 ) ) ));
Perché??
Ma il problema principale è quello precedente, l'eliminazione dei duplicati prima della concatenazione.
Grazie in anticipo
Grazie mille, funziona alla grande ... e il tuo primo codice è davvero ottimo per comprendere jsl
Non so perché, ma in alcuni casi JSL semplicemente non risolve le variabili di elenco anche quando un elenco di testo in chiaro viene valutato perfettamente.
Un modo per aggirare questo problema è utilizzare un'espressione e sostituirla con un elenco analizzato prima della valutazione. Ecco un esempio di filtro dati:
dt = Aprire ( "$ENGLISH_SAMPLE_DATA/Classe grande.jmp" ) ;
UN = { "KATIE" , "ENRICO" , "ROBERTO" } ;
df_expr = Espr ( dt << filtro dati ( aggiungi filtro ( colonne ( : nome ) , Dove ( : nome == UN ) , Schermo ( : nome , Visualizzazione elenco ) ) ) ) ;
Sostituire in ( df_expr , Espr ( UN ) , Analizza ( Car ( Valutazione ( UN ) ) ) ) ;
eval ( df_expr ) ;
Tuttavia, per selezionare in modo condizionale le righe in base a un elenco può essere eseguito uno script in modo più efficiente utilizzando For Each Row(). Il risultato del codice seguente dovrebbe essere identico a quello precedente (ad eccezione della finestra Filtro dati).
dt = Aprire ( "$ENGLISH_SAMPLE_DATA/Classe grande.jmp" ) ;
UN = { "KATIE" , "ENRICO" , "ROBERTO" } ;
Per ogni riga ( Stato riga ( Riga () ) = Stato selezionato ( Contiene ( UN , : nome [] ) ) )
Una volta selezionate le righe duplicate, basta eseguire dt << elimina le righe prima di concatenare.