Automazione del diagramma di controllo con più colonne di data e colonne di datiCiao,
Sto cercando di automatizzare un modo per creare grafici di controllo da una tabella formattata come di seguito,
| Motore | 314-Date | 314-Parametro 1 | 314-parametro 2 | 314-Parametro ect. | 213 parametro 1 | 213-data | 241 parametro 1 | 241-parametro 2 | 241-Date |
| # | Data | # | # | # | # | Data | # | # | Data |
| # | Data | # | # | # | # | Data | # | # | Data |
Ho questo codice che mi avvicina a quello che voglio.
Rcols = dt << GetColumnNames( Continuous, String );
nw = New Window( "Control Charts", myVLB = V List Box() );
For( i = 1, i <= N Items( Rcols ), i++,
cc = Control Chart(
Sample Label( Column( dt, Rcols[1] ) ),
KSigma( 3 ),
Chart Col( Column( dt, Rcols[i] ), Levey Jennings )
);
myVLB << Append( Report( cc ) );
cc << close window;
);
Tuttavia, il problema ora sta cercando di trovare un modo per rendere l'etichetta di esempio la data corretta per l'ID dei parametri. Non ci sono quantità uguali di parametri per ciascun ID, quindi la tabella non è uniforme in questo modo, il che rende anche questo un po 'più difficile.
Grazie!
Ri: Automazione del diagramma di controllo con più colonne di data e colonne di datiSignifica che l'elemento che stai tentando di inserire non è un elenco. In questo codice:
a=3;
insert into(c,a)
si otterrà l'errore, dal momento che la variabile "c" non è stata sfidata come una lista.
Ri: Automazione del diagramma di controllo con più colonne di data e colonne di datiHey Jim, penso che questo sia davvero vicino a quello di cui ho bisogno. Sto ottenendo un errore che è:
Può essere inserito solo in un valore L in accesso o valutazione di 'Inserisci in'
Potresti far luce su ciò che significa?
Grazie
Ri: Automazione del diagramma di controllo con più colonne di data e colonne di datiJim, pubblicato prima che io finissi la mia soluzione ... ancora. Il mio approccio è quasi lo stesso, ma mi piace usare una funzione creata per lavorare con liste che riducono molto codice. La funzione che chiamo Lfunc (list, expr), esegue l'espressione su ogni elemento nell'elenco. [Questo è stato per molto tempo elemento della lista dei desideri JMP].
Quindi la terza riga nella JSL qui sotto restituisce [2, 7, 10] per l'esempio che hai fornito. Per ognuna di queste colonne ottengo il codice e la riga che inizia con "params =" restituisce tutte le colonne (non contenenti la data) che iniziano con quel codice.
A parte un approccio alternativo e desidero di nuovo una funzione JMP integrata come Lfunc (), ho notato che stai creando grafici di controllo inattivi e forse questo è il tuo obiettivo. Se desideri grafici interattivi "live", per l'evidenziazione e la guida del passaggio del mouse, vedi il codice commentato nel file allegato FindColumns_CC.jsl
dt=current data table();
Rcols = dt << GetColumnNames(String ); //get all coumns so the code can use the column number
dateCols = Loc(Matrix(Lfunc(RCols, Expr(Contains(Lowercase(x),"date"))))); //2,7,10
nw = New Window( "Control Charts", myVLB = V List Box() );
for(i=1, i<=nrow(dateCols), i++,
code = Trim(word(1, Rcols[dateCols[i]], "-"));
params = Loc(Matrix(Lfunc(RCols, Expr(StartsWith(x,code) & !Contains(lowercase(x),"date")) )));
Ri: Automazione del diagramma di controllo con più colonne di data e colonne di datiCredo di capire la tua domanda. Ho adottato l'approccio, per trovare tutti i gruppi nei dati e per creare un elenco separato di colonne presenti in ciascuno degli elenchi. Quindi, i gruppi vengono fatti scorrere su di essi e ciascuna delle colonne in quell'elenco viene elaborata. Non ho una tabella dati per testare la mia soluzione, quindi credo che il codice dovrebbe essere usato come una buona guida su come risolvere il problema problema, ma non dovrebbe essere considerata una soluzione definitiva
Rcols = dt << GetColumnNames( Continuous, String );
// Process the columns into group and separate lists for each group
groupList = {};
For( i = 2, i <= N Items( Rcols ), i++,
theGroup = Word( 1, Rcols[i], "-" );
// Check if the group has been seen before
If( Contains( groupList, theGroup ) > 0,
// If this is a new group, create a list to hold the column names
Eval( Parse( "Group_" || theGroup || " = {};" ) );
// Add the group name to the groupList
Insert Into( groupList, theGroup );
// Add the current parameter to the new group list
Insert Into( "Group_" || theGroup, Rcols[i] );
,
// If this isn't a new group list, then add it to the
// already existing group list
Insert Into( "Group_" || theGroup, Rcols[i] )
);
);
// Create the display window
nw = New Window( "Control Charts", myVLB = V List Box() );
// Loop across the groups
For( group = 1, group <= N Items( groupList ), group++,
// Set a standard list name to have the values of the current Group_list
Eval( Parse( "tempRcols = Group_" || groupList[group] || ";" ) );
// Generate the charts
For( i = 2, i <= N Items( tempRcols ), i++,
cc = Control Chart(
Sample Label( Column( dt, tempRcols[1] ) ),
KSigma( 3 ),
Chart Col( Column( dt, tempRcols[i] ), Levey Jennings )
);
myVLB << Append( Report( cc ) );
cc << close window;
);
);