Seleziona dove: è necessario selezionare dalla selezione corrente in JSL<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Vorrei selezionare le righe da un set di dati in cui ho più condizioni, ma invece di utilizzare una singola istruzione select where con "e", voglio scorrere le mie condizioni una alla volta, selezionando dalla selezione corrente. Questo è molto semplice nella finestra di selezione del punto (usa "seleziona dalla selezione corrente"). Come posso farlo in JSL?
Ad esempio, ho un elenco di nomi di colonne cnames = {"Col1", "Col2", "Col3"} e un elenco di valori cspecs = {"a", "b","c} e voglio selezionare il righe dalla mia tabella dati dove Col1 = a, Col2 = b e Col3 = c. Eseguirò il ciclo degli elementi in cnames e gli dirò di selezionare ogni volta dalla selezione corrente. Grazie!
dt<<
seleziona where(come colonna(cnames )==cspec )
Ri: Seleziona Dove: è necessario selezionare dalla selezione corrente in JSLSto cercando di utilizzare questo codice che ho scritto in base allo script qui. Le colonne Diagnosi sono colonne di caratteri e questo codice non funziona. Fondamentalmente ci sono tre colonne nella tabella, ciascuna con codici ICD. Voglio selezionare i casi in cui corrisponde ai codici ICD. Dovrebbe essere una colonna qualsiasi che corrisponda a qualsiasi codice ICD, quindi il ciclo for nidificato. Il codice Uncommented funziona, ma la stringa Select non ha virgolette e probabilmente è per questo che non funziona. Come posso risolvere questo problema?
dt = Open( "\Main.jmp" );
colnames = {"Diagnosis 1", "Diagnosis 2", "Diagnosis 3"};
ICDcodes = { "7731", "7626", "V3001", "V3000"};
tblname = "Subset.jmp";
/*
dt << Select Where(
:Diagnosis 1 == "V3001",
Current Selection( "extend" )
);*/
select_string = "";
For (i = 1, i <= N Items(colnames), i++,
For (j = 1, j <= N Items(ICDcodes), j++,
if (select_string == "",
// then
// select_string = ":" || colnames[i] || " == " || char(ICDcodes[j]);
select_string = ":" || colnames[i] || " == " || char(ICDcodes[j]) ;
// else
,
select_string = select_string || " | " ||
":" || colnames[i] || " == " || char(ICDcodes[j]);
);
);
);
select_string = "dt << select where(" || select_string || ")";
eval(parse(select_string));
print(select_string);
// Create a subset table with GA <32 weeks.
dt << Subset( Output Table( tblname ), Selected Rows( 1 ), selected columns( 0 ) );
dt2 = data table(tblname);
dt2 << save();
//dt << clear select;Ri: Seleziona Dove: è necessario selezionare dalla selezione corrente in JSL
To select a row without deselecting a previously selected row, combine << Select Where with
<< Select Where and the current selection("extend") argument. This is an alternative to
using an OR statement.
dt << Select Where( age == 14 );
dt << Select Where( sex == "F", current selection("extend"));
molto nitido,
Non sono sicuro da dove provenga la sintassi che mostri.La Guida allo scripting di JMP 12.1 e la documentazione online corrente contengono il testo corretto, come mostrato sopra.
Grazie.
Wendy
Ri: Seleziona Dove: è necessario selezionare dalla selezione corrente in JSLPossiamo aggiornarlo nella Guida allo scripting?
//Guida allo scripting pagina 336
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt << Seleziona Dove(età < 15 e sesso == "F");
//O
dt << Seleziona dove (età == 14);
dt << Estendi Seleziona Dove (sesso == "F"); //non fa nulla
aspetta(10);
dt << Seleziona dove (sesso == "F", Selezione corrente ("estendere")); //estende la selezione
Ri: Seleziona Dove: è necessario selezionare dalla selezione corrente in JSLJMP 12 offre una nuova opzione per Seleziona Dove() che consente di specificare se estendere, limitare o cancellare la selezione corrente. La sintassi è la seguente:
dt << Select Where( condition, );
L'esempio seguente mostra l'estensione della selezione corrente.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Select Where( :Age == 14 );
Wait( 1 ); //For demonstration purposes
dt << Select Where(
:sex == "M",
Current Selection( "extend" )
);
Spero che aiuti!
Wendy
Ri: Seleziona Dove: è necessario selezionare dalla selezione corrente in JSLUn ciclo For dovrebbe essere veloce se non più veloce di una clausola where - ma "For Each Row" è terribilmente lento - usa invece For (i=1,i<=NRows(dt),,i++
Ri: Seleziona Dove: è necessario selezionare dalla selezione corrente in JSLStavo cercando una soluzione praticamente allo stesso identico problema, e questo è davvero molto intuitivo.Non so perché non ho pensato di creare una stringa di testo per valutarla prima...
Seleziona dove: è necessario selezionare dalla selezione corrente in JSLGrazie!È stato un po' complicato con le colonne di caratteri e numeriche, ma funziona ed è un grande miglioramento in termini di velocità rispetto a dove mi trovavo.
Seleziona dove: è necessario selezionare dalla selezione corrente in JSLProbabilmente è più efficiente eseguire SELECT WHERE tutto in una volta.Creo continuamente istruzioni di selezione dinamica e quindi utilizzo eval(parse()) per eseguirle.Ecco l'esempio di MS modificato per selezionare dove in una volta sola.
dt = Aprire ( "$ENGLISH_SAMPLE_DATA/Classe grande.jmp" ) ;
cnames = { "età" , "altezza" , "peso" } ;
cspecs = { 15 , 62 , 104 } ;
select_string = "" ;
Per ( io = 1 , io <= N articoli ( cnames ) , io ++,
Se ( select_string == "" ,
// Poi
select_string = ":" || cnames [ io ] || " == " || car ( cspecs [ io ]) ;
// altro
,
select_string = select_string || "&" ||
":" || cnames [ io ] || " == " || car ( cspecs [ io ]) ;
) ;
) ;
select_string = "dt << seleziona dove(" || select_string || ")" ;
eval ( analizzare ( select_string )) ;
stampa ( select_string ) ;
Seleziona dove: è necessario selezionare dalla selezione corrente in JSLGrazie, questo ti aiuterà. Avevo fatto un "per ogni riga" per aggirare questo problema e questo ha ucciso la mia performance. Il tuo suggerimento accelererà le cose.
Seleziona dove: è necessario selezionare dalla selezione corrente in JSLSi potrebbe utilizzare un elenco di righe attualmente selezionate come parte della condizione di Select Where(). L'elenco può essere aggiornato ad ogni iterazione come nell'esempio seguente.
dt = Aprire ( "$ENGLISH_SAMPLE_DATA/Classe grande.jmp" ) ;
cnames = { "età" , "altezza" , "peso" } ;
cspecs = { 15 , 62 , 100 } ;
dt << seleziona tutte le righe ;
Per ( io = 1 , io <= N articoli ( cnames ) , io ++,
righe_selezionate = dt << ottenere le righe selezionate ;
dt << seleziona dove (
E (
Come colonna ( cnames [ io ] )[] < cspecs [ io ] ,
Contiene ( righe_selezionate , Riga () ) > 0 )
)
) ;