Declaraciones condicionales, acción y eliminación de columnas.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola, todos,
Tengo un problema con un script JSL y he buscado una respuesta en la documentación, los libros y los foros de usuarios.
Escribí un script que contenía una declaración condicional en JSL y uno de los "resultados" es realizar una acción como eliminar una fila.¿Se puede hacer esto en una declaración condicional?
Usemos este código de muestra:
NE3=3;
NE4=5;
/* Estas variables pueden tomar diferentes valores. */
Si (NE3==NE4,
NuevoNum = NE3,
NewNum = índice (NE3, NE4)
);
Si (NuevoNum == 0,
Imprimir ("Sin eliminación"),
Tabla de datos actual () << eliminar columna (NewNum)
);
Como puede ver o adivinar, no puedo eliminar columnas.Más importante aún, usé la primera declaración condicional porque quería que creara un rango o un valor único.
Sin embargo, no estoy seguro de qué hacer con 0 como valor, ya que JMP no puede eliminar algo que no existe (también conocido como columna 0).¡Cualquier sugerencia será muy apreciada!
Muchas gracias,
k
Re: Declaraciones condicionales, acciones y borrado de columnasIndex() da un vector de columna, de ahí los corchetes dobles. Intenta transponer la matriz.
DC_Lista1 = como lista ( transponer ( Índice ( DC1 , DC2 ))) ;
DC_List2 = como lista ( transponer ( Índice ( DC3 , DC4 ))) ;
Re: Declaraciones condicionales, acciones y borrado de columnasHe estado trabajando más con las declaraciones condicionales y eliminar columnas.Jugué un poco más con él, y veo lo que quiere decir acerca de eliminar columnas tomando un solo nombre de columna o índice o una lista de nombres de columna o índices.Sin embargo, después de ejecutar el código dado y simplemente aislar para la acción de eliminar columna y crear una lista de índices, todavía no puedo eliminar un rango completo de índices para columnas.Por ejemplo:
Digamos que el dt tiene 13 columnas y quiero eliminar las tres primeras (1-3) y las dos últimas (12-13).
DC1 = 1 ;
DC2 = 3 ;
DC3 = 12 ;
DC4 = 13 ;
DC_Lista1 = como lista ( Índice ( DC1 , DC2 )) ;
DC_List2 = como lista ( Índice ( DC3 , DC4 )) ;
DC_Lista3 = DC_Lista1 || DC_List2 ;
Tabla de datos actual () << borrar columnas ( dc_list3 ) ; /* Solo elimina la primera columna b/c que es el valor de la primera variable. */
/* Para borrar incluso una sola de las listas creadas, todavía falla. */
tabla de datos actual () << borrar columnas ( dc_list1 ) ; /* Solo elimina la primera columna b/c que es el valor de la primera variable. */
Espectáculo ( dc_list1 ) ; /*dc_list1 = {{1, 2, 3}}; */
Espectáculo ( dc_list3 ) ; /* dc_list3 = {{1, 2, 3}, {12, 13}}; */
Sé que la función "Como lista" convierte la matriz en una lista, pero no entiendo por qué le da corchetes dobles.Creo que eso es lo que está descartando mi código para esto.He intentado numerosas combinaciones en vano.¿Alguna idea/sugerencia/ayuda?¡Muchas gracias de antemano por su ayuda!
Re: Declaraciones condicionales, acciones y borrado de columnas¡Ninguna crítica en absoluto!lo pedíConsidero que esto me ayuda a mí (y a la comunidad de JMP) con sugerencias y a trabajar en los detalles más finos.Aprendí mucho, y agradezco que se haya tomado el tiempo para responder mis preguntas y enseñarme esos puntos importantes más finos.
Re: Declaraciones condicionales, acciones y borrado de columnasPuede ejecutar una declaración o 1000 en una declaración condicional.Puede realizar declaraciones procesables en una declaración condicional, como se muestra en mi código.
Su sintaxis era incorrecta en algunos aspectos.
Si (NE3==NE4,
NuevoNum = NE3,
NewNum = índice (NE3, NE4)
);
El resultado de esta declaración IF es que newnum es un número o una matriz.Esto está bien, pero quizás sea un poco confuso, ya que newnum se usa para dos tipos diferentes de valores (número y matriz).Pero esto causará problemas con la próxima instrucción IF, como se muestra a continuación.
Si (NuevoNum == 0,
Imprimir ("Sin eliminación"),
Tabla de datos actual () << eliminar columna (NewNum)
);
Aquí es realmente donde radica el problema.Newnum solo será 0 si NE3 y NE4 son 0. Si obtiene una matriz de la instrucción IF anterior (cuando NE3 no es igual a NE4), entonces la comparación de NewNum con 0 no tiene sentido.Finalmente, su declaración de columna de eliminación solo funcionará si newnum es un número entero o una lista.Entonces, la declaración AS LIST es esencial.
Espero que esto ayude, esto pretende ser una crítica constructiva.
Tuve muchas dificultades cuando aprendí JSL por primera vez, ¡especialmente con la instrucción IF!Desarrollé un estilo que incluye comentarios que muestran dónde están las partes THEN y ELSE de la declaración.Por ejemplo:
si ( elección_de_tiempo == 1 ,
// después
cláusula_de_fecha = "Actual" ;
lista_de_casos = { 1 , 2 , 3 , 4 } ;
// más
,
cláusula_de_fecha = "Acumulativo" ;
lista_de_casos = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 } ;
) ;
Re: Declaraciones condicionales, acciones y borrado de columnas¡Gracias por tu ayuda!Realmente lo aprecio.Una pregunta que es fundamental para la declaración condicional: ¿puede realizar acciones (es decir, eliminar y/o agregar columnas, filas, dt) en una declaración condicional?No entiendo por qué el código no eliminó las columnas especificadas.¿Fue solo porque me faltaba la función como lista de mi declaración de ejemplo? ¿O mi sintaxis estaba mal?Todavía estoy aprendiendo todos los entresijos de los condicionales en JSL, y veo que usaste punto y coma para "pegar" algunas expresiones.¡Gracias de nuevo!
Re: Declaraciones condicionales, acciones y borrado de columnasEsto es un poco complicado.Eliminar columnas toma un solo nombre de columna o índice, o un lista de nombres de columna o índices.Este programa hará el truco.Nota la COMO LISTA función que convierte una matriz en una lista:
NE3 = 3 ;
NE4 = 5 ;
/* Estas variables pueden tomar diferentes valores. */
dt = tabla de datos actual () ;
Carolina del Norte = ncoles ( dt ) ;
si ( ne3 > 0 & ne3 <= Carolina del Norte & ne4 > 0 & ne4 <= Carolina del Norte ,
Si ( NE3 == NE4 ,
dt << eliminar columna ( ne3 ) ;
,
lista nueva = como lista ( Índice ( NE3 , NE4 )) ;
dt << eliminar columna ( lista nueva ) ;
) ;
) ;