Come selezionare le righe in base a più criteri?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />CIAO,
Sto scrivendo uno script per sottoimpostare una tabella dati. Seguendo l'esempio di codifica delle guide di scripting posso selezionare in base a un criterio:
per ogni riga(Selezionato(Rowstate())=(nome=="KATIE"));
Come posso generalizzare questo per selezionare sia KATIE che LOUISE?
Questo non funziona:
per ogni riga(Selezionato(Rowstate())=(nome=="KATIE","LOUISE"));
Allora qual è la sintassi per questo?
Saluti
Poul
Ri: Come selezionare le righe in base a più criteri?Grazie,
In passato suddividevo ciascun criterio in una tabella individuale e poi li combinavo tutti.
Buon Anno !Ri: Come selezionare le righe in base a più criteri?È questo ciò che stai cercando di ottenere, trovare tutte le corrispondenze trovate nell'elenco chiamato "name_list" e quindi inserirle in una tabella di dati sottoinsiemi?
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
name_list = {"Clay", "Alice", "AMY"};
For( i = 1, i <= N Items( name_list ), i++,
i_name = Uppercase( name_list[i] );
dt << select where( :name == i_name, current selection( "extend" ) );
);
dtSub = dt << subset( selected rows( 1 ), selected columns( 0 ) );Ri: Come selezionare le righe in base a più criteri?Ciao signorina,
grazie per la tua sceneggiatura
Mi chiedo se esista un modo per gestire dinamicamente l'elenco dei nomi e riuscire comunque a sottoinsiemi
dt = Aprire ( "$SAMPLE_DATA/Classe grande.jmp" ) ;
name_list={"argilla","Alice","AMY", ...};
for(i=1,i<=nielementi(elenco_nomi),i++,
i_nome=elenco_nomi[i];
dt<
);
dt<
Ri: Come selezionare le righe in base a più criteri?Questa sintassi potrebbe essere un po' più leggibile.Puoi utilizzare la barra verticale per OR e la e commerciale per AND:
dt = aprire ( "$dati_campione\Big Class.jmp" ) ;
dt << seleziona dove (( contiene ( : nome , "UNA CRAVATTA" ) | contiene ( : nome , "OBER" ))
& contiene ( : sesso , "F" )) ;
Ri: Come selezionare le righe in base a più criteri?Quasi lì. And() deve racchiudere entrambi gli argomenti; affinché And() sia vero, entrambi i suoi argomenti devono essere veri.
Questo dovrebbe funzionare:
Per ogni riga ( Selezionato ( Stato riga () ) = E ( O ( contiene ( : nome , "UNA CRAVATTA" ) , contiene ( : nome , "OBER" )) , contiene ( : sesso , "F" ))) ;
Ri: Come selezionare le righe in base a più criteri?Ciao, queste risposte sono state davvero utili. Ora, se voglio aggiungere una condizione per il valore in un'altra colonna, diciamo che voglio selezionare nome="KATIE" e "ROBERT", (o meglio ancora, contenente "ATIE"), E sesso="F". Quindi dovrei combinare la condizione Or- con una condizione e.
dt = Aprire ( "$SAMPLE_DATA/Classe grande.jmp" ) ;
Per ogni riga ( Selezionato ( Stato riga () ) = O ( contiene ( : nome , "UNA CRAVATTA" ) , contiene ( : nome , "OBER" )) E (contiene(:sesso, "F" ))) ;
Ho già fatto qualcosa del genere, ma non ho avuto successo.
Saluti
Poul
(PS Ovviamente ho usato molto Base SAS. Ora provo a implementare le selezioni sulle tabelle in questo modo. Grazie per l'aiuto.)
Ri: Come selezionare le righe in base a più criteri?Se ci sono molte stringhe da confrontare, si potrebbe essere tentati di utilizzare list invece di costruire una lunga clausola OR(). Tuttavia, Contain() non può cercare sottostringhe in un elenco (di stringhe). È quindi necessario un ciclo sull'elenco. Ecco un esempio:
dt = Aprire ( "$SAMPLE_DATA/Classe grande.jmp" ) ;
Lista di nomi = { "UNA CRAVATTA" , "ISE" , "CLY" , "WWW" } ;
N = N articoli ( Lista di nomi ) ;
Per ogni riga (
Per ( io = 1 , io <= N , io ++,
Se ( ( s_flag = Contiene ( : nome [] , Lista di nomi [ io ] )) > 0 ,
Rottura ()
)
) ;
Selezionato ( Stato riga () ) = s_flag ;
) ;
Ri: Come selezionare le righe in base a più criteri?Stesso principio:
dt = Aprire ( "$SAMPLE_DATA/Classe grande.jmp" ) ;
Per ogni riga ( Selezionato ( Stato riga () ) = O ( contiene ( : nome , "UNA CRAVATTA" ) , contiene ( : nome , "ISE" )) ) ;
// O in alternativa
dt << Seleziona dove ( O ( contiene ( : nome , "UNA CRAVATTA" ) , contiene ( : nome , "ISE" )) ) ;
Ri: Come selezionare le righe in base a più criteri?Ma cosa succede se voglio utilizzare ulteriormente "Contains" per abbinare le stringhe solo su una parte delle stringhe? Come "ATIE" e "ISE"? Saluti Poul
Ri: Come selezionare le righe in base a più criteri?Usa Or():
dt = Aprire ( "$SAMPLE_DATA/Classe grande.jmp" ) ;
Per ogni riga ( Selezionato ( Stato riga () ) = O ( nome == "KATIE" , nome == "LOUISE" ) ) ;
// O in alternativa
dt << Seleziona dove ( O ( nome == "KATIE" , nome == "LOUISE" ) ) ;