Cerca colonna delimitata per i valori nella lista<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao gente di JMP,
Io uso spesso contiene per cercare una colonna per qualsiasi valore in una lista. Qualcosa come questo:
match_list = { "AAA" , "CCC" } ;
single_rows = dt << ottenere righe dove ( contiene ( match_list , : Valore singolo )) ;
Questo è un modo molto conveniente per cercare una colonna contenente valori singoli. Tuttavia molte volte ho bisogno di fare una ricerca simile dove la colonna contiene più valori separati da un delimitatore (di solito un punto e virgola).

La mia domanda: c'è un modo intelligente per cercare una colonna di valori delimitati in modo simile al metodo descritto sopra? Posso usare le espressioni regolari per cercare un singolo valore nella colonna multi-valore. Tuttavia ho bisogno di cercare la colonna multi-valore per molti valori contenuti in una lista.
Ecco un codice che genera la tabella sopra e dimostra il metodo contiene su una colonna a valore singolo.
dt = Nuova tabella ( "Searchtbl" , Aggiungi righe ( 6 ) ,
Nuova colonna ( "Valore unico" , Personaggio , Nominale ,
Imposta valori ( { "AAA" , "BBB" , "CCC" , "DDD" , "EEE" , "F F F" } ) ) ,
Nuova colonna ( "Valore delimitato" , Personaggio , Nominale ,
Imposta valori ( { "AAA" , "AAA; BBB; CCC; DDD; EEE" , "BBB; CCC; DDD" , "BBB; DDD; EEE; AAA" ,
"BBB; EEE" , "FFF; BBB" } )
)
) ;
match_list = { "AAA" , "CCC" } ;
single_rows = dt << ottenere righe dove ( contiene ( match_list , : Valore singolo )) ;
Ri: Cerca colonna delimitata per i valori nella listaSe non si hanno i nitem, penso che << get rows where () cercherà un booleano e otterrà invece una lista. Con i nitem, se non ci sono intersezioni, non ci sarà nulla nella lista, quindi falso.
Ri: Cerca colonna delimitata per i valori nella listaWow Vince è favoloso. Ho armeggiato con esso ed è venuto fuori con una funzione che prende in prestito pesantemente da questo post dalla MS: Ri: modo rapido per confrontare due liste (elementi non comuni)?
Ecco alcuni esempi di codice. Risulta che non hai bisogno del costrutto [row ()]. Ma perché hai bisogno di nitriti?
list_intersect = funzione ( // vede quali elementi di list_1 sono in list_2
{ list_1 , list_2 } ,
{ DEFAULT LOCAL } ,
intersect_list = Array associativo ( list_1 ) << intersecare ( Array associativo ( list_2 ) ) << getKeys ;
) ;
lista1 = { "Mela" , "Pera" , "arancia" , "Kiwi" , "anguria" , "Mango" , "Limone" , "bosc pera" } ;
lista2 = { "Mela" , "Pera" , "Kiwi" , "arancia" , "fragola" , "anguria" , "melone" } ;
dt = Nuova tabella ( "Temp" ,
Nuova colonna ( "Frutta" , personaggio , setvalues ( lista1 || lista2 ) )
) ;
list1_rows = dt << Ottieni righe dove ( nitems ( list_intersect ( Parole ( : Frutta , ";" ) , lista1 ))) ;
list2_rows = dt << Ottieni righe dove ( nitems ( list_intersect ( Parole ( : Frutta , ";" ) , lista2 ))) ;
Ri: Cerca colonna delimitata per i valori nella listaDovevo creare una funzione per farlo. ma sembra funzionare
list_doge = funzione ( // vede quali elementi di list_1 sono in list_2
{list_1, list_2}, {DEFAULT LOCAL},
aa1 = array associativo (List_1);
aa2 = array associativo (List_2);
aa1 << intersecare (Aa2);
aa1 << prendere le chiavi ;
);
dt << Ottieni righe dove ( nitems (List_doge ( Parole (: Valore delimitato [ riga ()], ";" ), match_list)))