Más sobre la creación de subconjuntos<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />hola me refiero a la publicacion https://communities.sas.com/message/166376#166376 desde 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 dividiendo:
dt = Abierto (Clase Grande);
dt << filtro de datos (agregar filtro (columnas (: edad), donde (: edad == {12,13}), Modo (seleccionar (1)));
sub1 = dt<
Como resultado se crea una tabla de datos denominada "regiones". Como se esperaba.
Creé un ejemplo similar usando mi propio conjunto de datos (¡el ejemplo de BigClass funciona!), que no funciona bien para mí. Sospecho que tengo un malentendido de algo. Aquí está mi flujo de programa adjunto.
La diferencia entre el ejemplo de BigClass y mi ejemplo es que el filtro de datos no se selecciona cuando ejecuto todo el script. (Omití cargar el archivo desde un archivo de Excel para poder enviarle 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 en la que realizar el filtro de datos. Cuando ejecuto el código en total, las filas NO se seleccionan y la tabla de datos subdividida 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 manera, ¿cómo se ejecuta 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
poul
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 robusta, ya que no requiere que las filas en la tabla de datos cambien al estado seleccionado:
dt = Nueva tabla ( "prueba" ,
Agregar filas ( 5 ) ,
Nueva columna ( "Instrumento" , Personaje ,
Establecer valores ( { "tambor" , "trompeta" , "lira" , "clarinete" , "digeridoo" } )
)
) ;
sel = dt << obtener filas donde ( Comienza con ( : instrumento , "d" ) | Comienza con ( : instrumento , "yo" ) ) ;
dt << subconjunto ( nombre de la tabla de salida ( "seleccionar 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.
d.f. = dt << filtro de datos ( ... ) ;
d.f. << Cerrar ;
Re: Más sobre la creación de subconjuntosHola MS,
agregando espera(); después de que la evaluación de la fórmula resuelva el problema de que el filtro no se establece antes de que se ejecute el comando de subconjunto. Gracias.
¿Cuál es el comando para cerrar la ventana de filtro? No quiero que permanezca en la pantalla después del subconjunto. Solo 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 declaración. Simplemente no sabía cómo hacerlo.
Gracias
poul
Re: Más sobre la creación de subconjuntosEs difícil decir por qué no funciona en un caso particular sin una tabla para probar el código. Si el código depende de las 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 Esperar() o << fórmula de evaluación 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). Tal vez el siguiente ejemplo pueda ser de ayuda.
// tabla de ejemplo
dt = Nueva tabla ( "prueba" ,
Agregar filas ( 5 ) ,
Nueva columna ( "Instrumento" , Personaje ,
Establecer valores ( { "tambor" , "trompeta" , "lira" , "clarinete" , "digeridoo" } )
)
) ;
// Selecciona instr comenzando con d o l usando un filtro de datos
sel = dt << obtener filas donde ( Comienza con ( : instrumento , "d" ) | Comienza con ( : instrumento , "yo" ) ) ;
dt << filtro de datos (
Añadir filtro ( columnas ( : instrumento ) , dónde ( : instrumento = : instrumento [ sel ] ) , modo ( Seleccione ( 1 ) ) )
) ;
dt << subconjunto ( nombre de la tabla de salida ( "seleccionar instr" ) , filas seleccionadas ( 1 ) , columnas seleccionadas ( 0 ) ) ;
// O un enfoque más directo sin filtro de datos
dt << selecciona donde ( Comienza con ( : instrumento , "d" ) | Comienza con ( : instrumento , "yo" ) ) ;
dt << subconjunto ( nombre de la tabla de salida ( "seleccionar instr" ) , filas seleccionadas ( 1 ) , columnas seleccionadas ( 0 ) ) ;