Fonction pour compter les lignes dans les spécificationsJe souhaite créer une fonction qui lit dans une colonne, vérifie le nombre de chaque ligne pour savoir s'il est conforme aux spécifications et affiche le nombre de passages/le nombre total/les pourcentages.
Voilà ce que j'ai :
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];Bien que cela fonctionne, je n'aime pas le fait que j'ai besoin d'utiliser "get as matrix". C'est un peu maladroit.
Je voudrais une fonction qui fonctionne simplement en écrivant:
résultats = count_in_spec( "nom du paramètre", lsl, usl);
Comment pourrais-je modifier ma fonction pour qu'elle puisse fonctionner de cette façon?
ScriptRe : Fonction pour compter les lignes dans les spécificationsMerci tout le monde. J'ai exploré les trois catégories de méthodes. J'ai alors réalisé que j'aurais pu me faciliter un peu les choses en utilisant quelque chose comme ceci :
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);La syntaxe d'extraction des propriétés LSL et USL d'une colonne sera utile.
Re : Fonction pour compter les lignes dans les spécificationsLes fonctions Col Stat() sont souvent efficaces pour résumer directement les données d'un tableau, y compris avec des conditions. Voici un exemple sans avoir besoin d'une étape matricielle.
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 : Fonction pour compter les lignes dans les spécificationsL'utilisation de la fonction Get Rows Where () devrait vous donner ce que vous voulez

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 : Fonction pour compter les lignes dans les spécificationsEDIT : Je ne peux plus recommander cette solution - utilisez MS : elle montre un moyen de le faire en utilisant une formule de colonne ; non seulement il devrait s'exécuter plus rapidement, mais les formules de colonne ont également l'avantage de prendre en charge les variables de regroupement.
-Brady
Salut,
Vous pouvez utiliser les fonctions de matrice intégrées pour cela. J'utilise <
Acclamations,
brady
Names Default To Here(1);
dt = astable(J(1000, 1, randomnormal(0,3)), <<COLUMN names=""></COLUMN>
Re: Fonction pour compter les lignes dans la spécificationImaginez à quel point :folded_hands: sera utile dans les spécifications (valeur) .
Avec la nouvelle fonctionnalité, n'importe quel utilisateur peut effectuer le calcul dans Graph Builder !
