¿Cómo reemplazar filas vacías hasta la próxima entrada (y continuar)?Estimada comunidad JMP,
(W10, 64 bits, JMP 15.0 Pro)
Tengo una tabla de datos grande que se importa de un archivo de Excel y necesito tener filas vacías de una columna llena con las entradas de la lista anterior. Estoy tratando de escribir JSL para pasar de una columna de la izquierda a la de la derecha, como se muestra a continuación:

Estoy pensando que debería ser bastante fácil de codificar, pero el problema que tengo es detenerme correctamente al final del producto anterior y comenzar con el nuevo producto. No debo estar recorriendo correctamente.
Cualquier sugerencia/ayuda es bienvenida.
¡Gracias!,
SD
Re: ¿Cómo reemplazar filas vacías hasta la próxima entrada (y continuar)?Un par de ingenieros de sistemas de JMP estaban dando vueltas y vueltas sobre este problema y esta era la mejor solución. Esta versión final de @Brady Brady es más rápida y robusta que la fórmula simple con la que comenzamos. Lo he estado usando durante años y descubrí que funciona bien en varias situaciones. ¡Gustoso de trabajar para ti!
Re: ¿Cómo reemplazar filas vacías hasta la próxima entrada (y continuar)?Hola @Byron_JMP ,
Gracias por el código de ajuste de secuencias de comandos en su publicación anterior. Esta es mejor que mi solución porque verifica si falta la primera entrada en la columna y, de ser así, la reemplaza con la siguiente entrada existente, que he encontrado que sucede en un par de importaciones que introduzco. No tengo experiencia con algunas de las soluciones de secuencias de comandos allí, como la forma en que usa la información de vec y matrix para buscar ciertas cosas. De todos modos, lo apliqué a mi problema específico y lo solucionó sin contratiempos.
¡Gracias!,
SD
Re: ¿Cómo reemplazar filas vacías hasta la próxima entrada (y continuar)?No puedo encontrar la función JSL o el mensaje que realiza la misma operación. No creo que exista. Hay una función Main Menu() pero este comando está asociado con la columna seleccionada, no con el menú principal de JMP.
Re: ¿Cómo reemplazar filas vacías hasta la próxima entrada (y continuar)?No conozco el código JSL detrás de la solución interactiva. Eso debería estar bien ya que tienes múltiples opciones allí.
Sé que la solución interactiva, como algunos de los scripts, se puede aplicar a varias columnas simultáneamente. Simplemente seleccione todas las columnas y haga clic derecho, elija la opción Rellenar.
Re: ¿Cómo reemplazar filas vacías hasta la próxima entrada (y continuar)?Estas son algunas notas de JSL que lo ayudarán si está escribiendo la solución.
//better version of Fill in Missing Cells, by Brady Brady
Names Default To Here( 1 );
dt = Current Data Table();
dtcollist = dt << get column names;
dlg = Dialog( "Select Column", vlist( selection = List Box( dtcollist ), button( "OK" ) ) );
Remove From( dlg, 2 );
Eval List( dlg );
dtMat = (dt << Get All Columns As Matrix);
For( i = 1, i <= N Items( selection ), i++,
colNum = Contains( dtColList, Name Expr( selection[i] ) );
vMat = dtMat[0, colNum];
mis = Loc( Is Missing( vMat ) );
If( N Row( mis ),
col = column(selection[i]);
If( mis[1] == 1,
col[1] = col[(Loc( vMat ))[1]]
);
For( j = if(mis[1]==1, 2, 1), j <= N Row( mis ), j++,
col[mis[j]] = col[mis[j] - 1]
);
);
);
///////////////////////////// short tweak for scripting
dtcollist=dtnr<<GET column="" names=""></GET>
Re: ¿Cómo reemplazar filas vacías hasta la próxima entrada (y continuar)?hay un complemento realmente fantástico, imprescindible llamado herramientas de tablas de datos
hay una herramienta de interpolación que hace esto y mucho más. Además, es mucho más rápido que las fórmulas de las tablas grandes.

Re: ¿Cómo reemplazar filas vacías hasta la próxima entrada (y continuar)?Hola @Dan_Obermiller ,
Gracias por el aviso sobre eso. He visto el patrón Llenar hasta el final, hasta la fila o de relleno, pero no antes.
¿Conoces el código JSL que hace eso? La razón por la que pregunto es que quiero todo esto en código JSL porque estoy leyendo varios archivos para crear una tabla de datos grande y necesito automatizar el proceso para que el usuario final simplemente ejecute el script y salga su tabla sin valores faltantes para el producto. Si es más rápido y más elegante que mi solución, me gustaría modificar el código e insertarlo en mi secuencia de comandos.
¡Gracias!,
SD
Re: ¿Cómo reemplazar filas vacías hasta la próxima entrada (y continuar)?Tiene un script que hará el trabajo, pero también hay una solución interactiva. Seleccione la columna que necesita el reemplazo para que se seleccionen todas las filas. Haga clic con el botón derecho en la cuadrícula de datos de esa columna y elija Rellenar > Reemplazar lo que falta con el valor anterior.

Re: ¿Cómo reemplazar filas vacías hasta la próxima entrada (y continuar)?Hola @Thierry_S ,
Su fórmula probablemente funcionaría, pero no pude hacer que funcionara de manera ideal con la tabla particular que tengo. Un problema que encontré es que a veces tengo varias filas una tras otra donde cambia el Producto y el retraso no funciona.
Se me ocurrió este código, que funciona perfectamente. No es muy elegante, ¡pero funciona!
¡Gracias por tu ayuda!,
SD
RowReplace = dt << Get Rows Where( :Product != "" );
RowEnd = RowReplace;
Remove From( RowEnd, RowEnd[1] );
Insert Into( RowEnd, N Rows( dt ) );
For( l = 1, l <= N Items( RowReplace ), l++,
For( irow = 2, irow <= RowEnd[l], irow++,
If( Is Missing( :Product[irow] ) == 1,
:Product[irow] = :Product[RowReplace[l]],
)
)
);
Re: ¿Cómo reemplazar filas vacías hasta la próxima entrada (y continuar)?Hola, aquí hay una fórmula simple para hacer el truco.
If( Is Missing( :Column 1 ),
Lag( :Column 2, 1 ),
:Column 1
)
Mejor,
TS