Unir conjuntos de datos jmp iguales por bucle (secuencias de comandos)Tengo 100 conjuntos de datos estructuralmente idénticos. Todos ellos contienen una ID y una constante / campo, que contiene un nombre de ese conjunto de datos.
Concatenarlos (formato "largo") es fácil.
Ahora necesito fusionarlos en formato "ancho", ¿es igual de fácil?
Pienso en usar esa constante como prefijo para cada conjunto de datos JMP, pero ¿cómo podría hacer que eso funcione en un bucle?
¿Tienes alguna sugerencia?
Muchas gracias y saludos cordiales
Novato
Re: Unir conjuntos de datos jmp iguales por bucle (scripting)No tengo exactamente claro cómo desea que se vea su tabla de datos de salida, sin embargo, aquí hay un ejemplo simple que combinará tablas de datos, similar a la estructura de su descripción.
Names Default To Here( 1 );
// Create example data tables to be used in the merging
dt = Open( "$SAMPLE_DATA/Blood Pressure.jmp" );
dt << delete columns( {"Subject", "Dose"} );
dt << New Column( "ID", character, formula( "A" || Char( Row() ) ) );
dt << Go To( :ID );
dt << Move Selected Columns( To First );
For( i = 2, i <= N Cols( dt ), i++,
current data table(dt);
dt2 = dt << subset( selected rows( 0 ), columns( :ID, Column( i ) ) );
dt2 << New Column("Table Name", character, set each value(dt2<<GET name=""></GET>Re: Unir conjuntos de datos jmp iguales por bucle (scripting)Por alguna razón, mi publicación del viernes por la tarde parecía perderse ...
Ese es el precio que paga cuando trabaja en un tren, o eso parece.
Tengo 100 conjuntos de datos, cada uno contiene una constante diferente:
p.ej
Conjunto de datos1
ID VALOR CONSTANTE1 VALOR2
1 A 123 123
2 A 123 123
Conjunto de datos2
1 B 456 456
2 B 456 456
Conjunto de datos3
1 C 789 789
2 C 789 789
todo lo que quiero es ponerlos en un solo conjunto de datos con la siguiente estructura:
A_ID A_CONSTANT A_VALUE1 A_VALUE2 B_ID B_CONSTANT B_VALUE1 B_VALUE2
1 A 123 123 1 B 456 456
2 A 123 123 2 B 456 456 etc.
Veo dos formas de llegar allí:
(1) agregue un prefijo a cada columna individual dentro de cada conjunto de datos primero y luego combínelos por ID, o
(2) contatente todos los conjuntos de datos primero y luego transponerlos / voltearlos / recorrerlos usando los niveles constantes como prefijo (sin embargo, descubrí que a JMP no le gustan los tipos de datos mixtos)
Alguna idea de cómo llegar ... ?
Cualquier ayuda muy apreciada
Novato
Re: Unir conjuntos de datos jmp iguales por bucle (scripting)Aquí hay una revisión de mi guión original, teniendo en cuenta la nueva información que proporcionó.
También es posible que desee considerar el uso de su tabla de datos contaminados y
Tablas ==> Dividir
Puede acercarte mucho a lo que quieres
Names Default To Here( 1 );
// Create example data tables to be used in the merging
dt = Open( "$SAMPLE_DATA/Blood Pressure.jmp" );
constants = "ABCDEFGHIJKLMNOP";
dt << delete columns( {"Subject", "Dose"} );
dt << New Column( "ID", character, formula( Char( Row() ) ) );
dt << Go To( :ID );
dt << Move Selected Columns( To First );
For( i = 2, i <= N Cols( dt ), i++,
Current Data Table( dt );
dt2 = dt << subset( selected rows( 0 ), columns( :ID, Column( i ) ) );
Column( dt2, 2 ) << set name( "Value1" );
dt2 << New Column( "Value2", formula( Floor( :Name( "Value1" ) + Random Integer( 5 ) ) ) );
dt2 << New Column( "Constant", character, set each value( Substr( constants, i - 1, 1 ) ) );
);
Wait( 0 );
Close( dt, nosave );
// Merge the tables together
// Get the table Names
tableList = {};
For( i = 1, i <= N Table(), i++,
Insert Into( tableList, Data Table( i ) << get name )
);
theConstant = Column( Data Table( tableList[N Items( tableList )] ), "Constant" )[1];
Data Table( tableList[N Items( tableList )] ) << New Column( theConstant || "_ID", character, formula( :ID ) );
Column( Data Table( tableList[N Items( tableList )] ), "Value1" ) << set name( theConstant || "_Value1" );
Column( Data Table( tableList[N Items( tableList )] ), "Value2" ) << set name( theConstant || "_Value2" );
// Loop across the tables and using Update put them back together
For( i = N Items( tableList ) - 1, i >= 1, i--,
theConstant = Column( Data Table( tableList[i] ), "Constant" )[1];
Data Table( tableList[i] ) << New Column( theConstant || "_ID", character, formula( :ID ) );
Column( Data Table( tableList[i] ), "Value1" ) << set name( theConstant || "_Value1" );
Column( Data Table( tableList[i] ), "Value2" ) << set name( theConstant || "_Value2" );
Data Table( tableList[N Items( tableList )] ) << Update( With( Data Table( tableList[i] ) ), Match Columns( :ID = :ID ) );
);
Re: Unir conjuntos de datos jmp iguales por bucle (scripting)No puedo imaginar lo que representan los conjuntos de datos o para qué sirve el conjunto de datos combinado resultante. Esa información podría ayudarnos a resolver mejor su problema. Si los conjuntos de datos tienen una estructura idéntica y solo contienen constantes repetitivas, me parece que hay estructuras de datos y métodos de datos más eficientes para su problema.
Entonces, ¿qué vas a hacer en JMP con el conjunto de datos combinado?
Re: Unir conjuntos de datos jmp iguales por bucle (scripting)Hola tx
No tengo acceso a JMP en este momento (estoy viajando) pero el resultado debería verse así.
Ahora, mirando la estructura yo mismo, creo que concatenar, luego voltear / recorrer la tabla contactada puede ser un enfoque sencillo (los ID no son tan importantes). Sin embargo, todavía me gustaría saber si esto podría resolverse mediante un bucle (macro) más simple.
Archivo1:
ID de valor constante
1 AB 123
2 AB 456
Archivo2:
ID de valor constante
1 DEF 123
2 DEF 456
...
File100:
ID de valor constante
1 Z 123
2 Z 456
"Loop" por CONSTANT
Resultado deseado
AB_ID AB_Constant AB_Value DEF_ID DEF_ Constante DEF_Value ... Z_ID Z_ Constante Z_Valor
1 AB 123 1 DEF 123 ... 1 Z 123
2 AB 456 2 DEF 456 ... 2 Z 123