仕様内の行をカウントする関数列を読み取り、各行の数値が仕様の範囲内であるかどうかを確認し、合格数/合計数/パーセンテージを出力する関数を作成したいと思います。
これは私が持っているものです:
count_in_spec = Function( { col, lsl, usl },
a=0; //pass count
b=0; //all count
for( i = 1, i <= N Rows(col), i++,
if( col[i] >= lsl & col[i] <= usl, a++ );
if( not(ismissing(col[i])), b++ );
);
pctpass = 100*a/b;
pctfail = 100 - pctpass;
evallist({a, b, pctpass, pctfail});
);
dt0 = current data table();
colp = dt0:name("param") << get as matrix;
results = count_in_spec(colp, 0.15, 0.30 );
countpass = results[1];
countall = results[2];
pctpass = results[3];
pctfail = results[4];これは機能しますが、「マトリックスとして取得」を使用する必要があるという事実は好きではありません。 少し不格好です。
次のように書くだけで機能する関数が欲しいのですが。
結果= count_in_spec( "param name"、lsl、usl);
このように機能するように関数を変更するにはどうすればよいですか?
スクリプティングRe:仕様内の行をカウントする関数Get Rows Where()関数を使用すると、必要な情報が得られます。

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
count_in_spec = Function( {col, lsl, usl},
result = N Rows( dt << get rows where( lsl <= As Column( dt, col ) <= usl ) )
);
colNames = dt << get column names(string, continuous);
resultColList = {};
resultCountList = {};
For(i=1,i<= 10 /*Nitems(colNames)*/,i++,
specs = column(dt,colNames[i]) << get property("spec limits");
If(isMissing(try(specs["LSL"],.))==0 & isMissing(try(specs["USL"],.))==0,
result = count_in_spec(colNames[i],specs["LSL"],specs["USL"]);
insert into(resultColList,colNames[i]);
insert into(resultCountList,result)
)
);
new window("Results",
outline box("In Spec Report",
Table Box(
string col box("Column", resultColList),
number col box("Count", resultCountList)
)
)
);
Re:仕様内の行をカウントする関数Col Stat()関数は、多くの場合、テーブルデータを直接要約するのに効率的であり、条件も含まれます。 これは、行列ステップを必要としない例です。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
count_in_spec = Function( {col, lsl, usl},
{default local},
a = Col Sum( lsl < As Column( col ) < usl );
b = Col Number( col );
pctpass = 100 * a / b;
pctfail = 100 - pctpass;
Eval List( {a, b, pctpass, pctfail} );
);
results = count_in_spec( Column( dt, "height" ), 55, 70 );
countpass = results[1];
countall = results[2];
pctpass = results[3];
pctfail = results[4];
Re:仕様内の行をカウントする関数編集:私はもはやこの解決策をお勧めできません-MSを使用してください:それは列式を使用してこれを行う方法を示しています。実行速度が速くなるだけでなく、列の数式にはグループ化変数をサポートするという利点もあります。
-ブレイディ
こんにちは、
これには、組み込みの行列関数を使用できます。 関数内で<< getを行列として使用しますが、スクリプトをより煩雑にすることなく、これを回避する方法がわかりません。
乾杯、
ブレイディ
Names Default To Here(1);
dt = astable(J(1000, 1, randomnormal(0,3)), <<COLUMN names=""></COLUMN>
Re:仕様内の行をカウントする関数みんなありがとう。 私はメソッドの3つのカテゴリすべてを調査しました。 次に、次のようなものを使用することで、自分で物事を少し簡単にできることに気づきました。
dt0 = current data table();
dt0 << clear row states;
count_in_spec = Function( { col, lsl, usl },
a=0; //pass count
b=0; //all count
cola = dt0:col << get as matrix;
for( i = 1, i <= N Rows( cola ), i++,
if( cola[i] >= lsl & cola[i] <= usl, a++ );
if( not(ismissing( cola[i] )), b++ );
);
pctpass = 100*a/b;
pctfail = 100 - pctpass;
evallist({a, b, pctpass, pctfail});
);
colp = "param1";
results = count_in_spec(colp, 0.15, 0.30 );
countpass = results[1];
countall = results[2];
pctpass = results[3];
pctfail = results[4];
show(countpass);
show(countall);
show(pctpass);
show(pctfail);
colp = "param2";
results = count_in_spec(colp, 0.15, 0.30);
countpass = results[1];
countall = results[2];
pctpass = results[3];
pctfail = results[4];
show(countpass);
show(countall);
show(pctpass);
show(pctfail);列からLSLおよびUSLプロパティを抽出するための構文が役立ちます。