Crea una formula per la variabile temporaneaCiao a tutti,
sono ancora nuovo nello scripting JMP. Ho bisogno di aiuto per creare una formula per rendere il valore come variabile ma con il proprio nome. Quello che voglio dire è come di seguito. Quindi, voglio creare una formula che possa rendere la colonna 4 sotto come variabile per il grafico di distribuzione.
è come Plastica = 0,424542
il problema in questo momento è che il nome della formula sarà nello stesso che è t4 = :TYPE;:MIN;. Quindi, se voglio tracciare il valore minimo per la plastica nel grafico della distribuzione, prenderò il valore minimo per il rock poiché anche la formula per il rock è t4.
quindi, come posso rendere la formula in modo che il valore della variabile diventi
Plastica = :TIPO;:MIN;
Carta = :TIPO;:MIN;
e così via, allora può già essere una variabile indipendente. davvero apprezzato se qualcuno può aiutare su questo. ho guardato in internet già da qualche ora.

Ri: Creare una formula per variabile temporaneaÈ stato un mio errore, ho tralasciato un ")".Prova questo codice
Names Default To Here( 1 );
dt = Current Data Table();
// Only one set of Spec Limits per column can be set,
// therefore split the data into separate columns
// and set the separate limits for each column
dtSplit = dt << Split( Split By( :TYPE ), Split( :NUMERIC_RESULT ), Sort by Column Property );
// Get the names of the generated columns
colList = dtSplit << get column names( string );
// Loop across the columns and create the spec limits for each column
For( i = 1, i <= N Items( colList ), i++,
Eval(
Substitute(
Expr(
__col__ << set property(
"spec limits ",
{LSL( __LSL__ ), USL( __USL__ ), show limits( 1 )}
)
),
Expr( __col__ ), Parse( "dtSplit:" || colList[i] ),
Expr( __LSL__ ),
Eval(
Parse(
"col mean(dtSplit:" || colList[i] || ")-6*col std dev(dtSplit:" || colList[i
] || ")"
)
),
Expr( __USL__ ),
Eval(
Parse(
"col mean(dtSplit:" || colList[i] || ")+6*col std dev(dtSplit:" || colList[i
] || ")"
)
)
)
)
);
// Create a literal string that contains the JSL required to
// generate the Distributions
theExpr = "Distribution(
Arrange in Rows( 1 ),";
theExpr = theExpr || Char(
Substitute(
Expr(
Continuous Distribution(
Column( __col__ ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Normal Quantile Plot( 1 )
)
),
Expr( __col__ ), Parse( "dtSplit:" || colList[1] )
)
);
For( i = 2, i <= N Items( colList ), i++,
theExpr = theExpr || "," || Char(
Substitute(
Expr(
Continuous Distribution(
Column( __col__ ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Normal Quantile Plot( 1 )
)
),
Expr( __col__ ), Parse( "dtSplit:" || colList[i] )
)
);
);
theExpr = theExpr || ");";
// Run the generated code
Eval( Parse( theExpr ) );Ri: Creare una formula per variabile temporaneaCiao Jim,
qui ho allegato la tabella per eseguire il codice che hai fornito con solo qualche modifica. Se esegui lo script che hai scritto qui, il grafico di distribuzione non verrà generato automaticamente.
ho controllato il registro e ho provato a eseguire il debug di ciò che non va, ma sembra che non riesca a trovarlo perché si lamenta che c'è un errore. mi sembra a posto.
l'errore è come di seguito:
Fine imprevista dell'input. Forse manca un "," o ")".
Tentativo di analizzare gli argomenti della funzione "Distribuzione".
Riga 2 Colonna 560: ...Normal Quantile Plot(1));►...
Ri: Creare una formula per variabile temporaneaIl codice che ho fornito dovrebbe generare anche le distribuzioni.
Puoi per favore allegare una copia della tabella dati su cui stai correndo, così posso vedere qual è il problema?... Se guardi nel file di registro, dovresti anche vedere qual è il problema.
Ri: Creare una formula per variabile temporaneaCiao Jim,
Sì, funziona per tutti i valori TYPE nella colonna, ma quando arrivo a tracciare il grafico di distribuzione devo ancora tracciarlo manualmente.
È possibile fare in modo che tracci automaticamente il grafico di distribuzione dopo aver calcolato tutto il limite per tutti i valori di TIPO? ho provato a tracciare manualmente il grafico per esportare lo script, ma sembra che tutto sia codificato nel valore TYPE nella tabella di esempio che ho fornito solo qui.
Anche il valore TYPE sarà diverso di volta in volta. Quindi, devo evitare la riga hardcoded nel JSL.
@txnelson
Ri: Creare una formula per variabile temporaneaIl codice che ho scritto dovrebbe funzionare con tutti i valori TYPE che trova nella tabella dei dati.In caso contrario, si tratta di un errore e il codice deve essere corretto.
Ri: Creare una formula per variabile temporaneaIl codice che ho fornito dovrebbe funzionare per tutti i valori TYPE che trova nella tabella dei dati.
Ri: Creare una formula per variabile temporaneaCiao Jim,
quello che voglio dire è che dopo aver calcolato tutti i limiti, traccerà direttamente il grafico di distribuzione per tutti i valori di TIPO insieme al limite calcolato. Quindi, sto pensando di farlo usando lo script, ma quando provo a esportare lo script dopo aver tracciato tutto il grafico di distribuzione TYPE sembra che tutto il grafico di tipo sia codificato solo nella tabella corrente.
Significa che se ho un nuovo elemento per la colonna TYPE, non traccerà il grafico di distribuzione. Traccerà solo quei 4 elementi solo nella colonna del tipo.
Spero che questo risponda alla tua domanda. fammi sapere se hai bisogno di ulteriori chiarimenti su questo. Grazie!Ri: Creare una formula per variabile temporanea@mhalwi
Potresti spiegare cosa intendi per " tracciare automaticamente il grafico di distribuzione "?Si desidera che JMP esegua il grafico quando si apre una nuova tabella di dati?Oppure si desidera che JMP riconosca quando sono disponibili nuovi dati su un sistema?
Ri: Creare una formula per variabile temporaneaCiao Jim,
molte grazie! anche il tuo metodo funziona alla grande. Qualche possibilità di tracciare automaticamente il grafico di distribuzione utilizzando JSL anziché scegliere manualmente di tracciare il grafico?Ri: Creare una formula per variabile temporaneaCIAO @giuliano ,
entrambe le soluzioni funzionano alla grande!! grazie a te!
1 domanda per quanto riguarda il metodo alt ho bisogno di tracciare manualmente il grafico dopo che la tabella è stata divisa. Esiste un metodo per tracciare il grafico di distribuzione per tutte le colonne poiché il valore della colonna TYPE cambierà sempre?
Grazie ancora per il vostro aiuto!!
Ri: Creare una formula per variabile temporaneaEcco un approccio diverso all'output che stai tentando di generare... sfrutta la capacità di JMP di avere i limiti di specifica come proprietà della colonna e che la piattaforma di distribuzione li riconosca e li utilizzi all'interno del piattaforma
Names Default To Here( 1 );
dt = Current Data Table();
// Only one set of Spec Limits per column can be set,
// therefore split the data into separate columns
// and set the separate limits for each column
dtSplit = dt << Split( Split By( :TYPE ), Split( :NUMERIC_RESULT ), Sort by Column Property );
// Get the names of the generated columns
colList = dtSplit << get column names( string );
// Loop across the columns and create the spec limits for each column
For( i = 1, i <= N Items( colList ), i++,
Eval(
Substitute(
Expr(
__col__ << set property(
"spec limits ",
{LSL( __LSL__ ), USL( __USL__ ), show limits( 1 )}
)
),
Expr( __col__ ), Parse( "dtSplit:" || colList[i] ),
Expr( __LSL__ ),
Eval(
Parse(
"col mean(dtSplit:" || colList[i] || ")-6*col std dev(dtSplit:" || colList[i
] || ")"
)
),
Expr( __USL__ ),
Eval(
Parse(
"col mean(dtSplit:" || colList[i] || ")+6*col std dev(dtSplit:" || colList[i
] || ")"
)
)
)
)
);
// Create a literal string that contains the JSL required to
// generate the Distributions
theExpr = "Distribution(
Arrange in Rows( 1 ),";
theExpr = theExpr || Char(
Substitute(
Expr(
Continuous Distribution(
Column( __col__ ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Normal Quantile Plot( 1 )
)
),
Expr( __col__ ), Parse( "dtSplit:" || colList[1] )
)
);
For( i = 2, i <= N Items( colList ), i++,
theExpr = theExpr || "," || Char(
Substitute(
Expr(
Continuous Distribution(
Column( __col__ ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Normal Quantile Plot( 1 )
)
),
Expr( __col__ ), Parse( "dtSplit:" || colList[i] )
)
);
);
theExpr = theExpr || ";";
// Run the generated code
Eval( Parse( theExpr ) );Ri: Creare una formula per variabile temporaneaCIAO @mhalwi ,
Vedo esattamente cosa stai cercando di fare adesso. Se inserisci il seguente jsl dopo aver creato la tua tabella di riepilogo, avrai variabili per LSL e USL denominate per ogni livello di Tipo (script completo allegato qui, LSL USL - Original method.jsl):
For Each Row(Eval(Parse(Concat("LSL_",:Type," = ",Char(lower_limit)))));
For Each Row(Eval(Parse(Concat("USL_",:Type," = ",Char(upper_limit)))));
Ora, quando chiami Distribution per ciascuno dei tipi e crei le tue linee di riferimento, aggiungi il nome del tipo a LSL e USL. Ad esempio, in Dispatch per "Carta":
Dispatch(
{
"Distributions TYPE=Paper",
"NUMERIC_RESULT"},
"1",
ScaleBox,
{Min(-0.6 ), Max( 1.2 ), Inc( 0.001 ), Minor Ticks( 0 ),
Add Ref Line( USL_Paper, Solid, "Medium Dark Red", "", 2 ),
Add Ref Line( LSL_Paper, Solid, "Medium Dark Red", "", 2 )}
)
Questo mi ha fatto pensare, però.Saresti aperto a un modo leggermente diverso di realizzare questo? Un altro modo per farlo è se dividi la tua tabella originale, possiamo impostare LSL e USL come proprietà della colonna tramite jsl. Quindi, quando chiami Distribution() i limiti possono essere tracciati automaticamente. JSL per questo è anche allegato (LSL USL - Alt method.jsl).
Questo aiuta?
@giuliano
Ri: Creare una formula per variabile temporaneaCiao a tutti,
CIAO @uday_guntupalli E @giuliano ,
qui ho allegato la tabella di esempio e lo script jmp in modo che voi ragazzi possiate provare e avere un'idea di cosa sto cercando di ottenere qui. Basta cambiare il percorso alla tabella dei dati nel tuo computer.
Come puoi vedere nello script, c'è una formula (USL e LSL) nel riepilogo per la tabella dei dati.
Quindi, quello che devo fare adesso è creare un'altra formula che possa prendere il valore di USL per la plastica e così via e assegnarla per diventare qualcosa come Plastic_USL = 0.4. Quindi posso utilizzare la variabile (Plastic_USL) per tracciare il grafico di distribuzione della plastica utilizzando la funzione sendToReport. quindi, lo stesso vale per l'altro elenco di elementi nella colonna TIPO.
non posso usare direttamente la variabile USL perché se la uso prenderà solo l'ultimo valore USL calcolato che è ROCK e lo traccerà in tutto il grafico (Plastic, Cotton, Paper, Rock). Quindi la riga per USL sarà corretta solo per 1 grafico e sbagliata per il resto.
Ho cercato un modo per farlo, ma non riesco ad arrivare da nessuna parte e ho davvero bisogno dell'aiuto di voi ragazzi qui. L'aiuto di voi ragazzi è davvero apprezzato qui!
dt = Open ("C:\*\data_table.csv");
Distribution(
Stack( 1 ),
Continuous Distribution(
Column( :NUMERIC_RESULT ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Count Axis( 1 ),
Normal Quantile Plot( 1 )
),
By( :TYPE );
);
Summary(
Group(:TYPE ),
Mean( :NUMERIC_RESULT ),
Std Dev( :NUMERIC_RESULT )
);
New Column( "lower_limit",
Numeric,
Continuous,
Format( "Best", 8 ),
Formula(
LSL = :Name( "Mean(NUMERIC_RESULT)" ) - 6 *:Name( "Std Dev(NUMERIC_RESULT)" )
),
);
New Column( "upper_limit",
Numeric,
Continuous,
Format( "Best", 8 ),
Formula(
USL = :Name( "Mean(NUMERIC_RESULT)" ) + 6 *:Name( "Std Dev(NUMERIC_RESULT)" )
),
);
wait (1);
dr = Fit Group (
Distribution(
Stack( 1 ),
Continuous Distribution(
Column( :NUMERIC_RESULT ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Count Axis( 1 ),
Normal Quantile Plot( 1 )
),
By( :TYPE )
);
SendToReport(Dispatch({"Distributions TYPE=Cotton","NUMERIC_RESULT"},"1",ScaleBox,
{Min( LSL - 1 ), Max( USL + 1 ), Inc( 0.005 ), Minor Ticks( 1 ),
Add Ref Line( LSL, Solid, "Medium Dark Red", "", 2 ),
Add Ref Line( USL, Solid, "Medium Dark Red", "", 2 )}
)
);
SendToReport(
Dispatch(
{
"Distributions TYPE=Paper",
"NUMERIC_RESULT"},
"1",
ScaleBox,
{Min(-0.6 ), Max( 1.2 ), Inc( 0.001 ), Minor Ticks( 0 ),
Add Ref Line( USL, Solid, "Medium Dark Red", "", 2 ),
Add Ref Line( LSL, Solid, "Medium Dark Red", "", 2 )}
)
);
SendToReport(
Dispatch(
{
"Distributions TYPE=Plastic",
"NUMERIC_RESULT"},
"1",
ScaleBox,
{Min( 0.1 ), Max( 0.4 ), Inc( 0.005 ), Minor Ticks( 0 ),
Add Ref Line( USL, Solid, "Medium Dark Red", "", 2 ),
Add Ref Line( LSL, Solid, "Medium Dark Red", "", 2 )}
)
);
SendToReport(
Dispatch(
{
"Distributions TYPE=Rock",
"NUMERIC_RESULT"},
"1",
ScaleBox,
{Min( 0.01 ), Max( 3.5 ), Inc( 0.01 ), Minor Ticks( 0 ),
Add Ref Line( USL, Solid, "Medium Dark Red", "", 2 ),
Add Ref Line( LSL, Solid, "Medium Dark Red", "", 2 )}
)
);
)<<REPORT></REPORT>
Ri: Creare una formula per variabile temporaneaCIAO @mhalwi ,
Non sono sicuro di cosa stai chiedendo esattamente, ma ho due ipotesi, quindi spero che una sia giusta!
Prima ipotesi: stai cercando di costruire una formula che restituisca una colonna con il testo del tipo, quindi un segno di uguale, quindi il valore nella colonna min? La seguente formula in una colonna formula lo farà:
Concat(:Type," = ",Char(:Min))
e restituire una tabella come questa:
Ho allegato la tabella di esempio nel caso possa essere d'aiuto.
Seconda ipotesi: vuoi impostare nuove variabili, denominate per le celle nella colonna type, sui valori nella colonna min. O detto diversamente, vuoi valutare il testo nella colonna 4 della tabella sopra. Se è quello che stai cercando (e hai creato questa tabella) puoi eseguire il seguente jsl:
For Each Row(Eval(Parse(:Column 4)));
Ma creare quella colonna solo per valutarla probabilmente non è l'approccio più parsimonioso. Se questo è ciò che stai cercando di fare, quanto segue imposterà quelle variabili senza creare quella colonna formula:
For Each Row(Eval(Parse(Concat(:Type," = ",Char(:Min)))))
Spero che una di queste due risposte aiuti!
@giuliano
Ri: Creare una formula per variabile temporanea@mhalwi ,
Non sono sicuro di aver capito cosa stai cercando di fare. Tuttavia, cercherò di spiegare in base a ciò che ho capito.
Di seguito è mostrata la mia interpretazione di ciò che stai cercando di fare. Traccia essenzialmente una distribuzione dei tuoi dati per poter vedere il minimo del tuo tipo. Presumo che il grafico mostrato di seguito lo raggiunga.
Se questo non è ciò che stai cercando, saresti così gentile da fornire alcuni screenshot di ciò che stai cercando di fare - fatto in Excel - in modo che la comunità possa aiutarti verso ciò che stai cercando di ottenere?
