通過腳本添加多列你好,
我想在定義的數據表上添加多個列。 如果列已經存在,那麼腳本可以忽略該列並繼續添加其餘的列,如果不存在直到實現。
我在這裡寫了一個腳本。 但問題是即使列存在,腳本仍然在數據表中添加重複的列。 你能幫忙解決這個問題嗎? 欣賞它!
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: 通過腳本添加多列非常感謝,文斯!有用。
Re: 通過腳本添加多列你可以做這樣的事情。
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 ))
);
您還可以對其進行一些抽象,這樣您就可以只更改 1 個數據結構,它會更改您的字段。
//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: 通過腳本添加多列謝謝蒂埃里! 那麼如何解決這個問題呢?Re: 通過腳本添加多列你好,
問題出在為每一列重新評估 5 個開關 judA - judE 的循環中。 因此,當您瀏覽完 n 個現有列時,所有開關的狀態都將設置為最後一列。