JSL Aggiunta della condizione "And" al filtro datiCiao comunità JMP
Mi chiedevo se esiste un modo per aggiungere una condizione "e" a un filtro dati in JSL.
come esempio ho creato un set di dati

Se realizziamo un modello semplice solo sulla media,
model = Fit Model( Y( :Data ), Run);
Possiamo limitare il modello a un solo gruppo con un filtro dati
dtf = model << Local Data Filter(Columns(:Group), where(:Group == "A"));

Tuttavia ora se voglio aggiungere un altro filtro le uniche opzioni JSL che ho trovato ("Aggiungi filtro", "Filtra colonne" e simili) sembrano aggiungere solo una condizione "Or".
dtf << Add Filter(columns(:Outlier), where(:outlier == 0));
dtf << Filter Columns(:Outlier);

L'unica opzione sembra essere quella di rimuovere il filtro dati, quindi aggiungere un nuovo filtro con tutte le condizioni
model << Remove Local Data Filter;
dtf = model << Local Data Filter(Columns(:Group, :Outlier), where(:Group == "A"), where(Outlier == 0));

Mi manca un modo per aggiungere le condizioni "E" o semplicemente non è possibile?
fratello
Kasper Schlosser
Automazione e scriptingRe: JSL Aggiunta della condizione "And" al filtro datiCrea il filtro in JMP e copia lo script
Fit Model(
Y(:Data),
Effects,
Personality("Standard Least Squares"),
Emphasis("Effect Leverage"),
Run(
:Data << {Summary of Fit(1), Analysis of Variance(1), Parameter Estimates(1),
Lack of Fit(0), Plot Actual by Predicted(1), Plot Regression(0),
Plot Residual by Predicted(1), Plot Studentized Residuals(0),
Plot Effect Leverage(1), Plot Residual by Normal Quantiles(0),
Box Cox Y Transformation(0)}
),
Local Data Filter(
Add Filter(
columns(:Group, :Outlier),
Where(:Group == "A"),
Where(:Outlier == 1)
)
)
);
Questo in genere dà una buona idea di cosa puoi quindi scrivere
dt = Current Data Table();
model = Fit Model(Y(:Data), Run);
dtf = model << Local Data Filter(
Columns(:Group, :Outlier),
Where(:Group == "A"),
Where(:Outlier == 1)
);
Re: JSL Aggiunta della condizione "And" al filtro datiSì, l'indice di scripting fornisce anche una panoramica dei messaggi accettati da un filtro dati (anche se non sempre tutti).
Entrambi sembrano indicare che no, non c'è modo di aggiungere una condizione "e" a un filtro dati tramite jsl.
Ciò significherebbe che l'unico modo per aggiungere una condizione "and" in jsl è estrarre il codice del filtro, modificare il codice, quindi analizzare e valutare, il che è disordinato e soggetto a errori.
Re: JSL Aggiunta della condizione "And" al filtro datiAssicuratevi di aggiungere alla lista dei desideri di JMP questa limitazione segnalata.
Inoltre, credo di avere un'opinione diversa sul parse and estimate da te menzionato. Mi conforta sapere che se mi imbatto in una limitazione, JMP fornisce questa capacità di livello base che il più delle volte mi consente un percorso verso la soluzione.
Re: JSL Aggiunta della condizione "And" al filtro datiQuando aggiungi nuove colonne ai filtri, stai fondamentalmente creando nuovi gruppi di filtraggio e per impostazione predefinita sono separati da OR. A seconda del caso d'uso, a volte potresti essere in grado di usare Grouped by And
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cities.jmp");
obj = dt << Data Filter(
Add Filter(columns(:Region, :POP), Where(:Region == {"C", "N"})),
Mode(Select(0), Show(0), Include(1))
);
obj << Add Filter Columns(:State);
obj << Grouped by AND(1);
Nell'interfaccia utente abbiamo la possibilità di aggiungere al gruppo selezionato quando si preme AND, ma non abbiamo una semplice opzione di scripting per farlo.
Re: JSL Aggiunta della condizione "And" al filtro dati
@jthi ha scritto:
ma non disponiamo di una semplice opzione di scripting per questo.
Penso che abbiamo:
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
gb = dt << Graph builder();
dtf = gb << Local Data Filter(
Columns(:sex),
Where(:sex == "F")
);
dtf << (Filter Column(:age) << Where(:age == 14));
Re: JSL Aggiunta della condizione "And" al filtro datiSembra che funzioni
Un test rapido indica che questo metodo influisce sul primo filtro. Ad esempio, se abbiamo 2 condizioni "or", possiamo influire solo sul primo.
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
gb = dt << Graph builder();
dtf = gb << Local Data Filter(
Columns(:sex),
Where(:sex == "F")
);
// adds or condition
dtf << Add Filter(Columns(:sex), Where(:sex == "M"))
// Only affects the female filter
dtf << (Filter Column(:age) << Where(:age == 14));
ma per il mio caso d'uso è perfetto.
Re: JSL Aggiunta della condizione "And" al filtro datiBella scoperta!
Questo sembra funzionare solo se si invia anche il messaggio where con la colonna filtro. Potrebbe essere indesiderato/un bug o qualcosa del genere, ma siamo fortunati ad averlo (potrebbe semplicemente rompersi in qualsiasi momento quando JMP viene aggiornato).
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cities.jmp");
obj = dt << Data Filter(
Add Filter(
columns(:Region, :POP),
Where(:Region == {"C", "N"})
),
Mode(Select(0), Show(0), Include(1))
);
obj << Filter Column(:State); // creates OR group
obj << (Filter Column(:State) << Where()); // Adds AND filter to first filter group
obj << (Filter Column(:CO) << Where()); // Adds AND filter to first filter group
Probabilmente sarebbe molto meglio se fossimo in qualche modo in grado di aggiungere un filtro AND all'interno dei gruppi esistenti e non solo un nuovo filtro OR nei gruppi.
@Craige_Hales hai idea del perché ciò stia accadendo/qualche idea di chi taggare da parte di JMP?
Re: JSL Aggiunta della condizione "And" al filtro datiCome ha sottolineato in precedenza @jthi , i filtri sono composti da "gruppi" ed "elementi" e il gruppo di filtri non è esposto direttamente a JSL come oggetto scriptabile. La sintassi df << (Filter Column(:col) << Msg()) era il modo originale per "inoltrare" i messaggi a un gruppo, sebbene non sia ben documentata. Vorrei sottolineare che questa sintassi è un percorso molto diverso dal semplice messaggio df << Filter Column(:col), che è documentato nello Scripting Index. La precedente sintassi non ha regole JSL integrate per l'elaborazione, sebbene sia utilizzata in modi simili in altri oggetti, come Bivariate. In sostanza, il messaggio inviato al filtro è un'espressione e la sintassi supportata è personalizzata per il filtro.
Un po' di più sulla sintassi speciale per inoltrare i messaggi. C'è un secondo argomento facoltativo per specificare l'indice del gruppo di filtri che dovrebbe ricevere il messaggio. Questo può essere importante quando hai più gruppi, che potrebbero persino contenere le stesse colonne. Senza questo, il comando verrà inviato alla prima colonna corrispondente o aggiunto al primo gruppo.
Potresti anche scoprire che il Msg() inviato all'elemento filtro può essere solo un messaggio semplice. L'elaborazione qui non supporta l'invio di un elenco di comandi da elaborare. Questo è dovuto ancora una volta al fatto che inner << è un'esecuzione personalizzata e non utilizza direttamente le regole JSL principali.
dt = Open( "$SAMPLE_DATA/Cities.jmp" );
df = dt << Data Filter(
Location( {1001, 218} ),
Add Filter( columns( :POP ), Where( :POP >= 4461 ) ),
Add Filter( columns( :OZONE ), Where( :OZONE <= 0.12581 ) )
);
// add a filter item to the first group
df << (Filter Column(:Region, 1) << Check Box Display);
// add a filter item to the second group
df << (Filter Column(:NO, 2) << Where(:NO <= 0.05));