Más sobre la creación de subconjuntosHola, me refiero al post https://communities.sas.com/message/166376#166376 de mayo de este año.
El ejemplo explica cómo crear una nueva tabla de datos 1) primero agregando un filtro de datos y 2) luego subconjuntos:
dt = Abierto (BigClass);
dt << filtro de datos (agregar filtro (columnas (: edad), donde (: edad == {12,13}), Modo (select (1)));
sub1 = dt<
Como resultado, se crea una tabla de datos denominada "regiones". Como se esperaba.
He creado un ejemplo similar usando mi propio conjunto de datos (¡¡el ejemplo de BigClass funciona!!), que no me funciona bien. Sospecho que tengo un malentendido de algo. Aquí está el flujo de mi programa adjunto.
La diferencia entre el ejemplo de BigClass y mi ejemplo es que el filtro de datos no se selecciona cuando ejecuto el script completo. (Omití la carga del archivo desde un archivo de Excel para poder enviarte el código original, que tenía ciertos nombres). Para explicar: hay una columna de caracteres, de la cual quiero seleccionar solo aquellas filas donde el texto de la columna comienza con "d" o "I". Me pareció necesario crear una nueva columna sobre la cual realizar el filtro de datos. Cuando ejecuto el código en total, las filas NO se seleccionan y la tabla de datos subconjuntos no se crea. Si primero ejecuto el código HASTA la creación de la nueva columna, Onelettet, y LUEGO ejecuto el filtro de datos, entonces se crea el filtro y se seleccionan las filas. Y finalmente se crea la tabla de datos del subconjunto. ¿Pero estas cosas deberían suceder de cualquier forma en que se ejecute el script? ¿O?
Esto es fundamental para el uso de secuencias de comandos, por lo que necesito obtener una comprensión profunda de estas sutilezas.
Saludos
Pablo
Re: Más sobre la creación de subconjuntosUsando el código de ejemplo de MS, aquí hay una solución directa que es muy sólida, ya que no requiere que las filas de la tabla de datos cambien al estado seleccionado:
dt = Nueva tabla ( "prueba" ,
Agregar filas ( 5 ) ,
Nueva columna ( "Instr" , Carácter ,
Establecer valores ( { "tambor" , "trompeta" , "lira" , "clarinete" , "didgeridoo" } )
)
);
sel = dt << obtener filas donde ( comienza con ( : instr , "d" ) | comienza con ( : instr , "l" ) ) ;
dt << subconjunto ( nombre de la tabla de salida ( "sel instr" ) , filas ( sel ) , columnas seleccionadas ( 0 ) ) ;
Re: Más sobre la creación de subconjuntosCerrar el filtro de datos es sencillo si le has dado una referencia.
gl = dt << filtro de datos ( ... ) ;
df << cerca ;
Re: Más sobre la creación de subconjuntosHola MS,
añadiendo espera(); después de que la evaluación de la fórmula resuelve el problema de que el filtro no se configura antes de que se ejecute el comando de subconjunto. Gracias.
¿Cuál es el comando para cerrar la ventana del filtro? No quiero que permanezca en la pantalla después del subconjunto. Sólo quiero el conjunto de datos. En realidad no necesito verlo en absoluto.
Y sí, pensé que la selección se podía hacer en una sola declaración. Simplemente no sabía cómo hacerlo.
Gracias
Pablo
Re: Más sobre la creación de subconjuntosEs difícil saber por qué no funciona en un caso particular sin una tabla para probar el código. Si el código depende de fórmulas de columna creadas en el mismo script, he experimentado que la evaluación de la fórmula puede retrasarse con respecto a la ejecución del script, lo que puede generar resultados inesperados. Para evitar esto, se puede intentar insertar la fórmula Wait() o << eval en los pasos críticos.
Sin embargo, en este caso particular, si lo entiendo correctamente, no hay necesidad de una nueva columna (o un filtro de datos). Quizás el siguiente ejemplo pueda ser de ayuda.
//tabla de ejemplo
dt = Nueva tabla ( "prueba" ,
Agregar filas ( 5 ) ,
Nueva columna ( "Instr" , Carácter ,
Establecer valores ( { "tambor" , "trompeta" , "lira" , "clarinete" , "didgeridoo" } )
)
);
// Seleccione instr que comience con d o l usando un filtro de datos
sel = dt << obtener filas donde ( comienza con ( : instr , "d" ) | comienza con ( : instr , "l" ) ) ;
dt << filtro de datos (
agregar filtro ( columnas ( : instr ) , donde ( : instr = : instr [ sel ] ) , modo ( seleccionar ( 1 ) ) )
);
dt << subconjunto ( nombre de la tabla de salida ( "sel instr" ) , filas seleccionadas ( 1 ) , columnas seleccionadas ( 0 ) ) ;
// O un enfoque más directo sin filtro de datos
dt << seleccione dónde ( comienza con ( : instr , "d" ) | comienza con ( : instr , "l" ) ) ;
dt << subconjunto ( nombre de la tabla de salida ( "sel instr" ) , filas seleccionadas ( 1 ) , columnas seleccionadas ( 0 ) ) ;