Script JSL per filtrare intere righe in cui una particolare colonna contiene valori mancantiCara Comunità,
Sono un utente principiante e vorrei richiedere il vostro gentile aiuto con il mio seguente codice. L'argomento della funzione "manca" sembra errato.
Vorrei che lo script mostrasse una tabella in cui vengono visualizzate le righe che contengono valori in determinati intervalli. Sono inoltre da escludere le righe con celle vuote nelle due colonne utilizzate per il filtraggio.
Ecco il codice:
dt = Current Data Table(); // Assumes you have a data table already opened
// Convert Column1 to numeric data type
dt << As Numeric("Temperatur");
// Convert Column2 to numeric data type
dt << As Numeric("Menge");
// Create the conditions to filter the rows
condition1 = Column(dt, "Temperatur") << Get Values() > 25;
condition2 = Column(dt, "Menge") << Get Values() > 0;
// Create a condition to remove empty cells
condition3 = Any(Is Missing(dt << Get Values("Temperatur"))) == 0 | Any(Is Missing(dt << Get Values("Menge"))) == 0;
// Apply all three conditions to filter the data table
filtered_dt = dt << Select Where(condition1 & condition2 & condition3);
// Show the filtered data table
filtered_dt << Show();
Grazie mille in anticipo per qualsiasi navigazione. Sto usando la versione 17 di JMP
Michael
Automazione e scriptingRi: Script JSL per filtrare intere righe in cui una particolare colonna contiene valori mancantiCiao Michael.
La cosa bella di JMP: non devi conoscere alcuno scripting, puoi semplicemente usare la GUI e il mouse.
Quindi, dopo aver eseguito i passaggi, puoi andare al registro avanzato e controllare il codice...
- Righe/Selezione riga/Seleziona dove (Ctrl + W)

- apri la visualizzazione dati per le righe selezionate:

- controlla il registro:

Jmp capisce ciò che desideri e combina persino i due passaggi in un'unica riga di codice:

Se vuoi costruire il comando da solo, puoi definire alcune stringhe, concatenarle e poi analizzare e valutare il codice finale:
cond1 = "Is Missing( :age )";
cond2 = ":age > 16";
Eval(Parse("dt << Select where( "|| cond1 || " | " || cond2 || " ) << Data View;"))
Il mio suggerimento: investi un po' di tempo per imparare e comprendere la gestione delle espressioni
Un ottimo tutorial: Utilizzo di JSL per sviluppare applicazioni efficienti e robuste (EU 2018 415) di @joseph_morgan
Vedrai, in realtà è abbastanza simile al tuo approccio:
memorizza alcune condizioni come "simboli" JSL condizione 1, condizione 2 ... quindi usali per costruire la tua espressione finale e valutarla.
Con alcune correzioni al codice ed Expr() e Name Expr() qua e là (per impedire a Jmp di valutare le condizioni prima che possano essere inserite nell'ultima riga di codice) il codice dovrebbe assomigliare a questo:
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
condition 1 = Expr(Is Missing( :age ));
condition 2 = Expr(:age > 16 );
combined condition=Expr(or());
Insert into(combined condition, Name Expr(condition1));
Insert into(combined condition, Name Expr(condition2));
Eval(Substitute(dt << Select where( _cond_ ) << Data View),
Expr(_cond_),Name Expr(combined condition)));
Ri: Script JSL per filtrare intere righe in cui una particolare colonna contiene valori mancantiStai mescolando il confronto tra matrici e la selezione dalla tabella dati, in questo caso molto probabilmente vorrai semplicemente utilizzare << Seleziona dove o << Ottieni righe dove e non << Ottieni valori (potresti invece utilizzare << Ottieni righe dove di << Seleziona Dove ma dipende da cosa vuoi fare).
Puoi combinare le condizioni direttamente in una singola istruzione Select Where (se vuoi separarle, lo farei con i commenti a meno che tu non voglia riutilizzare esattamente le stesse istruzioni)
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
dt[[1 2 3 20 30], "height"] = .;
dt[[10 15 16 30], "weight"] = .;
// Comparison
dt << Select Where((:height > 60) & (:weight > 90));
selrows = dt << get selected rows; // to get a matrix of selected row numbers
r = dt << Get Rows Where((:height > 60) & (:weight > 90));
e in questo caso il controllo dei valori mancanti non è necessario
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
dt[[1 2 3 20 30], "height"] = .;
dt[[10 15 16 30], "weight"] = .;
// Comparison
r1 = dt << Get Rows Where((:height > 60) & (:weight > 90) & (!IsMissing(:height) | !Is Missing(:weight)));
r2 = dt << Get Rows Where((:height > 60) & (:weight > 90));
r1 == r2;Ri: Script JSL per filtrare intere righe in cui una particolare colonna contiene valori mancantiGrazie mille, Hogi, con il tuo aiuto ce l'ho fatta!
Ri: Script JSL per filtrare intere righe in cui una particolare colonna contiene valori mancantiGrazie mille, Jthi, con il tuo aiuto ce l'ho fatta!