Suddividi il tuo problema in parti più piccole. Inizia con qualcosa di molto semplice come (la mia sintassi potrebbe non funzionare per JMP14 mentre sto usando JMP17)
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Variability Data/2 Factors Crossed.jmp");
yname = "namechange";
col_name = "Measurement";
var_chart = Variability Chart(
Y(Transform Column(yname, Formula(colname))),
X(:Operator, :part#)
);
Puoi già avere i tuoi problemi con questo tipo di script, ma è molto più facile testare con qualcosa di simile.
Con uno script come questo molto probabilmente ricorrerei all'utilizzo di Eval(EvalExpr()) perché mi consente di fare qualcosa come di seguito (posso vedere l'espressione che verrà valutata se eseguo solo la parte EvalExpr())

Se stai utilizzando Trasforma solo per rinominare la colonna dell'asse Y, potrebbero esserci opzioni più semplici rispetto all'utilizzo di Trasforma colonna.
Dopo aver fatto funzionare quella parte, è ora di iniziare ad affrontare i filtri o il ridimensionamento, ma non farlo contemporaneamente.
Grazie per la risposta. Ho già convalidato individualmente tutti gli altri componenti del codice, quindi non ero preoccupato per la complessità aggiuntiva.
Il primo frammento di codice che hai pubblicato non funziona in JMP14. Il messaggio di errore è "Una colonna di Per gruppo non contiene dati perché tutte le righe presentano valori mancanti o sono escluse.
Ho trovato una soluzione avvolgendo la chiamata alla funzione del grafico di variabilità con Eval(EvalExpr()) e quindi avvolgendo il nome della colonna all'interno della trasformazione in Expr(Name Expr(AsColumn())).
Quanto segue funzionerà in JMP 14
Names Default To Here( 1 );
dt = Open(
"$SAMPLE_DATA/Variability Data/2 Factors Crossed.jmp"
);
yname = "namechange";
col_name = "Measurement";
Variability Chart(
Y( Transform Column( yname, Formula( as column(col_name)) ) ),
X( :Operator, :part# )
);
Molto semplicemente, sto cercando di modularizzare alcuni grafici di variabilità. In totale ci sono 3-4 parametri diversi per cui voglio tracciare questi grafici, quindi devo passare una chiave alla funzione per dirle quale colonna tracciare e lasciare che imposti una gestione specifica di quella colonna. Vale a dire, che tipo di trasformazione deve subire quella colonna come parte dell'operazione di trama.
Il modo in cui ho iniziato è passare una stringa e quindi utilizzare una serie di condizionali per specificare il nome della colonna da trasformare (colname) e quindi lo striong da applicare alla trasformazione (yname).
Ho provato diversi metodi per farlo e, indipendentemente dalla soluzione che utilizzo, non riesco a far funzionare correttamente la trama. L'hardcoding della Y del grafico della variabilità funziona sempre correttamente per i filtri specificati, quindi so che sono presenti dati, ma non riesco proprio a selezionarli utilizzando il mio approccio variabile. Questo è ciò che ho provato finora per la linea Y del grafico var:
- Y( Trasforma Colonna( yname, Formula( Colonna(colname) ) ) ),
- Avviso JMP: argomento non valido (finestra di dialogo)
- Il gruppo non contiene dati perché tutte le righe hanno valori mancanti o sono escluse (finestra di registro)
- Y( Trasforma Colonna( yname, Formula( Colonna(dt,colname) ) ) ),
- Avviso JMP: argomento non valido (finestra di dialogo)
- Il gruppo non contiene dati perché tutte le righe hanno valori mancanti o sono escluse (finestra di registro)
- Y( Trasforma Colonna( yname, Formula( Colonna( Come Colonna(colname)) ) ) ),
- Avviso JMP: colonna non risolta 256 volte (finestra di dialogo)
- "Argomento non valido 256 volte, una colonna o un gruppo non contiene dati perché tutte le righe hanno valori mancanti o sono escluse (log)
- Y( Trasforma Colonna( yname, Formula( Colonna( Come Colonna(dt,colname)) ) ) ),
- Avviso JMP: l'accesso alla tabella dati con ambito richiede una colonna o una variabile della tabella dati 256 volte (finestra di dialogo)
- Argomento non valido 256 volte. Una colonna o un gruppo non contiene dati perché tutte le righe hanno valori mancanti o sono escluse (log)
- Y( Trasforma Colonna( yname, Formula( Come Colonna(colname) ) ) ),
- Avviso JMP: colonna non risolta 267 volte (finestra di dialogo)
- (nessun errore di registro)
- Y( Trasforma Colonna( yname, Formula( Come Colonna(dt,colname) ) ) ),
- Avviso JMP: l'accesso alla tabella dati con ambito richiede una colonna o una variabile della tabella dati 267 volte (finestra di dialogo)
- (nessun errore di registro)
Se non è ovvio dai miei tentativi, non mi è ancora chiaro quale sia la differenza tra As Column() e Column(). Ho visto soluzioni sui forum con entrambi ed entrambi, quindi le ho provate tutte e non sono arrivato da nessuna parte. L'unico indizio che vedo è che quando As Column() viene utilizzato in modo indipendente, ottengo un numero diverso di violazioni di accesso (267) rispetto al caso in cui è racchiuso da Column() (256). So che 267 è il numero "corretto" di righe da restituire da quel filtro perché l'hardcoding del nome della colonna nella formula di trasformazione traccia correttamente 267 righe.
Inoltre ho provato a impostare la variabile colname direttamente sulla colonna (colname = :R e colname = ":R") e varie combinazioni di utilizzo diretto di quelle e/o di avvolgerle in combinazioni di Column() e As Column() funziona anche senza successo.
Qualcuno può vedere cosa sto facendo di sbagliato qui?
Nota: questo codice esatto non è stato testato, i nomi var sono stati genericizzati.
//
// Build plot functions
//
var_chart = Function( {dutname, ytype, stressname, bias, ver},
{chart, ax_min, ax_max, ax_step, len, colname, yname},
<BR /> ax_min = 0;<BR /> ax_max = 1;<BR /> ax_step = 0.1;<BR />
If(ytype == "r", (colname = "R"; yname = "R [Ω]"));<BR /> If(ytype == "l", (colname = "L"; yname = "L [H]"));<BR /> If(ytype == "c", (colname = "C"; yname = "C [F]"));
If(stressname == "s1", len = 1.1);
If(stressname == "s2", len = 2.2);
If(stressname == "s3", len = 3.3);
chart = Variability(
Y( Transform Column( yname, Formula( As Column(colname) ) ) ),
X( :X1, :X2, :X3, :X4 ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
Show Box Plots( 1 ),
<<SET scale=""></SET>