スクリプトで複数の列を追加こんにちは、
定義されたデータ テーブルに複数の列を追加したいのですが。 列が既に存在する場合、スクリプトは列を無視し、実装されるまで存在しない場合は残りの列を追加し続けることができます。
ここにスクリプトを書きます。 しかし、問題は列が存在していても、スクリプトはデータテーブルに重複した列を追加します。 この問題に対処するのを手伝ってもらえますか? 感謝します!
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 列を通過すると、すべてのスイッチの状態が最後の列に設定されます。