사양 내의 행 수를 계산하는 기능열을 읽고 각 행의 숫자가 사양 내에 있는지 확인하고 통과 수/총 수/백분율을 출력하는 함수를 만들고 싶습니다.
이것이 내가 가진 것입니다.
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];이것이 작동하는 동안 "행렬로 가져오기"를 사용해야 한다는 사실이 마음에 들지 않습니다. 좀 투박합니다.
간단히 작성하여 작동하는 기능을 원합니다.
results = count_in_spec( "매개 변수 이름", lsl, usl);
이 방식으로 작동하도록 함수를 수정하려면 어떻게 해야 합니까?
스크립팅Re: 사양 내에서 행 수를 계산하는 기능여러분 감사합니다. 세 가지 범주의 방법을 모두 탐색했습니다. 그런 다음 다음과 같은 것을 사용하여 작업을 좀 더 쉽게 만들 수 있다는 것을 깨달았습니다.
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 속성을 추출하는 구문이 유용합니다.
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: 사양 내에서 행 수를 계산하는 기능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: 사양 내에서 행 수를 계산하는 기능편집: 더 이상 이 솔루션을 권장할 수 없습니다. MS 사용: 열 수식을 사용하여 이를 수행하는 방법을 보여줍니다. 더 빠르게 실행되어야 할 뿐만 아니라 열 수식은 그룹화 변수를 지원하는 이점도 있습니다.
-브래디
안녕,
이를 위해 내장 행렬 함수를 사용할 수 있습니다. 함수 내에서 <
건배,
브래디
Names Default To Here(1);
dt = astable(J(1000, 1, randomnormal(0,3)), <<COLUMN names=""></COLUMN>
Re: Spec 내의 행을 계산하는 함수:folded_hands:가 사양(가치)에 얼마나 유용할지 상상해보세요.
새로운 기능을 사용하면 모든 사용자가 Graph Builder에서 계산을 할 수 있습니다!
