Funktion zum Zählen von Zeilen innerhalb der SpezifikationIch möchte eine Funktion erstellen, die eine Spalte einliest, die Zahl in jeder Zeile überprüft, ob sie innerhalb der Spezifikation liegt, und die übergebene Zählung/Gesamtzahl/Prozentsätze ausgeben.
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 die Tatsache nicht, dass ich "get as matrix" verwenden muss. Es ist ein bisschen klobig.
Ich hätte gerne eine Funktion, die einfach funktioniert, indem ich schreibe:
Ergebnisse = count_in_spec( "Parametername", lsl, usl);
Wie würde ich meine Funktion ändern, damit sie so funktionieren kann?
SkripterstellungBetreff: 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 mir die Dinge ein bisschen einfacher hätte machen können, indem ich so etwas verwendet hätte:
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.
Betreff: Funktion zum Zählen von Zeilen innerhalb der SpezifikationDie Col Stat()-Funktionen sind oft effizient, um Tabellendaten direkt zusammenzufassen, auch mit beteiligten Bedingungen. Hier ist ein Beispiel ohne die Notwendigkeit eines Matrixschritts.
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 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 SpezifikationBEARBEITEN: Ich kann diese Lösung nicht mehr empfehlen - verwenden Sie MS: Sie zeigt eine Möglichkeit, dies mit einer Spaltenformel zu tun. Es sollte nicht nur schneller laufen, sondern Spaltenformeln haben auch den Vorteil, dass sie das Gruppieren von Variablen unterstützen.
-Brady
Hallo,
Dazu können Sie die eingebauten Matrixfunktionen verwenden. Ich verwende <
Beifall,
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 SpezifikationStellen Sie sich einfach vor, wie nützlich :folded_hands: in der Spezifikation (Wert) sein wird.
Mit der neuen Funktionalität kann jeder Benutzer die Berechnung im Graph Builder durchführen!
