MANCA IL NUMERO ecc.Ho il seguente frammento di JSL che controlla l'elenco My_Graphs per determinare se la i-esima riga è un numero o meno e fa una delle due cose (col 6 è composto da numeri e "."). La prima parte dell'IF funziona: imposta il minimo del grafico a 1,2 LCL e disegna la trama. Tuttavia, se l'LCL è "." non imposta l'LCL su 0. Immediatamente sotto ci sono le prime 6 righe del col 6.
.
0,25
-2
-0,018
.
0,25
Se ( È il numero ( numero ( I miei_grafici [ 6 ][ io ])) ,
( Complotto << spedizione (
{ "Grafico della variabilità per..." } ,
"2" ,
ScaleBox ,
{ minimo ( numero ( I miei_grafici [ 6 ][ io ]) * 1.2 ) ,
Aggiungi linea di riferimento ( numero ( I miei_grafici [ 6 ][ io ]) , Punteggiato , "Rosso" , "LCL = " || I miei_grafici [ 6 ][ io ] , 2 ) ,
Mostra griglia principale ( 1 )})
) ,
( Complotto << spedizione (
{ "Grafico della variabilità per..." } ,
"2" , ScaleBox , { minimo ( 0 )})
)
) ; //finisci se
Ri: MANCA IL NUMERO ecc.Grazie per il tuo contributo. Credo di essere stato un po' poco chiaro nella mia ultima risposta, ma una volta convertite le stringhe dall'elenco in num, la funzione Is Missing si è comportata come previsto.
Ri: MANCA IL NUMERO ecc.
@karmstro ha scritto:
Quando eseguo il seguente codice ottengo:
Per ( io = 1 , io <= numero , io ++,
spettacolo ( I miei_grafici [ 6 ][ io ]) ;
) ;
I Miei_Grafici[6][i] = ".";
I Miei_Grafici[6][i] = "0,25";
I Miei_Grafici[6][i] = "-2";
I Miei_Grafici[6][i] = "-0.018";
I Miei_Grafici[6][i] = ".";
Le virgolette indicano che i tuoi valori lo sono stringhe di caratteri . Pertanto dovrai convertirli in numeri utilizzando il file Numero() funzione per utilizzare il Manca() funzione.
Quindi dovrebbe essere:
if(Is Missing(num(My_Graphs [6][i])),
(Plot << dispatch(
{"Variability Chart for..."},
"2",
ScaleBox,
{Min(num(My_Graphs [6][i]) * 1.2 ),
Add Ref Line( num(My_Graphs [6][i]), Dotted, "Red", "LCL = " || My_Graphs [6][i] , 2 ),
Show Major Grid( 1 )})
),
(Plot << dispatch(
{"Variability Chart for..."},
"2", ScaleBox, {Min(0)})
)
);//end if
Il che è molto vicino a quello che avevi originariamente.
In alternativa, puoi confrontare con la stringa di testo "." come questo:
if(My_Graphs [6][i] == ".",
(Plot << dispatch(
{"Variability Chart for..."},
"2",
ScaleBox,
{Min(num(My_Graphs [6][i]) * 1.2 ),
Add Ref Line( num(My_Graphs [6][i]), Dotted, "Red", "LCL = " || My_Graphs [6][i] , 2 ),
Show Major Grid( 1 )})
),
(Plot << dispatch(
{"Variability Chart for..."},
"2", ScaleBox, {Min(0)})
)
);//end if
Ri: MANCA IL NUMERO ecc.Kev, parliamone al lavoro... Ma penso di capire il tuo problema.
JMP tratta un numero mancante come un numero. Quindi quando esegui il codice seguente restituisce "È un numero" per ogni elemento di num_list.
elenco_num = { . , 0,25 ,- 2 ,- 0,018 , . , 0,25};
per (io= 1 ,i<= nitems (elenco_num),i++, Se ( ÈNumero (num_lista[i]), Stampa ( "È un numero" ), Stampa ( "Non è un numero" )) );
Quello che ti suggerisco di fare invece è cambiare la tua condizione if per gestire prima quella mancante, seguita dal numero is e poi da qualche espressione catch.
elenco_num = { . , 0,25 ,- 2 ,- 0,018 , . , 0,25 };
per (io= 1 ,i<= nitems (elenco_num),i++, Se ( Manca (num_lista[i]), Stampa ( "Manca" ), ÈNumero (num_lista[i]), Stampa ( "È un numero" ), Stampa ( "Non so cosa fare adesso" )));
Ri: MANCA IL NUMERO ecc.Quando eseguo il seguente codice ottengo:
Per ( io = 1 , io <= numero , io ++,
spettacolo ( I miei_grafici [ 6 ][ io ]) ;
) ;
I Miei_Grafici[6][i] = ".";
I Miei_Grafici[6][i] = "0,25";
I Miei_Grafici[6][i] = "-2";
I Miei_Grafici[6][i] = "-0.018";
I Miei_Grafici[6][i] = ".";
Quando eseguo il seguente codice ottengo:
Per ( io = 1 , io <= numero , io ++,
spettacolo ( Manca ( I miei_grafici [ 6 ][ io ])) ;
) ;
Manca(I Miei_Grafici[6][i]) = 0;
Manca(I Miei_Grafici[6][i]) = 0;
Manca(I Miei_Grafici[6][i]) = 0;
Manca(I Miei_Grafici[6][i]) = 0;
Manca(I Miei_Grafici[6][i]) = 0;
Quando eseguo il seguente codice ottengo:
Per ( io = 1 , io <= numero , io ++,
spettacolo ( Manca ( numero ( I miei_grafici [ 6 ][ io ]))) ;
) ;
Manca(Num(My_Graphs[6][i])) = 1;
Manca(Num(My_Graphs[6][i])) = 0;
Manca(Num(My_Graphs[6][i])) = 0;
Manca(Num(My_Graphs[6][i])) = 0;
Manca(Num(My_Graphs[6][i])) = 1;
Sembra che sia necessario convertire le stringhe dell'elenco in num per la funzione Is Missing.
Ri: MANCA IL NUMERO ecc.Sto passando i valori da un elenco creato con Riepiloga quali sono valori tra virgolette?
Ri: MANCA IL NUMERO ecc.Sappiamo che la funzione Is Missing() funziona. Per esempio:
For( i = 1, i <= N Items( x ), i++,
Print( "starting iteration " || Char( i ) );
If( !Is Missing( x[i] ),
Show( x[i] ),
Print( "x is missing" );
Show( x[i] );
);
);<BR />
/*:
"starting iteration 1"
x[i] = 1;
"starting iteration 2"
"x is missing"
x[i] = .;
Quindi deve essere qualcosa con i dati/valori che gli stai passando. Ecco perché Show() che ho suggerito sopra aiuterà.
Forse dovresti inserire un "Show()" di debug anche nella clausola else di If() per mostrare se è entrato o meno.
Ri: MANCA IL NUMERO ecc.Sembra che non valuti la condizione falsa per !Is Missing ma non c'è errore.
Aggiorna il minimo e aggiunge la linea del grafico quando è presente un valore ma non imposta il minimo su 0 per la condizione falsa di if.
Ri: MANCA IL NUMERO ecc.Quando dici che non funziona cosa intendi esattamente? stai ricevendo un errore? Il grafico è aggiornato in modo errato? Affatto?
Puoi aggiungere un
Show (My_Graphs [6][i]);
subito prima del condizionale per vedere qual è il valore?
Ri: MANCA IL NUMERO ecc.Allora dovrebbe funzionare ma non è così?
Se ( ! Manca ( I miei_grafici [ 6 ][ io ]) ,
( Complotto << spedizione (
{ "Grafico della variabilità..." } ,
"2" ,
ScaleBox ,
{ minimo ( numero ( I miei_grafici [ 6 ][ io ]) * 1.2 ) ,
Aggiungi linea di riferimento ( numero ( I miei_grafici [ 6 ][ io ]) , Punteggiato , "Rosso" , "LCL = " || I miei_grafici [ 6 ][ io ] , 2 ) ,
Mostra griglia principale ( 1 )})
) ,
( Complotto << spedizione (
{ "Grafico della variabilità..." } ,
"2" , ScaleBox , { minimo ( 0 )})
)
) ; //finisci se
Ri: MANCA IL NUMERO ecc.
x=.;
show( x, isNumber(1), isNumber(0), isNumber(.), isMissing(0), isMissing(.), if( x==x, "yes", "no") )
x = .;
Is Number(1) = 1;
Is Number(0) = 1;
Is Number(.) = 1;
Is Missing(0) = 0;
Is Missing(.) = 1;
If(x == x, "yes", "no") = .;
I valori mancanti sono numeri e richiedono la funzione isMissing per verificarli. Un confronto con un valore mancante restituisce un valore mancante, non 0 o 1, anche se mancano entrambi i valori.