JSL: ottieni valori univoci di una colonna della tabella datiCIAO,
Attualmente utilizzo il comando summary per ottenere valori univoci di una colonna della tabella dati, che a mio avviso è troppo complicato per un compito così semplice. Penso che debba esserci un comando più semplice che funzioni su una colonna di tabella dati o su un vettore, ma non riesco a trovarne uno. Ho ragione?
Il mio codice attuale è simile a questo:
// sample data set:
dt = New Table( "dt" );
dt:"Column 1" << setvalues( [1, 1, 2, 7, 7, 4, 5, 1, 5] );
// use summary to get unique values:
dt_sum = dt << summary( group( :Column 1 ), N, outputtablename( "dt_sum" ) );
unique_values = dt_sum:"Column 1" << getvalues;
Dala
Re: JSL: ottieni valori univociSalve, quale sarebbe l'approccio per utilizzare le chiavi nell'array per selezionare o filtrare righe con le stesse chiavi, ma in una tabella JMP diversa. Ho due tavoli. Uno di questi mappa gli ID dei campioni per i test chimici su diverse impostazioni di fattori (temperatura, tempo, numero di studio, ecc.). Riesco a ottenere con successo gli ID di esempio in un array. (Scusate, sono un totale principiante in questo.)
smplID = Associative array(:sampleid) << Get Keys;
Ora voglio utilizzare questi tasti per selezionare le righe nella seconda tabella (dove si trovano le mie risposte), invertire la selezione delle righe ed eliminare le righe. Forse la soluzione di seguito, come descritto qui, è più adatto per cominciare ?
Summarize(dt, smpleID = by(:sampleid));
O forse questo approccio è preferibile?
dt << Summary (Group ( :sampleid ), Frequ( "None" ), Weight( "None" );
Ad ogni modo, quello che voglio veramente sapere è come posso utilizzare uno qualsiasi di questi approcci per ripulire efficacemente una tabella dati dalle righe che non mi servono, prima di procedere ulteriormente con l'analisi dei dati.
Modifica: discusso e risolto Qui .
Ri: JSL: ottieni valori univoci di una colonna della tabella datiProva a riassumere ...
Riepilogare può fare di più... vedere la documentazione sugli script.
Un paio di aspetti negativi.
- Anche se la colonna riepilogata può essere numerica, l'elenco restituito contiene valori di caratteri.
- In relazione a 1, la precisione dei valori numerici viene troncata in base alla larghezza della colonna.
// sample data set:
dt = newtable("dt");
dt:"Column 1" << setvalues([1, 1, 2, 7, 7, 4, 5, 1, 5]); summarize(unique_values=by(Column 1));
show(unique_values)
Ma... ecco una soluzione alternativa agli aspetti negativi:
summarize(unique_values=by(Column 1), unique_numeric_values=(max(Column 1)));
show(unique_values, unique_numeric_values)
Re: JSL: ottenere valori univociStudia questo esempio:
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
values = dt:age << Get Values;
array = Associative Array( values );
array << Get Keys;
Re: JSL: ottenere valori univociPuoi provare Summarize() e poi semplicemente scorrere l'elenco restituito e modificare nuovamente i valori stringa in numerici utilizzando la funzione num().
Potresti creare una nuova colonna in cui utilizzare una formula
:variabile * 100
e quindi convertire i dati così come escono dall'array associativo
Potresti creare una nuova colonna, convertendo i valori in caratteriRe: JSL: ottenere valori univociGrazie per questa meravigliosa e breve soluzione @Mark_Bailey .
Funziona nella maggior parte dei casi, ma non nel seguente caso:
values = {0.111, 0.222, 0.333}; // This is actually something like: values = Column(SomeList[1]) << Get Keys
N Items(Associative Array(values)) // gives 1
JMP ignora le cifre decimali durante la creazione dell'array associativo. (Utilizzando JMP 12)
Come posso risolvere questo problema utilizzando array associativi in modo che N Items restituisca 3 anziché 1?
Re: JSL: ottenere valori univociGrazie per l'aiuto! Summarize funziona benissimo!
DalaRe: JSL: ottenere valori univociAnche:
unique values = Associative Array( col ) << Get Keys
Re: JSL: ottenere valori univociRiepilogo funziona bene se si desidera conservare i dati in un formato di tabella dati.
L'array associativo suggerito da @Mark_Bailey funziona bene se si desidera lavorare con gli elenchi.Re: JSL: ottenere valori univoci di una colonna di una tabella datiPropongo una soluzione riassuntiva per gli utenti JMP alle prime armi (come me).
In questo esempio vogliamo un elenco di prodotti finiti unici da un elenco di ordini clienti. Non collegherò la tabella e darò un nome alla tabella di output.
Nella tabella dati originale vai su Tabelle -> Riepilogo

Trascinare "Finito bene" dalle colonne selezionate al gruppo sulla destra.
Assegna un nome alla tabella di output, in questo caso UniqueFG.
Deseleziona Collega alla tabella dati originale.
Fare clic su Azione OK.

La tabella dati risultante è un elenco di tutti gli FG univoci e del conteggio delle righe.
Fare clic su Modifica script sorgente.
Sarà più o meno così.
Data Table( "Test" ) <<
Summary(
Group( :Finished Good ),
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 ),
output table name( "UniqueFG" )
)
Copia quel codice.
Crea un nuovo script nella tabella dati originale e incolla il codice. Ho modificato leggermente il codice per renderlo più flessibile/scalabile e ho commentato alcune note qui sotto.
//Creates a list of unique FG #s to feed to SAP to get unit weights and carton quantities
Names Default to Here(1);
dt = current data table();
dt <<
Summary(
Group( :Finished Good ), //this is the column from which you want unique values
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 ), //this turns off table linking
output table name( "UniqueFG" ) // this is the name of the new datatable
)
Salva.
Non esitate a farmi sapere se questo è/non è un buon approccio o una buona struttura di codice. Grazie!