¿Adjuntar filas no duplicadas (ID de columna única) a una tabla principal sin crear una nueva tabla?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Escenario: necesito agregar archivos de datos de encuestas diarias (que incluyen todos los días anteriores) a una tabla principal con solo registros de identificación de encuestados no duplicados y sin crear una nueva tabla (porque no quiero perder las filas seleccionadas en la tabla principal que son oculto o excluido
Dos intentos:
Concatenar mantiene la tabla principal pero trae todos los registros
Join trae solo los nuevos registros pero crea una nueva tabla para que se pierdan las características de la fila (ocultar, excluir)
Re: ¿Adjuntar filas no duplicadas (ID de columna única) a una tabla principal sin crear una nueva tabla?¡¡¡Excelente!!!
Lo que me confundió fue esta línea:
Parse( "Col Min( Row(), :Name(\!"" || Concat Items( dt << obtener nombres de columnas( string ), "\!"), :Name(\!"" ) || "\ !"))" );
No pude entender qué hizo la "Fila ()" en el primer argumento.
Muchas gracias.
Re: ¿Adjuntar filas no duplicadas (ID de columna única) a una tabla principal sin crear una nueva tabla?Hola martin,
Estás en lo correcto.Esas líneas hacen exactamente lo que dedujiste.Agregué algunos comentarios para ayudar a que sea más claro para los demás.
¡Me alegro de que te resulte útil!
Re: ¿Adjuntar filas no duplicadas (ID de columna única) a una tabla principal sin crear una nueva tabla?Así que creo que lo he descubierto.La línea 1 produjo una cadena "Col Min(Fila(), :nombre, :edad, :sexo, :altura, :peso)" que se usará en (2) para determinar el número de fila de una fila anterior donde todas las columnas coinciden .Y, 2 agregará el número de fila de la fila duplicada a una matriz "duplicados".
Esto es bastante inteligente.Me pregunto qué sucede cuando hay triplicados.¿Mantendrá siempre la primera instancia y eliminará la segunda y la tercera?Tendré que probarlo.
¡Gracias robot!
Re: ¿Adjuntar filas no duplicadas (ID de columna única) a una tabla principal sin crear una nueva tabla?Hola Robot, ¿podrías explicar qué hacen estas dos líneas?
Gracias
1. col_min = Parse( "Col Min( Row(), :Name(\!"" || Concat Items( dt << obtener nombres de columnas( string ), "\!"), :Name(\!"" ) || "\!"))" );
2. Para cada fila (Si (col_min! = Fila (), duplicados |/= Fila ()));
Re: ¿Adjuntar filas no duplicadas (ID de columna única) a una tabla principal sin crear una nueva tabla?Hola cdblanco,
Escribí un guión hace un tiempo que puede ayudar.La siguiente secuencia de comandos eliminará las filas duplicadas y conservará la tabla de datos original, incluidas las fórmulas y los estados de las filas.El uso de la función Concatenar seguida de este script puede resolver su problema.
Nombres predeterminados hasta aquí ( 1 );
// Crear tabla de datos y nuevos datos.
dt = Abrir( "$SAMPLE_DATA/Big Class.jmp" );
dt << Seleccionar aleatoriamente (10);
dt2 = dt << Subconjunto ((Filas seleccionadas), Nombre de la tabla de salida ("Nuevos datos"));
dt << Borrar Seleccionar;
dt2 << Add Rows( {:name = "PETER", :age = 14, :sex = "M", :height = 61, :weight = 124} );
// Establece aleatoriamente los estados de las filas en los datos originales.
dt << Seleccionar aleatoriamente ( 10 ) << Ocultar << Excluir << Borrar Seleccionar;
// Agregar nuevos datos.
dt << Concatenar (dt2, Agregar a la primera tabla);
Cerrar (dt2, No Guardar);
// Eliminar filas duplicadas.
dt = Tabla de datos actuales ();
col_min = Parse( "Col Min( Row(), :Name(\!"" || Concat Items( dt << obtener nombres de columnas( string ), "\!"), :Name(\!"" ) || "\!"))" ); // Cree una expresión JSL para determinar el número de fila mínimo por todas las demás columnas.
duplicados = []; // Crear matriz para almacenar filas duplicadas.
Para cada fila (Si (col_min! = Fila (), duplicados |/= Fila ())); // Compara cada fila con la expresión "col_min" anterior.Si la fila actual no coincide con la fila mínima de todas las demás columnas, esa fila se agregará a la matriz "duplicados".
dt << eliminar filas (duplicados); // Eliminar duplicados.
nn = N filas (duplicados);
Nueva ventana ("Eliminar filas duplicadas", <Re: ¿Adjuntar filas no duplicadas (ID de columna única) a una tabla principal sin crear una nueva tabla?
Intenté usar la opción de actualizar la tabla principal, pero aún crea una nueva tabla.
Tabla de datos ( "Original" ) << Unirse (
Con ( Tabla de datos ( "Nuevos datos" ) ) ,
Actualizar ,
Por columnas coincidentes ( : Id. de columna = : Id. de columna ) ,
Soltar múltiplos ( 1 , 1 ) ,
Nombre ( "Incluir no coincidencias" )( 0 , 1 ) ,
Conservar el orden de la mesa principal ( 1 )
);

Re: ¿Adjuntar filas no duplicadas (ID de columna única) a una tabla principal sin crear una nueva tabla?Al realizar una combinación, puede evitar crear una nueva tabla utilizando la opción "actualizar la tabla principal con datos de la segunda tabla".
Re: ¿Adjuntar filas no duplicadas (ID de columna única) a una tabla principal sin crear una nueva tabla?Gracias.Se agregó una nueva columna designada como tipo de datos de estado de fila a la tabla de datos original y luego se usaron las funciones de copia hacia y desde en el menú de estados de fila (haciendo clic en la columna de estado de fila en el cuadro de lista de columna a la izquierda, no en el encabezado de columna real) para copiar y luego vuelva a aplicar los estados de fila después de unirse.La secuencia de comandos para la combinación de anexión de fila para traer solo los nuevos registros de un conjunto de datos de encuesta (e ignorar todos los casos anexados previamente) a la tabla de datos principal:
Tabla de datos( "Conjunto de datos de la encuesta principal" ) << Unirse(
With( Tabla de datos( "Conjunto de datos de la encuesta secundaria") ),
Fusionar columnas con el mismo nombre,
Copie la fórmula de la segunda tabla (0),
Suprimir la evaluación de la fórmula de la tabla principal (0),
Por columnas coincidentes (:ResponseID =:ResponseID),
Soltar múltiplos (0, 0),
Nombre( "Incluir no coincidencias" )(0, 1),
Conservar el orden de la mesa principal( 1 )
)
Después de unir los dos archivos, copió/restauró los estados de fila de la columna de estado de fila usando el menú de estado de fila.Funcionó perfectamente.¡Gracias!
Re: ¿Adjuntar filas no duplicadas (ID de columna única) a una tabla principal sin crear una nueva tabla?Puede realizar operaciones de conjuntos utilizando matrices asociativas.No se pudo encontrar una forma ingeniosa de agregar una tabla a otra.Tuve que analizar los datos usando bucles JSL.
dt_original = Nueva tabla ( "Original" , Agregar filas ( 4 ) ,
Nueva columna ( "ID de columna" , Numérico , Continuo , Formato ( "Mejor" , 12 ) ,
Establecer valores ( [ 1 , 2 , 3 , 4 ] )
) ,
Nueva columna ( "Resultado" , Personaje , Nominal , Establecer valores ( { "a" , "b" , "C" , "d" } ) )
) ;
dt_nuevo = Nueva tabla ( "Nuevos datos" , Agregar filas ( 10 ) ,
Nueva columna ( "ID de columna" , Numérico , Continuo , Formato ( "Mejor" , 12 ) ,
Establecer valores ( [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] )
) ,
Nueva columna ( "Resultado" , Personaje , Nominal ,
Establecer valores ( { "a" , "b" , "C" , "d" , "mi" , "F" , "gramo" , "h" , "i" , "j" } )
)
) ;
// Determinar qué filas hay en la nueva tabla que no están en la anterior
un_original = matriz asociativa ( columna ( dt_original , "ID de columna" )) ;
de nuevo = matriz asociativa ( columna ( dt_nuevo , "ID de columna" )) ;
de nuevo << eliminar ( un_original ) ;
filas_nuevas = de nuevo << conseguir llaves ;
// Tiene que haber una forma más rápida de agregar una tabla a otra en su lugar
no = filas ( dt_original ) ;
no. = artículos ( filas_nuevas ) ;
dt_original << agregar filas ( no. ) ;
para ( i = 1 , i <= ncoles ( dt_original ) , i ++,
una_col = columna ( dt_original , i ) << obtener nombre ;
para ( k = 1 , k <= artículos ( filas_nuevas ) , k ++,
metro = filas_nuevas [ k ] ;
norte = k + no ;
columna ( dt_original , una_col )[ norte ] = columna ( dt_nuevo , una_col )[ metro ] ;
) ;
) ;
Re: ¿Adjuntar filas no duplicadas (ID de columna única) a una tabla principal sin crear una nueva tabla?Encuentro que unir y concatenar tablas es un poco un arte (es decir, prueba y error hasta que obtengo lo que realmente quiero).Sin embargo, recomendaría que busque el tipo de columna "estados de fila" ya que puede guardar todos sus estados de fila actuales (es decir, sus estados de fila ocultos y excluidos) en una columna que puede volver a aplicar según sea necesario a su tabla.