Passa gli elementi dalle statistiche calcolate a coordinate specifiche in una tabella di dati salvataGenero diversi grafici con statistiche calcolate. Vorrei trasmettere specifici parametri statistici calcolati, ad esempio il minimo, la mediana e il massimo da Quantili e Std Dev da Statistiche riassuntive a coordinate specifiche in una tabella di dati salvata utilizzando JSL.
Ad esempio vorrei trasmettere
- Quantile minimo alla riga 5, colonna 7
- mediana alla riga 5, colonna 8
- Quantile massimo alla riga 5, colonna 9
- Std Dev alla riga 5 colonna 10.
alla mia tabella di dati salvata. Come ottenere questo utilizzando JSL?
(le coordinate sono vuote nella tabella dei dati salvati per cominciare)
Tabella datiGraficaScriptingRi: Passa gli elementi dalle statistiche calcolate a coordinate specifiche in una tabella di dati salvataGrazie. Questo funziona. Venendo da Matlab e C # mi sto ancora abituando al modo di pensare JSL.
Ri: Passa gli elementi dalle statistiche calcolate a coordinate specifiche in una tabella di dati salvataGuarda attentamente il tuo codice. stai assegnando il valore restituito della funzione include a resultsdt. Il valore restituito è l'ultima operazione eseguita dal file incluso, che restituisce "H". non è una tabella di dati.
modificare:
o (1) aggiungi una riga finale a basicTable.jsl che dice
resultsdt;
o (2) cambia l'inclusione in questo modo (aggiungendo commento)
/*resultsdt =*/ include ("basicTable.jsl");
Penso che (1) sembri più vicino a quello che ti aspetti. Si assicura che l'ultima cosa valutata sia la variabile che contiene la tabella dati, che poi viene restituita come risultato di include().
(2) funzionerà anche, forse, a seconda del comportamento locale e utilizzando lo stesso nome di variabile. Penso che sarà un po 'imprevedibile a seconda se usi namesDefaultToHere ovunque e se resultsdt esiste già. Non sono sicuro di come funzionerà senza test.
Ri: Passa gli elementi dalle statistiche calcolate a coordinate specifiche in una tabella di dati salvataLa dichiarazione
Column(resultsdt, "Column 1")[8] ="H";
passa solo un nome di parametro H all'ottava riga della colonna 1. Un modo alternativo di definire risultatidt
Names Default To Here (1);
// set up a table to accept the results
resultsdt = New Table( "Results Table",
Add Rows( 8),
New Column( "Column 1" ),
New Column( "Column 2" ),
New Column( "Column 3" ),
New Column( "Column 4" ),
New Column( "Column 5" ),
New Column( "Column 6" ),
New Column( "Min", Numeric ),
New Column( "Median", Numeric ),
New Column( "Max", Numeric ),
New Column( "SD", Numeric )
);
resultsdt:Column 1[1] ="A";
resultsdt:Column 1[2] ="B";
resultsdt:Column 1[3] ="C";
resultsdt:Column 1[4] ="D";
resultsdt:Column 1[5] ="E";
resultsdt:Column 1[6] ="F";
resultsdt:Column 1[7] ="G";
resultsdt:Column 1[8] ="H";
inoltre non funziona durante l'utilizzo
resultsdt = include ("basicTable.jsl");
Tuttavia, se lascio vuota la colonna 1, il codice funziona correttamente. Qualsiasi aiuto per risolvere questo problema sarebbe utile.
Ri: Passa gli elementi dalle statistiche calcolate a coordinate specifiche in una tabella di dati salvata
resultsdt = include ("basicTable.jsl");
Se quel file è quello che mostri, il problema è che resultsdt non è una tabella di dati, ma (forse?) Qualunque cosa valuti
Column(resultsdt, "Column 1")[8] ="H";
che potrebbe essere "H". Il risultato della funzione include è l'ultima cosa valutata. (Coerentemente con la tua nota.)
Sì, il messaggio di errore non è stato così utile come potresti desiderare. @Audrey_Shull - dovrebbe puntare a sinistra di =, non a destra.
Ri: Passa gli elementi dalle statistiche calcolate a coordinate specifiche in una tabella di dati salvataGrazie @Craige_Hales . Ora capisco un po' meglio il problema. Tuttavia c'è ancora un problema tecnico. Quanto segue funziona come previsto
Names Default To Here (1);
delete symbols ();
clear log ();
// set up a table to accept the results
resultsdt = New Table( "Results Table",
Add Rows( 8),
New Column( "Column 1" ),
New Column( "Column 2" ),
New Column( "Column 3" ),
New Column( "Column 4" ),
New Column( "Column 5" ),
New Column( "Column 6" ),
New Column( "Min", Numeric ),
New Column( "Median", Numeric ),
New Column( "Max", Numeric ),
New Column( "SD", Numeric )
);
Column(resultsdt, "Column 1")[1] = "A";
Column(resultsdt, "Column 1")[2] = "B";
Column(resultsdt, "Column 1")[3] = "C";
Column(resultsdt, "Column 1")[4] = "D";
Column(resultsdt, "Column 1")[5] = "E";
Column(resultsdt, "Column 1")[6] = "F";
Column(resultsdt, "Column 1")[7] = "G";
Column(resultsdt, "Column 1")[8] ="H";
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
getDistChart = Function({ColName, _LSL, _USL}, {distChart},
New Window(""||ColName||" distribution",
distChart = dt << Distribution(
Stack( 1 ),
Continuous Distribution(
Column(As Column (ColName) ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Capability Analysis( LSL(_LSL ), USL(_USL) )
),
SendToReport(
Dispatch(
{},
"Distrib Histogram",
FrameBox,
{DispatchSeg( LabelSeg( 1 ), {Font( "Segoe UI", 7, "Plain" )} ),
DispatchSeg( LabelSeg( 2 ), {Font( "Segoe UI", 7, "Plain" )} )}
)
)
);
);
return(distChart);
);
dist = getDistChart ("weight", 55, 185);
toPass= Report( dist )[Outline Box("weight" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box(1)]<< get (1);
//resultsdt = include ("basicTable.jsl");
resultsdt[1, 2] = toPass;
//show (toPass);
Tuttavia, se definisco risultatidt separatamente come di seguito
Names Default To Here (1);
// set up a table to accept the results
resultsdt = New Table( "Results Table",
Add Rows( 8),
New Column( "Column 1" ),
New Column( "Column 2" ),
New Column( "Column 3" ),
New Column( "Column 4" ),
New Column( "Column 5" ),
New Column( "Column 6" ),
New Column( "Min", Numeric ),
New Column( "Median", Numeric ),
New Column( "Max", Numeric ),
New Column( "SD", Numeric )
);
Column(resultsdt, "Column 1")[1] = "A";
Column(resultsdt, "Column 1")[2] = "B";
Column(resultsdt, "Column 1")[3] = "C";
Column(resultsdt, "Column 1")[4] = "D";
Column(resultsdt, "Column 1")[5] = "E";
Column(resultsdt, "Column 1")[6] = "F";
Column(resultsdt, "Column 1")[7] = "G";
Column(resultsdt, "Column 1")[8] ="H";
e poi chiamalo come di seguito (che è il modo in cui ho impostato il mio codice effettivo)
Names Default To Here (1);
delete symbols ();
clear log ();
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
getDistChart = Function({ColName, _LSL, _USL}, {distChart},
New Window(""||ColName||" distribution",
distChart = dt << Distribution(
Stack( 1 ),
Continuous Distribution(
Column(As Column (ColName) ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Capability Analysis( LSL(_LSL ), USL(_USL) )
),
SendToReport(
Dispatch(
{},
"Distrib Histogram",
FrameBox,
{DispatchSeg( LabelSeg( 1 ), {Font( "Segoe UI", 7, "Plain" )} ),
DispatchSeg( LabelSeg( 2 ), {Font( "Segoe UI", 7, "Plain" )} )}
)
)
);
);
return(distChart);
);
dist = getDistChart ("weight", 55, 185);
toPass= Report( dist )[Outline Box("weight" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box(1)]<< get (1);
resultsdt = include ("basicTable.jsl");
resultsdt[1, 2] = toPass;
//show (toPass);
ottengo l'errore
Not subscriptable value{8} in access or evaluation of 'Assign' , resultsdt[1, 2] = /*###*/toPass/*###*/
dove sbaglio?
(noto che se non definisco affatto le voci nella colonna 1, entrambi gli approcci precedenti funzionano correttamente)
Ri: Passa gli elementi dalle statistiche calcolate a coordinate specifiche in una tabella di dati salvata2 problemi, alla variabile locale restituita non viene mai assegnato nulla e la tabella dati deve essere passata alla funzione utente. Qualcosa come questo
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
getDistChart = Function( {dt, ColName, _LSL, _USL},
{distChart},
New Window( "" || ColName || " distribution",
distChart = dt << Distribution(
Stack( 1 ),
Continuous Distribution(
Column( As Column( ColName ) ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Capability Analysis( LSL( _LSL ), USL( _USL ) )
),
SendToReport(
Dispatch(
{},
"Distrib Histogram",
FrameBox,
{DispatchSeg( LabelSeg( 1 ), {Font( "Segoe UI", 7, "Plain" )} ),
DispatchSeg( LabelSeg( 2 ), {Font( "Segoe UI", 7, "Plain" )} )}
)
)
)
);
Return( distChart );
);
dist = getDistChart( dt, "weight", 55, 185 );
In JMP, l'operatore << è il inviare operatore e invia un messaggio (a destra) a a oggetto scriptabile , sulla sinistra. La tabella dati (dt) è un oggetto scriptabile, ma non è a conoscenza di un messaggio getDistChart . Conosce le piattaforme integrate, come distribuzione . L'indice di scripting mostra tutti i nomi dei messaggi per la tabella dati.
Ri: Passa gli elementi dalle statistiche calcolate a coordinate specifiche in una tabella di dati salvata@ron_horne . Quanto segue dovrebbe aiutare a chiarire un po 'di più le cose in quanto è molto simile al mio problema reale. Ottengo il grafico di distribuzione tramite una funzione.
Names Default To Here (1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
getDistChart = Function({ColName, _LSL, _USL}, {distChart},
New Window(""||ColName||" distribution",
Distribution(
Stack( 1 ),
Continuous Distribution(
Column(As Column (ColName) ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Capability Analysis( LSL(_LSL ), USL(_USL) )
),
SendToReport(
Dispatch(
{},
"Distrib Histogram",
FrameBox,
{DispatchSeg( LabelSeg( 1 ), {Font( "Segoe UI", 7, "Plain" )} ),
DispatchSeg( LabelSeg( 2 ), {Font( "Segoe UI", 7, "Plain" )} )}
)
)
);
);
return(distChart);
);
dist = dt << getDistChart ("weight", 55, 185);
A me sembra che l'ultima riga non stia facendo ciò che dovrebbe fare per estrarre valori dalla distribuzione poiché nessuna distribuzione viene tracciata in primo luogo. La domanda ora è come ottenere i valori delle statistiche calcolate quando la distribuzione viene tracciata tramite una funzione come la mia sopra. Forse una funzione non è un messaggio quindi non può essere inviata a un oggetto usando <
Qualsiasi aiuto sarebbe molto utile poiché sto ancora imparando JMP.
Ri: Passa gli elementi dalle statistiche calcolate a coordinate specifiche in una tabella di dati salvataGrazie ancora @ron_horne , ma entrambi non funzionano e mi danno lo stesso errore.
Stai dicendo che quanto segue è un uso corretto e valido? Nota che lo è non complottare la distribuzione se usata come sotto (tra l'altro non capisco la funzione di dist in dist=dt ?)
Output = Report( dist = dt << getDistribution("ColName", "LSL", "USL", "other input parameters") );
e l'errore (copiato dal registro)
Send Expects Scriptable Object{8} in access or evaluation of 'Send' , Output[Outline Box( "height" ), Outline Box( "Quantiles" ),
Table Box( 1 ), Number Col Box( 1 )] << /*###*/get( 1 ) /*###*/Not subscriptable value{8} in access or evaluation of 'Assign' , resultsdt[5, 9] = /*###*/Output[Outline Box( "Pass Distribution" ),
Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << /*###*/get( 1 ) /*###*/
/*###*/
Sto ricevendo è dovuto alla mia seguente dichiarazione (anche quando il tuo suggerimento di seguito)
resultsdt[5, 9] = Output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1)] << get( 1 ); // max
Se sì, vorrei fare un semplice test e passare qualcosa di più semplice a resultsdt. C'è un semplice test che posso fare per verificare se posso ottenere qualcosa da Produzione alla tabella dei dati risultatidt ?
Ri: Passa gli elementi dalle statistiche calcolate a coordinate specifiche in una tabella di dati salvataCiao @Neo ,
se capisco correttamente il tuo problema devi prestare attenzione alla numerazione e agli indirizzi. una volta che si utilizzano i nomi delle caselle di contorno, la numerazione delle caselle tabella e delle caselle numerate inizia da 1.
Pertanto, prova quanto segue:
resultsdt[5, 9] = Output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1)] << get( 1 ); // max
se vuoi usare Number Col Box (11) prova questo:
resultsdt[5, 9] = Output[Number Col Box( 11)] << get( 1 ); // max
spero che ora funzioni.
in generale, ci sono modi molto più fantasiosi per far sì che lo script trovi la posizione dei valori di interesse usando xpath () o pattern matching come in questo link: http://www.pega-analytics.co.uk/blog/oneway-advisor-step-3/
Ri: Passa gli elementi dalle statistiche calcolate a coordinate specifiche in una tabella di dati salvataGrazie @ron_horne . Vorrei provare a dare una panoramica di ciò che sto cercando di fare. Il mio script principale ha il seguente flusso (semplificato qui).
Apri una tabella di dati (e chiamala dt ), quindi tracciare grafici di distribuzione per diverse colonne utilizzando una funzione
getDistribution ("ColName", "LSL", "USL", "other input parameters")
Ciascun grafico di distribuzione risultante ha "Quantili", "Statistiche di riepilogo" e "Analisi delle capacità (con schema chiuso)".
La parte successiva dello script principale consiste nel creare una tabella (chiamiamola risultatidt ) con diverse righe e colonne in cui devo passare i valori delle statistiche calcolate come indicato nel post originale.
Tuttavia, quanto segue non funziona.
output = Report( dist = dt << getDistribution("ColName", "LSL", "USL", "other input parameters") );
resultsdt[5, 9] = Output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 6 ), Number Col Box( 11)] << get( 1 ); // max
Mi sono assicurato che i numeri in Table Box () e Number Col Box () siano corretti. Ottengo il seguente errore
Send Expects Scriptable Object{8} in access or evaluation of 'Send' , output[Outline Box( "height" ), Outline Box( "Quantiles" ),
Table Box( 6 ), Number Col Box( 11 )] << /*###*/get( 1 ) /*###*/
Dove sto sbagliando?
Ri: Passa gli elementi dalle statistiche calcolate a coordinate specifiche in una tabella di dati salvataCiao Neo,
il tuo riferimento a distb non funziona sine distb non è un livello di report di nulla. è il livello di analisi. In JMP c'è una differenza tra loro.
per estrarre qualcosa dall'output è necessario fare riferimento esplicito al livello del report.
guarda questo: Estrai le statistiche da un'analisi in un report se hai più output dovrai nominarli e definirli correttamente per essere sicuro di ottenere i valori a cui miri.
facci sapere se funziona. in caso contrario, considera di fornire alcuni file e script dal punto che ti sta dando problemi.
ti auguro il meglio,
Ron
Ri: Passa gli elementi dalle statistiche calcolate a coordinate specifiche in una tabella di dati salvata@ron_horne . Grazie. Mi ci è voluto del tempo per ricodificare in modo da poterlo avere La "Tabella dei risultati" aperta per i valori delle statistiche calcolate potrebbe essere trasmessa ad essa.
Ho iniziato con il tuo suggerimento e ho una domanda. Perché questo non funziona?
distb = Distribution( Continuous Distribution( Column( :height ) ) ) ;
// Extract min median max and SD
resultsdt[5, 7] = distb[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 11 ); // min
resultsdt[5, 8] = distb[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 6 ); // median
resultsdt[5, 9] = distb[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 1 ); // max
resultsdt[5, 10] = distb[Outline Box( "height" ), Outline Box( "Summary Statistics" ), Number Col Box( 1 )] << get( 2 ); // Std dev.
e perché deve esserlo?
output = Report( dist = dt << Distribution( Continuous Distribution( Column( :height ) ) ) );
Ho più grafici di distribuzione a cui posso facilmente assegnare un nome come distb1, distb2, ... ma se ho bisogno di avere
output = Report( dist = dt << Distribution( ..... ) );
Avrò bisogno di controllare come questo influisce sul resto del mio codice.
Ri: Passa gli elementi dalle statistiche calcolate a coordinate specifiche in una tabella di dati salvata
Ciao @Neo
Per quanto ne so, in JMP non è possibile impostare i dati in una cella di una tabella chiusa.
Se qualcun altro qui ne sa di più per favore fatecelo sapere.
forse puoi aprire un'altra tabella come intermediario per mantenere lì le informazioni mentre stai ancora raccogliendo e solo alla fine aprire la tabella dei risultati finali.
Ron
Ri: Passa gli elementi dalle statistiche calcolate a coordinate specifiche in una tabella di dati salvataGrazie @ron_horne . Penso che questo funzionerebbe. Tuttavia, prima di provare questo sul mio vero problema, ho una domanda. La "Tabella dei risultati" deve essere aperta prima che i valori possano essere trasmessi ad essa?
Nel mio caso, la "Tabella dei risultati" è un file salvato e non avevo intenzione di aprirlo a meno che non fosse possibile passargli dei valori in altro modo.
(Dovrò cambiare il resto del mio codice se devo avere la mia "Tabella dei risultati" aperta nell'istanza quando i valori vengono trasmessi ad essa)
Ri: Passa gli elementi dalle statistiche calcolate a coordinate specifiche in una tabella di dati salvataCiao @Neo
vedi se riesci a estrarre ciò che ti serve da questo script
Names Default To Here( 1 );
// set up a table to accept the results
resultsdt = New Table( "Results Table",
Add Rows( 20 ),
New Column( "Column 1" ),
New Column( "Column 2" ),
New Column( "Column 3" ),
New Column( "Column 4" ),
New Column( "Column 5" ),
New Column( "Column 6" ),
New Column( "Min", Numeric ),
New Column( "Median", Numeric ),
New Column( "Max", Numeric ),
New Column( "SD", Numeric )
);
// Open Data Table: Big Class.jmp
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Launch platform: Distribution
output = Report( dist = dt << Distribution( Continuous Distribution( Column( :height ) ) ) );
// Extract min median max and SD
resultsdt[5, 7] = output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 11 ); // min
resultsdt[5, 8] = output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 6 ); // median
resultsdt[5, 9] = output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 1 ); // max
resultsdt[5, 10] = output[Outline Box( "height" ), Outline Box( "Summary Statistics" ), Number Col Box( 1 )] << get( 2 ); // Std dev.
quando si tratta di estrarre numeri dall'output bisogna stare attenti. I riferimenti corretti alle posizioni possono cambiare se l'output è diverso a causa delle preferenze o semplicemente include più output in una finestra.
facci sapere se funziona.
Ron
Ri: Passa gli elementi dalle statistiche calcolate a coordinate specifiche in una tabella di dati salvataPenso sottoscrizione della tabella di dati può aiutarti in questo
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt[10,3] = "AAAAAAAAAAAAAA";