Agregar múltiples columnas por scriptsHola,
Me pregunto si agregar varias columnas en la tabla de datos definida. Si la columna ya existió, entonces el script podría ignorar la columna y continuar agregando el resto si no existiera hasta que se implemente.
Escribí un guión aquí. Pero el problema es que incluso la columna existía, el script aún agrega una columna duplicada en la tabla de datos. ¿Podría ayudar a abordar este problema? ¡Lo aprecio!
Names Default To Here( 1 );
dt0 = Current Data Table();
tnames = dt0 << Get Column Names;
n = N Items( tnames );
For( i = 1, i <= n, i++,
If( (tnames[i] == Char("CpK<1.0") ),
judA = 0,
judA=1
);
If( (tnames[i] == Char("1.0<=CpK <1.33") ),
judB = 0,
judA=1
);
If( (tnames[i] == Char("1.33<=CpK<1.67") ),
judC = 0,
judC=1
);
If( (tnames[i] == Char("1.67<=CpK<2.0") ),
judD = 0,
judD=1
);
If( (tnames[i] == Char("CpK>=2.0") ),
judE = 0,
judE=1
);
);
If( judA == 1,
dt0 << New Column( "CpK<1.0", numeric, formula( If( :Cpk < 1, 1, 0 ) ), EvalFormula ),
);
If( judB == 1,
dt0 << New Column( "1.0<=CpK <1.33", numeric, formula( If( 1 <= :Cpk < 1.33, 1, 0 ) ), EvalFormula ),
);
If( judC == 1,
dt0 << New Column( "1.33<=CpK<1.67", numeric, formula( If( 1.33 <= :Cpk < 1.67, 1, 0 ) ), EvalFormula ),
);
If( judD == 1,
dt0 << New Column( "1.67<=CpK<2.0", numeric, formula( If( 1.67 <= :Cpk < 2, 1, 0 ) ), EvalFormula ),
);
If( judE == 1,
dt0 << New Column( "CpK>=2.0", numeric, formula( If( :Cpk >= 2, 1, 0 ) ), EvalFormula ),
);Re: Agregar múltiples columnas por scripts¡Muchas gracias, Vicente!Funciona.
Re: Agregar múltiples columnas por scriptsPodrías hacer algo como esto.
Names default to here(1);
dt = open("$SAMPLE_DATA\Big Class.jmp");
dt << New Column("Cpk", Set Each Value(random normal(1, 1)));
dt << New Column("1.0<=CpK <1.33", Set Each Value(0));
col_names = dt << Get column names(string); // this is your existing columns
//I would just do a not contains which checks where an item is in a list, returning 0 if it doesn't
if(!Contains(col_names, "CpK<1.0"),
dt << New Column( "CpK<1.0", numeric,
formula(
// you also don't have to do the if(thing, 1, 0) :Cpk < 1 will resolve to 1 and 0 anyway
:Cpk < 1
)
)
);
// this one shouldn't get remade
if(!Contains(col_names, "1.0<=CpK <1.33"),
dt << New Column( "1.0<=CpK <1.33", numeric, formula( 1.0<=:Cpk <1.33 ))
);
if(!Contains(col_names, "1.33<=CpK<1.67"),
dt << New Column( "1.33<=CpK<1.67", numeric, formula( 1.33<=:Cpk <1.67 ))
);
if(!Contains(col_names, "1.67<=CpK<2.0"),
dt << New Column( "1.67<=CpK<2.0", numeric, formula( 1.67<=:Cpk <2 ))
);
if(!Contains(col_names, "CpK>=2.0"),
dt << New Column( "CpK>=2.0", numeric, formula( 2.0<=:Cpk ))
);
También podría abstraerlo un poco para que pueda cambiar solo 1 estructura de datos y cambiaría sus campos.
//But I would probably do it another way
Names default to here(1);
dt = open("$SAMPLE_DATA\Big Class.jmp");
dt << New Column("Cpk", Set Each Value(random normal(1, 1)));
dt << New Column("1<=Cpk<1.33", Set Each Value(0));
col_names = dt << Get column names(string); // this is your existing columns
//I'd make a 2 col matrix with low and high check then make the columns dynamically
cpk_check = [. 1, 1 1.33, 1.33 1.67, 1.67 2, 2 .];
for(i=1, i<=nrows(cpk_check), i++,
low = cpk_check[i, 1];
high = cpk_check[i, 2];
if(!ismissing(low),
if(!ismissing(high),
col_name = char(low) || "<=Cpk<" ||char(high);
f = EvalExpr(Expr(low)<=:Cpk<EXPR></EXPR>
Re: Agregar múltiples columnas por scripts¡Gracias Thierry! Entonces, ¿cómo abordar este problema?Re: Agregar múltiples columnas por scriptsHola,
El problema está en el ciclo donde sus 5 interruptores judA - judE se vuelven a evaluar para cada columna. Entonces, cuando haya pasado por las n columnas existentes, el estado de todos sus interruptores se establece en la última columna.