Funktion zum Zählen von Zeilen innerhalb von SpecIch möchte eine Funktion erstellen, die eine Spalte einliest, die Zahl in jeder Zeile darauf überprüft, ob sie innerhalb der Spezifikation liegt, und die Anzahl der Übergaben / Gesamtanzahl / Prozentsätze ausgibt.
Das habe ich:
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];Während dies funktioniert, mag ich nicht die Tatsache, dass ich "get as matrix" verwenden muss. Es ist ein bisschen klobig.
Ich möchte eine Funktion, die einfach durch Schreiben funktioniert:
results = count_in_spec ("param name", lsl, usl);
Wie würde ich meine Funktion ändern, damit sie so funktioniert?
SkripterstellungBetreff: Funktion zum Zählen von Zeilen innerhalb der SpezifikationMit der Funktion Get Rows Where () sollten Sie das bekommen, was Sie wollen

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)
)
)
);
Betreff: Funktion zum Zählen von Zeilen innerhalb der SpezifikationDie Col Stat () -Funktionen sind häufig effizient, um Tabellendaten direkt zusammenzufassen, auch wenn es sich um Bedingungen handelt. Hier ist ein Beispiel ohne Matrixschritt.
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];
Betreff: Funktion zum Zählen von Zeilen innerhalb der SpezifikationBEARBEITEN: Ich kann diese Lösung nicht mehr empfehlen - verwenden Sie MS: Es zeigt eine Möglichkeit, dies mithilfe einer Spaltenformel zu tun. Es sollte nicht nur schneller ausgeführt werden, sondern Spaltenformeln unterstützen auch Gruppierungsvariablen.
-Brady
Hallo,
Hierfür können Sie die eingebauten Matrixfunktionen verwenden. Ich verwende << get als Matrix innerhalb der Funktion, bin mir aber nicht sicher, wie Sie das vermeiden können, ohne das Skript umständlicher zu machen.
Prost,
Brady
Names Default To Here(1);
dt = astable(J(1000, 1, randomnormal(0,3)), <<COLUMN names=""></COLUMN>
Betreff: Funktion zum Zählen von Zeilen innerhalb der SpezifikationVielen Dank an alle. Ich habe alle drei Kategorien von Methoden untersucht. Dann wurde mir klar, dass ich es mir mit so etwas etwas leichter hätte machen können:
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);Die Syntax zum Extrahieren von LSL- und USL-Eigenschaften aus einer Spalte ist hilfreich.