Fonction pour compter les lignes dans les spécificationsJe veux 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.
Voici 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 je doive utiliser "obtenir comme matrice". C'est un peu maladroit.
J'aimerais une fonction qui fonctionne simplement en écrivant:
results = count_in_spec ("nom du paramètre", lsl, usl);
Comment modifier ma fonction pour qu'elle fonctionne de cette façon?
ScriptingRe: Fonction pour compter les lignes dans les spécificationsL'utilisation de la fonction Get Rows Where () devrait vous permettre

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écificationsLes fonctions Col Stat () sont souvent efficaces pour résumer directement les données de table, également avec des conditions impliquées. Voici un exemple sans la nécessité d'une étape de matrice.
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écificationsEDIT: Je ne peux plus recommander cette solution - utilisez MS: il 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 << get comme matrice dans la fonction, mais je ne sais pas comment éviter cela sans alourdir le script.
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 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 rendre les choses un peu plus faciles pour moi-même 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 pour extraire les propriétés LSL et USL d'une colonne sera utile.