Seleccionar un número dinámico de columnas con JSL, seleccionando columnas que cumplan una condiciónhttps://www.jmp.com/support/help/14-2/use-set-selected-to-select-columns.shtml
¿Cuál es la mejor manera de reescribir algo como esto?
La intención es que DT sea una combinación de TRANSPOSE y CATEGORY_TABLE.
- CATEGORY_TABLE es una tabla de una columna con categoría de columna
- TRANSPOSE es el resultado de una transposición de datos.
El truco es que TRANSPOSE no siempre tiene el mismo número de columnas. De manera confusa, la salida de la función de transposición nombra las columnas adicionales Fila 1, Fila 2, etc.
- Las dos primeras columnas de TRANSPOSE son siempre iguales.
- La fila de columnas 1 siempre existirá como la tercera columna.
- Es posible que existan columnas de la fila 2 y posteriores según el conjunto de datos.
¿Puedo escribir la función Select() de tal manera que Join() seleccione al menos la columna Fila 1 y luego, si hay más, hasta la última columna?
// This section is only build to handle two columns named Row 1 and Row 2
DT = Data Table( TRANSPOSE ) << Join(
With( Data Table( CATEGORY_TABLE ) ),
Select( :Forecast Material ),
SelectWith( :Category ),
Select( :Row 1, :Row 2 ), // sometimes there is only one row, sometimes there are more than one rows ******How to handle this?********
By Matching Columns( :Label = :Category ),
Drop multiples( 0, 0 ),
Include Nonmatches( 0, 0 ),
Preserve main table order( 1 )
);
Re: Seleccionar un número dinámico de filas con JSL, seleccionando filas que cumplan una condiciónGracias BSwid. Déjame saber cómo funciona.
Re: Seleccionar un número dinámico de filas con JSL, seleccionando filas que cumplan una condiciónGracias Don. Estoy intentando actualizar el código de otra persona. Creo que esto es hacer lo que queremos. Necesita tomar algo de tiempo para validar antes de aceptarlo como solución. No quería que pensaras que no vi ni aprecié tu respuesta. Estuve trabajando con esta sugerencia ayer. ¡Gracias!Re: Seleccionar un número dinámico de filas con JSL, seleccionando filas que cumplan una condiciónElimine los argumentos con "Seleccionar" en ellos:
DT = Data Table( TRANSPOSE ) << Join(
With( Data Table( CATEGORY_TABLE ) ),
By Matching Columns( :Label = :Category ),
Drop multiples( 0, 0 ),
Include Nonmatches( 0, 0 ),
Preserve main table order( 1 )
);
Los resultados contendrán todas las columnas de ambas tablas.
Re: Seleccionar un número dinámico de filas con JSL, seleccionando filas que cumplan una condiciónIntenté algo como esto y obtuve el error Columna no encontrada {1} en el acceso o evaluación de 'Argumento incorrecto'
Lo que imagino es el argumento dentro de Select() dentro de Join() .
Pensé que tal vez podría asignar un vector de columnas a una variable y usar la variable como argumento en Select().
// Get a list of the column names
colList = TRANSPOSE << Get Column Names();
// Starting with column 3, select
For(i=3,i<= N Cols( TRANSPOSE ), i++, COLUMN( TRANSPOSE , colList[i]) << Set Selected(1) ) ;
// Assign those selected columns to a variable
Select_cols = TRANSPOSE << Get Selected Columns();
//then feed that variable into the Select() withing Join()
<SPAN class="token comment">// UNIRSE</SPAN>
DT <SPAN class="token operator">=</SPAN> <SPAN class="token function">Tabla de datos</SPAN><SPAN class="token punctuation">(</SPAN> TRANSPOSE <SPAN class="token punctuation">)</SPAN> <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages">Unirse</SPAN><SPAN class="token punctuation">(</SPAN>
With<SPAN class="token punctuation">(</SPAN> <SPAN class="token function">Tabla de datos</SPAN><SPAN class="token punctuation">(</SPAN> CATEGORY_TABLE <SPAN class="token punctuation">)</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN>
Select<SPAN class="token punctuation">(</SPAN> <SPAN class="token punctuation">:</SPAN>Forecast Material <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN>
SelectWith<SPAN class="token punctuation">(</SPAN> <SPAN class="token punctuation">:</SPAN>Category <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN>
Select<SPAN class="token punctuation">(</SPAN> Select_cols <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN> /// was Select<SPAN class="token punctuation">(</SPAN> <SPAN class="token punctuation">:</SPAN>Row <SPAN class="token number">1</SPAN><SPAN class="token punctuation">,</SPAN> <SPAN class="token punctuation">:</SPAN>Row <SPAN class="token number">2</SPAN> <SPAN class="token punctuation">)</SPAN>
By Matching Columns<SPAN class="token punctuation">(</SPAN> <SPAN class="token punctuation">:</SPAN>Label <SPAN class="token operator">=</SPAN> <SPAN class="token punctuation">:</SPAN>Category <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN>
Drop multiples<SPAN class="token punctuation">(</SPAN> <SPAN class="token number">0</SPAN><SPAN class="token punctuation">,</SPAN> <SPAN class="token number">0</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN>
Include Nonmatches<SPAN class="token punctuation">(</SPAN> <SPAN class="token number">0</SPAN><SPAN class="token punctuation">,</SPAN> <SPAN class="token number">0</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN>
Preserve main table order<SPAN class="token punctuation">(</SPAN> <SPAN class="token number">1</SPAN> <SPAN class="token punctuation">)</SPAN>
<SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>