FALTA EL NÚMERO, etc.Tengo el siguiente fragmento de JSL que verifica la lista My_Graphs para determinar si la iésima fila es un número o no y hace una de dos cosas (la columna 6 consta de números y "."). La primera parte del IF funciona: establece el mínimo del gráfico en 1,2 LCL y dibuja el gráfico. Sin embargo, si el LCL es "." no establece el LCL en 0. Inmediatamente debajo están las primeras 6 filas de la columna 6.
.
0,25
-2
-0.018
.
0,25
si ( Es número ( número ( Mis_gráficos [ 6 ][ i ])) ,
( Trama << despacho (
{ "Gráfico de variabilidad para..." } ,
"2" ,
Caja de escala ,
{ mín. ( número ( Mis_gráficos [ 6 ][ i ]) * 1.2 ) ,
Agregar línea de referencia ( número ( Mis_gráficos [ 6 ][ i ]) , Punteado , "Rojo" , "LCL = " || Mis_gráficos [ 6 ][ i ] , 2 ) ,
Mostrar cuadrícula principal ( 1 )})
) ,
( Trama << despacho (
{ "Gráfico de variabilidad para..." } ,
"2" , Caja de escala , { mín. ( 0 )})
)
) ; //terminara si
Re: FALTA EL NÚMERO, etc.Gracias por su aporte. Supongo que no estaba un poco claro en mi última respuesta, pero una vez que convertí las cadenas de la lista a num, la función Falta se comportó como se esperaba.
Re: FALTA EL NÚMERO, etc.
@karmstro escribió:
Cuando ejecuto el siguiente código obtengo:
Para ( i = 1 , i <= número , i ++,
espectáculo ( Mis_gráficos [ 6 ][ i ]) ;
) ;
Mis_gráficos[6][i] = ".";
Mis_gráficos[6][i] = "0,25";
Mis_gráficos[6][i] = "-2";
Mis_gráficos[6][i] = "-0.018";
Mis_gráficos[6][i] = ".";
Las comillas indican que sus valores son cadenas de caracteres . Como tal, necesitarás convertirlos a números usando el Núm() función para utilizar el Está perdido() función.
Entonces debería ser:
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
Lo cual es muy parecido a lo que tenías originalmente.
Alternativamente, puede comparar con la cadena de texto "." como esto:
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
Re: FALTA EL NÚMERO, etc.Kev: charlemos sobre esto en el trabajo... Pero creo que veo tu problema.
JMP trata un número faltante como un número. Entonces, cuando ejecuta el código siguiente, devuelve "Es un número" para cada elemento de num_list.
lista_núm = { . , 0,25 ,- 2 ,- 0,018 , . , 0,25};
para (yo= 1 ,yo<= nitems (lista_núm),i++, si ( Es número (lista_núm[i]), Imprimir ( "Es un número" ), Imprimir ( "No es un número" )) );
Lo que le sugiero que haga en su lugar es cambiar su condición if para manejar primero la que falta, seguida de su número y luego alguna expresión de captura.
lista_núm = { . , 0,25 ,- 2 ,- 0,018 , . , 0,25 };
para (yo= 1 ,yo<= nitems (lista_núm),i++, si ( Está perdido (lista_núm[i]), Imprimir ( "Esta perdido" ), Es número (lista_núm[i]), Imprimir ( "Es un número" ), Imprimir ( "No sé qué hacer ahora" )));
Re: FALTA EL NÚMERO, etc.Cuando ejecuto el siguiente código obtengo:
Para ( i = 1 , i <= número , i ++,
espectáculo ( Mis_gráficos [ 6 ][ i ]) ;
) ;
Mis_gráficos[6][i] = ".";
Mis_gráficos[6][i] = "0,25";
Mis_gráficos[6][i] = "-2";
Mis_gráficos[6][i] = "-0.018";
Mis_gráficos[6][i] = ".";
Cuando ejecuto el siguiente código obtengo:
Para ( i = 1 , i <= número , i ++,
espectáculo ( Está perdido ( Mis_gráficos [ 6 ][ i ])) ;
) ;
Falta(Mis_gráficos[6][i]) = 0;
Falta(Mis_gráficos[6][i]) = 0;
Falta(Mis_gráficos[6][i]) = 0;
Falta(Mis_gráficos[6][i]) = 0;
Falta(Mis_gráficos[6][i]) = 0;
Cuando ejecuto el siguiente código obtengo:
Para ( i = 1 , i <= número , i ++,
espectáculo ( Está perdido ( número ( Mis_gráficos [ 6 ][ i ]))) ;
) ;
Falta(Num(My_Graphs[6][i])) = 1;
Falta(Num(My_Graphs[6][i])) = 0;
Falta(Num(My_Graphs[6][i])) = 0;
Falta(Num(My_Graphs[6][i])) = 0;
Falta(Num(My_Graphs[6][i])) = 1;
Parece que hay que convertir las cadenas de la lista a num para la función Falta.
Re: FALTA EL NÚMERO, etc.¿Le estoy pasando valores de una lista creada con Resumir que son valores citados?
Re: FALTA EL NÚMERO, etc.Sabemos que la función Falta() funciona. Por ejemplo:
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] = .;
Entonces debe ser algo con los datos/valores que le estás pasando. Es por eso que el Show() que sugerí anteriormente será de ayuda.
Tal vez deberías poner un "Mostrar()" de depuración en la cláusula else de If() también para mostrar si entró allí o no.
Re: FALTA EL NÚMERO, etc.Parece que no evalúa la condición falsa de !Is Missing pero no hay ningún error.
Actualiza el mínimo y agrega la línea del gráfico cuando hay un valor, pero no establece el mínimo en 0 para una condición falsa de if.
Re: FALTA EL NÚMERO, etc.Cuando dices que no funciona, ¿a qué te refieres exactamente? ¿Estás obteniendo un error? ¿El gráfico está actualizado incorrectamente? ¿De nada?
¿Puedes agregar un
Show (My_Graphs [6][i]);
justo antes de su condicional para ver cuál es el valor?
Re: FALTA EL NÚMERO, etc.¿Esto debería funcionar entonces pero no es así?
si ( ! Está perdido ( Mis_gráficos [ 6 ][ i ]) ,
( Trama << despacho (
{ "Gráfico de variabilidad ..." } ,
"2" ,
Caja de escala ,
{ mín. ( número ( Mis_gráficos [ 6 ][ i ]) * 1.2 ) ,
Agregar línea de referencia ( número ( Mis_gráficos [ 6 ][ i ]) , Punteado , "Rojo" , "LCL = " || Mis_gráficos [ 6 ][ i ] , 2 ) ,
Mostrar cuadrícula principal ( 1 )})
) ,
( Trama << despacho (
{ "Gráfico de variabilidad ..." } ,
"2" , Caja de escala , { mín. ( 0 )})
)
) ; //terminara si
Re: FALTA EL NÚMERO, etc.
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") = .;
Los valores faltantes son números y requieren que la función isMissing los pruebe. Una comparación con un valor faltante arroja valores faltantes, no 0 o 1, incluso si faltan ambos valores.