Tabula tutte le colonne numeriche in una tabellaCIAO,
Sto cercando di creare una tabella tabulare che contenga tutte le colonne numeriche (e poi un'altra con quelle categoriche).
Ho provato a eseguirlo ma non funziona.
Qualche suggerimento?
TIA
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
NumericCols = {};
for(i = 1, i <= N Cols(dt), i++,
Col = Column(dt,i);
ColDataType = Col << Get Data Type;
If( ColDataType == "Numeric",
Insert Into(NumericCols,Col << Get Name);
);
);
Tabulate(
Set Format( Uniform Format( 10, 2 ) ),
Add Table(
Column Table( Statistics( N ) ),
Column Table( Statistics( Mean ) ),
Column Table( Statistics( Std Dev ) ),
Column Table( Statistics( Min ) ),
Column Table( Statistics( Max ) ),
Column Table( Statistics( Median ) ),
Row Table(
Analysis Columns(
NumericCols = {}
)
)
)
)Re: Tabulare tutte le colonne numeriche in una tabellaPS.
Ho riscritto questo codice per lavorare su colonne continue anziché numeriche. Questo si adatta meglio alle mie esigenze, poiché ho diverse colonne che in realtà sono nominali ma hanno dati numerici ed etichette di valore.
Ecco il codice finale che ho usato.
Names Default To Here( 1 );
dt = currentdatatable();
continuousCols /*NumericCols */ = dt << get column names( continuous /*numeric*/ );
dt << Tabulate(
Set Format( Uniform Format( 10, 2 ) ),
Show Control Panel( 0 ),
Add Table(
Column Table( Statistics( N ) ),
Column Table( Statistics( Mean, Std Dev ) ),
Column Table( Statistics( Min, Max ) ),
Column Table( Statistics( Median ) ),
Row Table( Analysis Columns( Eval( continuousCols /*NumericCols */ ) ) )
)
);
Grazie mille per il vostro aiuto!
Re: Tabulare tutte le colonne numeriche in una tabellaEcco un metodo per fare quello che vuoi
dt = Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
CharacterCols = dt << get column names( nominal );
// Build a string variable that contains the required JSL
theExpr =
"dt << Tabulate(
Show Control Panel( 0 ),
Add Table(
Column Table( Statistics( N, Name( \!"% of Total\!" ) ) ),";
For( i = 1, i <= N Items( CharacterCols ), i++,
theExpr = theExpr ||
"Row Table( Grouping Columns( " || char(CharacterCols[i]) || ") ),";
);
theExpr = theExpr || "));";
// Execute the JSL
eval(parse(theExpr));
Altri membri della community potrebbero avere un metodo migliore
Re: Tabulare tutte le colonne numeriche in una tabellaGrazie ancora per avermi sopportato. Il secondo codice che hai inviato continua a non dare i risultati di cui ho bisogno.
Si prega di vedere sotto i risultati che sto cercando di ottenere che è il risultato del codice che ho pubblicato nel post precedente, seguito dai risultati che ottengo dal tuo codice.
Questo è quello che vorrei ottenere:

Questo è ciò che ottengo utilizzando il codice pubblicato:

TIA
Re: Tabulare tutte le colonne numeriche in una tabellaIl problema non è con il codice Tabulate.Il codice Tabulate che ti ho fornito funzionerà perfettamente.Il problema è con l'impostazione delle colonne da inserire nel tabulato.Nell'ultimo codice che ti ho inviato, l'istruzione
CharacterCols = dt << get column names( character );
inserire nell'elenco CharacterCols, tutte le colonne della tabella dati che erano di tipo di dati carattere.E il Tabulate ha funzionato correttamente con le colonne Lot_id, Wafer ID in Lot ID.Queste sono le uniche 2 colonne nella tabella dati che sono di tipo di dati carattere.È stato un mio malinteso che la tua richiesta di variabili di classificazione fosse inclusa nella seconda tabella, significava colonne di caratteri.Ma con la tua correzione che Classification deve includere Wafer e Site nel Tabulate, richiede che l'elenco di colonne CharacterCols debba essere generato in modo diverso.Ciò che coprirà tutte le colonne desiderate è caricare quell'elenco con tutte le colonne con il tipo di modellazione "Nominale".Pertanto, un semplice cambiamento della dichiarazione a
CharacterCols = dt << get column names( nominal );
Verrà inserito nell'elenco CharacterCols, {lot_id, wafer, ID wafer nell'ID lotto, SITE};
Il JSL modificato è sotto
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
CharacterCols = dt << get column names( nominal );
dt << Tabulate(
Set Format( Name( "% of Total" )(9, 0) ),
Show Control Panel( 0 ),
Add Table(
Column Table( Statistics( N, Name( "% of Total" ) ) ),
Row Table( Grouping Columns( eval( CharacterCols ) ) )
)
);
Re: Tabulare tutte le colonne numeriche in una tabellaGrazie per la risposta, ma il codice che hai postato non mi fornisce la tabella di cui ho bisogno.
ecco il codice, per il file di dati examole che hai usato, che mi darebbe la tabella di cui ho bisogno.
Noterai che l'output è diverso.
Tabulate(
Add Table(
Column Table( Statistics( N, Name( "% of Total" ) ) ),
Row Table( Grouping Columns( :lot_id ) ),
Row Table( Grouping Columns( :wafer ) ),
Row Table( Grouping Columns( :Wafer ID in lot ID ) ),
Row Table( Grouping Columns( :SITE ) )
)
);
Il motivo per cui ho pensato che ci fosse una differenza è che qui ogni tabella di riga è indicata separatamente, ma nei dati numerici erano tutti sotto lo stesso
"Tabella riga(Colonne analisi("
e quindi un elenco dei nomi delle colonne separati da una virgola.
Questo mi ha portato a pensare che per i numeri avrei potuto usare un semplice elenco ma non per il carattere.
Grazie per il riferimento al Scripting Guide Devo assolutamente trovare il tempo per studiarla!
Re: Tabulare tutte le colonne numeriche in una tabellaLa sintassi Tabulate è NON totalmente diverso, infatti è identico ad eccezione delle parole "Analysis Columns" cambiate in "Grouping Columns".
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
CharacterCols = dt << get column names( Character );
dt << Tabulate(
Set Format( Name( "% of Total" )(9, 0) ),
Show Control Panel( 0 ),
Add Table(
Column Table( Statistics( N, Name( "% of Total" ) ) ),
Row Table( Grouping Columns( eval( CharacterCols ) ) )
)
);
Vorrei sapere, cosa ti ha fatto pensare che la sintassi fosse drasticamente diversa?Presumo che tu stia eseguendo in modo interattivo un esempio Tabula per le colonne di analisi, quindi JMP ti fornisca il JSL per il campione che hai eseguito e quindi ripeti lo stesso per le colonne dei caratteri.Ciò ti avrebbe mostrato JSL quasi identico.Vorrei aiutarti a capire cosa ti ha portato alla conclusione che hai fatto, quindi posso aiutarti a rendere la creazione di script il più semplice possibile.
Oh... e devi leggere la Scripting Guide... non c'è niente che possa sostituire la sua lettura.
Aiuto==>Libreria della documentazione di JMP...……..Guida allo scripting
Re: Tabulare tutte le colonne numeriche in una tabellaCIAO,
Molte grazie!
Vedo ora che la sintassi di una colonna categorica è totalmente diversa.
Come lo faresti se desideri una tabella di tabulazione con quanto segue:
Set Format( Name( "% of Total" )(9, 0) ),
Add Table(
Column Table( Statistics( N, Name( "% of Total" ) ) ),
Re: Tabulare tutte le colonne numeriche in una tabellaEcco una riscrittura del tuo codice che utilizza un modo più semplice per ottenere i nomi delle colonne numeriche, quindi aggiunge la funzione Eval() attorno all'elenco delle colonne numeriche, per farlo funzionare
.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
NumericCols = dt << get column names( numeric );
dt << Tabulate(
Set Format( Uniform Format( 10, 2 ) ),
Show Control Panel( 0 ),
Add Table(
Column Table( Statistics( N ) ),
Column Table( Statistics( Mean, Std Dev ) ),
Column Table( Statistics( Min, Max ) ),
Column Table( Statistics( Median ) ),
Row Table( Analysis Columns( Eval( Numericcols ) ) )
)
);
Re: tabulare tutte le colonne numeriche in una tabellaPer errore, ho modificato la domanda precedente e ho cambiato la domanda con la mia risposta. @eliyahu100 Mi scuso per il mio errore.