convertir columnas en filas
datos y resultados deseados
Realmente agradecería su ayuda
Ingeniería de Calidad y ProcesosCompartir y comunicar resultadosRe: Script JSL para transponer columnas a filasgracias jim
Re: Script JSL para transponer columnas a filasError mío....por error, la última entrada que les envié no tenía mis modificaciones. Edité mi última respuesta y actualicé el JSL. Vuelva atrás, extraiga el JSL y ejecútelo. Ahora contiene el código corregido.Re: Script JSL para transponer columnas a filasGracias Jim, pero sigo teniendo el mismo error con el script actualizado por algunas razones.

Re: Script JSL para transponer columnas a filasEl problema era que uno o más de los parámetros se ingresaban como datos de caracteres.Transpose no puede manejar datos mixtos.Así que agregué una verificación para asegurarme de que todos los parámetros detectados sean numéricos.
Names Default To Here( 1 );
dt = Current Data Table();
// Transpose the Demographics
dtTrans1 = dt << Transpose(
columns( :SBIN, :HBIN, :Alarms, :Device, :Site ),
Transpose selected rows only( 1 ),
Output Table( "Transpose 1" )
);
// Change the name of the first column
dtTrans1:Label << set name( "Column 1" ) << Set Display Width( 150 );
// Change the new column names
For( i = 2, i <= N Cols( dtTrans1 ), i++,
Column( dtTrans1, i ) << set name( "Column " || Char( i + 4 ) ) << Set Display Width( 100 )
);
// Change the detail name of the Alarms
dtTrans1:Column 1[(dtTrans1 << get rows where( dtTrans1:Column 1 == "Alarms" ))[1]] = "Pass/Fail/Alarm";
// Create the Devce values
deviceRow = (dtTrans1 << get rows where( dtTrans1:Column 1 == "Device" ))[1];
For( i = 2, i <= N Cols( dtTrans1 ), i++,
Column( dtTrans1, i )[deviceRow] = i - 1
);
// Now Find all of the columns that are parameters
parameterColNamesList = {};
For( i = 1, i <= N Cols( dt ), i++,
If( Is Missing( Num( Word( 1, Column( dt, i ) << get name, ":" ) ) ) == 0 &
Column( dt, i ) << get modeling type == "Continuous",
Insert Into( parameterColNamesList, Column( dt, i ) << get name )
)
);
// Transpose the parameter columns
dtTrans2 = dt << Transpose(
columns( Eval( parameterColNamesList ) ),
Transpose selected rows only( 0 ),
Output Table( "Transpose 2" )
);
// Add in the new columns to be created
dtTrans2 << Add Multiple Columns( "Column", 5, before first, Character );
// Add the columns 2-5 in the trans data table
dtTrans1 << Add Multiple Columns( "xColumn", 4,after(:Column 1), Character );
for(i=2,i<=5,i++,
column(dtTrans1,i)<<SET name=""></SET>Re: Script JSL para transponer columnas a filasAqui hay uno
Re: Script JSL para transponer columnas a filasEl mensaje de error que se muestra indica que la tabla de datos a la que apunta "dtTrans2" no se está creando."dtTrans2" se crea a partir de Transpose(), que requiere una lista de parámetros de su tabla de datos original.El "parameterColNamesList" se crea buscando todas las columnas en la tabla de datos original que comienzan con un número seguido de ":".Sospecho que sus parámetros no tienen ese nombre en su tabla de datos original.Pero sin ver la tabla de datos, sólo estoy adivinando.Si lo que supongo es cierto, entonces es necesario encontrar algo que identifique las columnas de parámetros.
Re: Script JSL para transponer columnas a filashola jim
Todavía encuentro problemas con otra tabla de datos por algunas razones. Verifiqué el tipo de datos y me aseguré de que todos sean iguales. pero no esta funcionando

Re: Script JSL para transponer columnas a filasgracias jim
Re: Script JSL para transponer columnas a filasEsta tabla de datos de muestra tiene un problema con la columna Dispositivo.Está configurado como tipo de datos de carácter.Si lo cambia a Numérico, el script funciona bien.
Re: Script JSL para transponer columnas a filasEjecuté el script con el subconjunto de datos de muestra que proporcionó, se ejecutó sin errores y produjo una tabla de datos transpuesta.Encontré un pequeño problema: los nombres de las pruebas no contenían el nombre completo de la tabla de datos de entrada.Pero aparte de eso, parece haber funcionado correctamente.

Aquí está el JSL corregido.
Names Default To Here( 1 );
dt = Current Data Table();
// Transpose the Demographics
dtTrans1 = dt << Transpose(
columns( :SBIN, :HBIN, :Alarms, :Device, :Site ),
Transpose selected rows only( 1 ),
Output Table( "Transpose 1" )
);
// Change the name of the first column
dtTrans1:Label << set name( "Column 1" ) << Set Display Width( 150 );
// Change the new column names
For( i = 2, i <= N Cols( dtTrans1 ), i++,
Column( dtTrans1, i ) << set name( "Column " || Char( i + 4 ) ) << Set Display Width( 100 )
);
// Change the detail name of the Alarms
dtTrans1:Column 1[(dtTrans1 << get rows where( dtTrans1:Column 1 == "Alarms" ))[1]] = "Pass/Fail/Alarm";
// Create the Devce values
deviceRow = (dtTrans1 << get rows where( dtTrans1:Column 1 == "Device" ))[1];
For( i = 2, i <= N Cols( dtTrans1 ), i++,
Column( dtTrans1, i )[deviceRow] = i - 1
);
// Now Find all of the columns that are parameters
parameterColNamesList = {};
For( i = 1, i <= N Cols( dt ), i++,
If( Is Missing( Num( Word( 1, Column( dt, i ) << get name, ":" ) ) ) == 0,
Insert Into( parameterColNamesList, Column( dt, i ) << get name )
)
);
// Transpose the parameter columns
dtTrans2 = dt << Transpose(
columns( Eval( parameterColNamesList ) ),
Transpose selected rows only( 0 ),
Output Table( "Transpose 2" )
);
// Add in the new columns to be created
dtTrans2 << Add Multiple Columns( "Column", 5, before first, Character );
// Add the columns 2-5 in the trans data table
dtTrans1 << Add Multiple Columns( "xColumn", 4,after(:Column 1), Character );
for(i=2,i<=5,i++,
column(dtTrans1,i)<<SET name=""></SET>Re: Script JSL para transponer columnas a filasIgnore el ejemplo anterior, utilice este.
Re: Script JSL para transponer columnas a filasaquí hay una muestra aleatoria de datos
Re: Script JSL para transponer columnas a filasok seguro aquí está
Re: Script JSL para transponer columnas a filasIntente ejecutar el código desde la línea 1 hasta la línea 26. Todo lo que tiene que hacer es seleccionar (resaltar) esas filas en su secuencia de comandos y luego hacer clic en el icono Ejecutar.
Names Default To Here( 1 );
dt = Current Data Table();
// Transpose the Demographics
dtTrans1 = dt << Transpose(
columns( :SBIN, :HBIN, :Alarms, :Device, :Site ),
Transpose selected rows only( 1 ),
Output Table( "Transpose 1" )
);
// Change the name of the first column
dtTrans1:Label << set name( "Column 1" ) << Set Display Width( 150 );
// Change the new column names
For( i = 2, i <= N Cols( dtTrans1 ), i++,
Column( dtTrans1, i ) << set name( "Column " || Char( i + 4 ) ) << Set Display Width( 100 )
);
// Change the detail name of the Alarms
dtTrans1:Column 1[(dtTrans1 << get rows where( dtTrans1:Column 1 == "Alarms" ))[1]] = "Pass/Fail/Alarm";
// Create the Devce values
deviceRow = (dtTrans1 << get rows where( dtTrans1:Column 1 == "Device" ))[1];
For( i = 2, i <= N Cols( dtTrans1 ), i++,
Column( dtTrans1, i )[deviceRow] = i - 1
);
Vea si la tabla de datos de Transposición 1 se ve así:

Corre las líneas 30 - 35.
parameterColNamesList = {};
For( i = 1, i <= N Cols( dt ), i++,
If( Is Missing( Num( Word( 1, Column( dt, i ) << get name, ":" ) ) ) == 0,
Insert Into( parameterColNamesList, Column( dt, i ) << get name )
)
);
y vea si el parámetroColNamesList contiene los nombres de todas las pruebas en la tabla de datos.
Luego sigue revisando las diferentes secciones de código, hasta que encuentres lo que no se está ejecutando correctamente.
Si puede proporcionarme una copia de la tabla de datos que está intentando leer, estaría dispuesto a realizar la verificación yo mismo.
Re: Script JSL para transponer columnas a filasno hay ningún error de registro. Cuando ejecuto el script, simplemente no hace nada. la única diferencia son los nombres de las pruebas... son diferentes. pero todos los demás encabezados son igualesRe: Script JSL para transponer columnas a filas¿Hay algún mensaje de error en el registro?
¿Cuáles son las diferencias entre las 2 tablas de datos?
¿El guión se detiene antes de completarse?
Re: Script JSL para transponer columnas a filasgracias jim! el formato es perfecto. sin embargo, por alguna razón no funciona con otros conjuntos de datos similares. alguna razon por que?
Re: Script JSL para transponer columnas a filasAquí hay una versión corregida del script, que coloca las columnas de especificaciones, etc. en la ubicación correcta y también agrega las etiquetas de las columnas.
Names Default To Here( 1 );
dt = Current Data Table();
// Transpose the Demographics
dtTrans1 = dt << Transpose(
columns( :SBIN, :HBIN, :Alarms, :Device, :Site ),
Transpose selected rows only( 1 ),
Output Table( "Transpose 1" )
);
// Change the name of the first column
dtTrans1:Label << set name( "Column 1" ) << Set Display Width( 150 );
// Change the new column names
For( i = 2, i <= N Cols( dtTrans1 ), i++,
Column( dtTrans1, i ) << set name( "Column " || Char( i + 4 ) ) << Set Display Width( 100 )
);
// Change the detail name of the Alarms
dtTrans1:Column 1[(dtTrans1 << get rows where( dtTrans1:Column 1 == "Alarms" ))[1]] = "Pass/Fail/Alarm";
// Create the Devce values
deviceRow = (dtTrans1 << get rows where( dtTrans1:Column 1 == "Device" ))[1];
For( i = 2, i <= N Cols( dtTrans1 ), i++,
Column( dtTrans1, i )[deviceRow] = i - 1
);
// Now Find all of the columns that are parameters
parameterColNamesList = {};
For( i = 1, i <= N Cols( dt ), i++,
If( Is Missing( Num( Word( 1, Column( dt, i ) << get name, ":" ) ) ) == 0,
Insert Into( parameterColNamesList, Column( dt, i ) << get name )
)
);
// Transpose the parameter columns
dtTrans2 = dt << Transpose(
columns( Eval( parameterColNamesList ) ),
Transpose selected rows only( 0 ),
Output Table( "Transpose 2" )
);
// Add in the new columns to be created
dtTrans2 << Add Multiple Columns( "Column", 5, before first, Character );
// Add the columns 2-5 in the trans data table
dtTrans1 << Add Multiple Columns( "xColumn", 4,after(:Column 1), Character );
for(i=2,i<=5,i++,
column(dtTrans1,i)<<SET name=""></SET>Re: Script JSL para transponer columnas a filasEstoy usando jmp 14
Re: Script JSL para transponer columnas a filas¿Qué versión de JMP estás usando?Re: Script JSL para transponer columnas a filas¡Gracias! esto parece funcionar bien. Pero por alguna razón, las columnas Límite bajo y Límite alto del nombre de la prueba se colocan al final. ¿De alguna manera podemos reorganizarlos y etiquetarlos en el guión?
Re: Script JSL para transponer columnas a filasEl siguiente script es un buen comienzo para crear la tabla de salida que solicitó.
Names Default To Here( 1 );
dt = Current Data Table();
// Transpose the Demographics
dtTrans1 = dt << Transpose(
columns( :SBIN, :HBIN, :Alarms, :Device, :Site ),
Transpose selected rows only( 1 ),
Output Table( "Transpose 1" )
);
// Change the name of the first column
dtTrans1:Label << set name( "Column 1" ) << Set Display Width( 150 );
// Change the new column names
For( i = 2, i <= N Cols( dtTrans1 ), i++,
Column( dtTrans1, i ) << set name( "Column " || Char( i + 4 ) ) << Set Display Width( 100 )
);
// Change the detail name of the Alarms
dtTrans1:Column 1[(dtTrans1 << get rows where( dtTrans1:Column 1 == "Alarms" ))[1]] = "Pass/Fail/Alarm";
// Create the Devce values
deviceRow = (dtTrans1 << get rows where( dtTrans1:Column 1 == "Device" ))[1];
For( i = 2, i <= N Cols( dtTrans1 ), i++,
Column( dtTrans1, i )[deviceRow] = i - 1
);
// Now Find all of the columns that are parameters
parameterColNamesList = {};
For( i = 1, i <= N Cols( dt ), i++,
If( Is Missing( Num( Word( 1, Column( dt, i ) << get name, ":" ) ) ) == 0,
Insert Into( parameterColNamesList, Column( dt, i ) << get name )
)
);
// Transpose the parameter columns
dtTrans2 = dt << Transpose(
columns( Eval( parameterColNamesList ) ),
Transpose selected rows only( 0 ),
Output Table( "Transpose 2" )
);
// Add in the new columns to be created
dtTrans2 << Add Multiple Columns( "Column", 5, before first, Character );
// Add the values to the new columns
For( i = 1, i <= N Rows( dtTrans2 ), i++,
dtTrans2:Column 1[i] = Word( 1, dtTrans2:Label[i], ":" );
dtTrans2:Column 2[i] = Word( 2, dtTrans2:Label[i], ":" );
specs = Column( dt, dtTrans2:Label[i] ) << get property( "spec limits" );
If( Is Missing( specs["LSL"] ) == 0,
dtTrans2:Column 3[i] = specs["LSL"]
);
If( Is Missing( specs["USL"] ) == 0,
dtTrans2:Column 4[i] = specs["USL"]
);
If( Column( dt, dtTrans2:Label[i] ) << get property( "Units" ) != "",
dtTrans2:Column 5[i] = Column( dt, dtTrans2:Label[i] ) << get property( "Units" )
);
);
// Get rid of the label column which is no longer needed
dtTrans2 << delete columns( :Label );
// Change the names of the Trans2 table to match the names in the Trans1 table
For( i = 6, i <= N Cols( dtTrans2 ), i++,
Column( dtTrans2, i ) << set name( "Column " || Char( i ) )
);
// Combine the 2 Transformed data tables
dtFinal = dtTrans1 << concatenate( dtTrans2 );
// Cleanup the no longer needed data tables
close( dtTrans1, nosave );
close( dtTrans2, nosave );