Combinación de datos de varias tablasEstoy intentando crear una nueva tabla maestra combinando datos de dos tablas (o más). Por ejemplo, estoy intentando combinar las tablas A y B a continuación en la tabla AB, como resultado:



Básicamente, las tablas A y B tienen columnas similares en "inicio" y "fin", pero un rango diferente para cada fila. Lo que intento hacer es combinar los segmentos desde la distancia inicial 1 hasta la 20 de ambas tablas y combinarlos en la tabla AB.
¿Alguna idea de cómo hacer esto a través de scripts o de las funciones de Tablas?
Modelado estadístico avanzadoAutomatización y scriptingOrganización de contenidoPersonalización masivaCompartir y comunicar resultadosRe: combinar datos de varias tablasEsto puede dar una idea de cómo podría hacer esto con secuencias de comandos:
Names Default To Here(1);
dt1 = New Table("Table A",
Add Rows(4),
Compress File When Saved(1),
New Column("Start",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([1, 5, 10, 15])
),
New Column("End",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([5, 10, 15, 20])
),
New Column("Name", Character, "Nominal", Set Values({"A", "B", "C", "D"}))
);
dt2 = New Table("Table B",
Add Rows(5),
Compress File When Saved(1),
New Column("Start",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([1, 4, 8, 12, 16])
),
New Column("End",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([4, 8, 12, 16, 20])
),
New Column("Name",
Character,
"Nominal",
Set Values({"X1", "X2", "X3", "X4", "X5"})
)
);
//create collection table
dt_final = New Table("Table A-B",
Compress File When Saved(1),
New Column("Start", Numeric, "Continuous", Format("Best", 12)),
New Column("End", Numeric, "Continuous", Format("Best", 12)),
New Column("Name", Character, "Nominal")
);
For Each Row(dt1,
startVal = Column(dt1, "Start")[Row()];
endVal = Column(dt1, "End")[Row()];
nameVal = Column(dt1, "Name")[Row()];
r_dt2 = dt2 << get rows where(startVal <= :Start <= endVal | startVal <= :End <= endVal);
For(i = 1, i <= N Items(r_dt2), i++,
newEnd = Min(Column(dt2, "End")[r_dt2[i]], endVal);
newName = nameVal || " " ||Column(dt2, "Name")[r_dt2[i]];
newRow = EvalList({startVal, newEnd, newName});
dt_final << Add rows({Start = newRow[1], End = newRow[2], Name = newRow[3]});
startVal = newEnd;
endVal= Max(Column(dt2, "End")[r_dt2[i]], endVal);
);
);
Close(dt1, no save);
Close(dt2, no save);Re: combinar datos de varias tablasTambién puede abordar esto con la versión de JSL de una búsqueda de tabla, usando Loc Sorted ().
Salud,
Brady
Names Default To Here( 1 );
dt1 = New Table( "Table A",
Add Rows( 4 ),
Compress File When Saved( 1 ),
New Column( "Start", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 5, 10, 15] ) ),
New Column( "End", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [5, 10, 15, 20] ) ),
New Column( "Name", Character, "Nominal", Set Values( {"A", "B", "C", "D"} ) )
);
dt2 = New Table( "Table B",
Add Rows( 5 ),
Compress File When Saved( 1 ),
New Column( "Start", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 4, 8, 12, 16] ) ),
New Column( "End", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [4, 8, 12, 16, 20] ) ),
New Column( "Name", Character, "Nominal", Set Values( {"X1", "X2", "X3", "X4", "X5"} ) )
);
//////////// Begin processing here...
ends = Matrix( Associative Array( Concat( As List( dt1:End << get values ), As List( dt2:End << get values ) ) ) << get keys );
starts = [1] |/ ends[1 :: (N Row( ends ) - 1)];
dt3 = As Table( starts || ends, <<COLUMN names=""></COLUMN>Re: combinar datos de varias tablas@jthi Y @brady_brady Gracias por las respuestas. Estoy seguro de que las soluciones funcionaron, pero quiero digerirlas primero y responderé aquí si cumplen con mi intención. ¡Agradezco la ayuda! Mantenerlo informado.
Re: combinar datos de varias tablasDespués de pensarlo un poco, encontré una manera de hacerlo de forma interactiva. En lugar de describirlo, he adjuntado un breve video que hice en el que se analiza el proceso. El enfoque interactivo tiene la ventaja de que es la misma cantidad de trabajo (que no es mucho) sin importar cuántas tablas desee combinar. En mi ejemplo, utilizo 3. La desventaja es que requiere una clasificación no intuitiva; si comete un error al ordenar, obtendrá resultados incorrectos.
Ejecute este script para generar las tablas que uso en el ejemplo:
Names Default To Here(1);
dta = new table("A",
<<ADDROWS></ADDROWS>