JSL: cómo iterar sobre Bivariado y guardar todas las splines en 1 columnaHola.He creado una serie de cadenas que contienen los distintos valores que se encuentran en una de mis columnas. Me gustaría generar una spline para cada valor que se encuentra en mi conjunto de cadenas y guardar todos los puntos previstos en una nueva columna.Puedo iterar sobre Bivariate(), cambiando una cláusula donde con cada iteración a un nuevo valor en mi conjunto de cadenas; sin embargo, solo los últimos puntos pronosticados se guardan en una nueva columna.¿Cómo consigo que todos los puntos previstos se guarden en una nueva columna?Gracias.
Proc = "new";
processArray = {};
DataCV=open("C:\Desktop\JMP\sample_data.csv");
for (l = 1, l < 32521, l++, // Generate array of strings
if (proc == (Row()=l; :process),
print("same process"),
Insert Into(processArray, (Row()=l; :process)); proc = (Row()=l; :process); Show(proc)
);
);
for (n = 1, n <= length(processArray), n++, // Generate and save multiple predicteds
biv = Bivariate(
Y( :c_mm_deembed_pf ),
X( :v_dut_volt ),
Where( :c_type == "Cdg" & :process == processArray[n] ),// :process == processArray[n] appears to be working, as 6 splines are generated
Fit Spline( 0.1, standardized, {save predicteds}) // {save predicteds} is not saving all 6 splines, only last spline
);
); 

Re: JSL - Cómo iterar sobre Bivariado y guardar todas las splines en 1 columnaPruebe la función By() para obtener todas las predicciones en la misma columna. Entonces no es necesaria la iteración sobre una lista y la fórmula de predicción generada aplicará automáticamente declaraciones condicionales para separar los diferentes valores de la columna. La principal diferencia es que todos los gráficos compartirán la misma ventana.
DataCV = Open("C:\Desktop\JMP\sample_data.csv");
DataCV << biv = Bivariate(
Y(:c_mm_deembed_pf),
X(:v_dut_volt),
By(:process),
Where(:c_type == "Cdg"),
Fit Spline(0.1, Standardized, {Save Predicteds})
);Re: JSL - Cómo iterar sobre Bivariado y guardar todas las splines en 1 columna@txnelson ,
Ups. No vi esta publicación posterior y respondí una pregunta anterior usando Eval Expr en lugar de Substitute.
No quise duplicar una respuesta.
Lo siento, Jim.
Re: JSL - Cómo iterar sobre Bivariado y guardar todas las splines en 1 columnaY pensé nuevamente en la fórmula Predicha para la columna Predicha y me di cuenta de que el proceso que estás utilizando se escribirá uno encima del otro a medida que se procesen.Le sugiero que cambie el nombre de la columna Prediced después de cada ejecución de bivariado, lo que obligará a que cada iteración termine creando una nueva columna.
Re: JSL - Cómo iterar sobre Bivariado y guardar todas las splines en 1 columnaAquí hay una versión reelaborada y comentada de su guión.Pruébalo.Creo que funcionará con sus datos.No pude hacer un buen trabajo de prueba, pero cualquier error debería ser menor.
Names Default To Here( 1 );
Proc = "new";
processArray = {};
DataCV = Open( "C:\Desktop\JMP\sample_data.csv" );
// In the commented area is a reworked version of your code that I believe
// simplifies the syntax of what you were doing. Please review it and see
// what changes I made.
/*for (l = 1, l <= N Rows(DataCV) , l++, // Generate array of strings
if (proc == :process[l],
print("same process")
,
Insert Into(processArray, :process[l]);
proc = :process[l];
Show(proc)
);
);*/
// The summarize() function is a much faster way to get the values found for
// a spcific column or combination of columns
Summarize( DataCV, processArray = By( :process ) );
For( n = 1, n <= Length( processArray ), n++, // Generate and save multiple predicteds
// I found that using a JSL variable in the where clause was having issues, because the formula
// created for the Predicted values contains a reference to PredictedArray, which JSL Variable can change,
// which makes the formula invalid. So what needs to be done, is to subsitute the actual value for
// predictedArray[n] into the Where Clause
Eval(
Substitute(
Expr(
biv = Bivariate(
Y( :c_mm_deembed_pf ),
X( :v_dut_volt ),
Where( :c_type == "Cdg" & :process == __process__ ), // :process == processArray[n] appears to be working, as 6 splines are generated
Fit Spline( 0.1, standardized, {save predicteds} ) // {save predicteds} is not saving all 6 splines, only last spline
)
),
Expr( __process__ ), processArray[n]
)
)
);