JMP Tabular por lista de nombres de columnas en JSLHola,
Tengo una tabla y quiero tabularla por columna "estudiante", columna "asignatura" y columna "clase", pero la columna "Asunto" y la columna "clase" no son necesarias para estar disponibles en los datos.
Si tiene la columna "asignatura" pero no la columna "clase", entonces debe tabular por columna "estudiante" y columna "asignatura".
Si tiene la columna "clase" pero no la columna "asignatura", entonces debe tabular por columna "estudiante" y columna "clase".
Si tiene todas las columnas, entonces debe tabular por las tres columnas. A continuación se muestran algunos ejemplos.
Ejemplo 1: (Tiene tanto la columna "asunto" como la columna "clase")
Aporte:
| Clase | Alumno | Marcas | Sujeto |
| 1 | A | 10 | Matemáticas |
| 2 | A | 15 | Ciencia |
| 3 | A | 12 | Ciencia |
| 1 | B | 15 | Matemáticas |
| 2 | B | 12 | Ciencia |
Producción:
| Clase | Alumno | Sujeto | max(marcas) |
| 1 | A | Matemáticas | 10 |
| 2 | A | Ciencia | 15 |
| 3 | A | Ciencia | 12 |
| 1 | B | Matemáticas | 15 |
| 2 | B | Ciencia | 12 |
Ejemplo 2: (Tiene columna "Clase" pero no columna "sujeto")
Aporte:
| Clase | Alumno | Marcas |
| 1 | A | 10 |
| 2 | A | 15 |
| 3 | A | 12 |
| 1 | B | 15 |
| 2 | B | 12 |
Producción:
| Clase | Alumno | max(marcas) |
| 1 | A | 10 |
| 2 | A | 15 |
| 3 | A | 12 |
| 1 | B | 15 |
| 2 | B | 12 |
Ejemplo 3: (Tiene columna "asunto" pero no columna "clase")
Aporte:
| Alumno | Marcas | Sujeto |
| A | 10 | Matemáticas |
| A | 15 | Ciencia |
| A | 12 | Ciencia |
| B | 15 | Matemáticas |
| B | 12 | Ciencia |
Producción:
| Alumno | Sujeto | max(marcas) |
| A | Matemáticas | 10 |
| A | Ciencia | 15 |
| B | Matemáticas | 15 |
| B | Ciencia | 12 |
Porfavor ayudame a resolver este problema.
Gracias
Re: JMP Tabular por lista de nombres de columna en JSLGracias @tsnelsonRe: JMP Tabular por lista de nombres de columna en JSL¿¿¿Es esto lo que estás buscando???
names default to here(1);
dt=current data table();
// The list of columns to look for
theList={"Class","Student","Subject", "xxxxxx","xxxxxx"};
allColList = dt << get column names(string);
// Remove any columns from theList that are not in the data table
For(i=n items(theList),i>=1, i--,
If(n rows(loc(allColList,theList[i]))==0,
remove from(theList,i,1)
)
);
// Run the tabulate
Tabulate(
Show Control Panel( 0 ),
Add Table(
Column Table( Analysis Columns( :Marks ), Statistics( Max ) ),
Row Table( Grouping Columns( eval(theList) ) )
)
);
Si las diferentes columnas de destino desempeñan funciones distintas de las columnas de agrupación, deberá desarrollar el código que tenga en cuenta las diferentes sintaxis de entrada necesarias.
Re: JMP Tabular por lista de nombres de columna en JSL@txnelson Tengo 5 columnas como Columna "Clase" y Columna "Asunto" que pueden estar presentes en los datos o no. Ahora, para tabular, tengo que dar todas las permutaciones de las condiciones IF y cada una tendría un código de tabulación separado. Hará que el código se vuelva demasiado desordenado.
En cambio, si podemos hacerlo con una sola función Tabular en la que damos toda la lista de columnas y tomará solo aquellas columnas que están disponibles en los datos.
GraciasRe: JMP Tabular por lista de nombres de columna en JSLCondensar el código Tabulate en un conjunto de código haría que el código fuera mucho más complejo.
Cuando dice que tiene muchas más columnas, ¿puede explicar más?
Re: JMP Tabular por lista de nombres de columna en JSL@txnelson Gracias por responder.
¿Podemos resolver este problema con un solo bloque de script tabulado porque en mi conjunto de datos original tengo muchas de esas columnas?Re: JMP Tabular por lista de nombres de columna en JSLEjecute cada uno de los 3 escenarios en una tabla de datos de muestra, guardando cada uno de los scripts de cada ejecución, en una ventana de script.Luego tome cada uno de los scripts apropiados y colóquelos en el siguiente script en la posición designada
names default to here(1);
dt= current data table();
colNames = dt << get column names(string);
// Here is the IF() structure to add in the tabulate code to
If( N Rows(loc(colNames, "Subject" ) ) > 0 & N Rows(loc(colNames, "Class" ) ) > 0,
// Add in the tabulate code that has Student, Subject and Class
,
N Rows(loc(colNames, "Subject" ) ) > 0,
// Add in the tablulate code that has just Student and Subject
,
N Rows(loc(colNames, "Class" ) ) > 0,
// Add in the tablulate code that has just Student and Class
);