Manuel :
1. J'ai 2 tableaux de données, l'un est la liste des paramètres avec limites de contrôle et l'autre est le tableau de données principal.


2. Je dois trier chaque colonne manuellement [ordre croissant] en fonction de l'ordre dans le modèle. Si Contact est inférieur à 2 [DC est 6] ou Contact supérieur à 10 [DC est 7] et mettez-le dans la colonne DC - Après avoir entré des valeurs dans DC, je masque et exclut les lignes avec des valeurs DC et passe à la paramètre suivant et trier à nouveau
Comment faire pour la boucle si j'ai plusieurs paramètres et un ensemble de données volumineuses?
Tout d'abord, je crois, étant donné les exemples de tableaux de données que vous avez fournis, que vous avez fait une erreur dans votre verbiage en parlant de
" Contact supérieur à 10 [DC est 7] ". Étant donné les valeurs du tableau de données des paramètres, je pense que vous vouliez écrire:
"Contact supérieur à 23 [DC est 7]"
En supposant cela, je crois que le script ci-dessous fonctionnera pour ce que vous voulez. Il ne nécessite pas de parcourir ligne par ligne dans la table de données, ce qui signifie qu'il n'a pas besoin d'être trié. J'espère que c'est ce dont vous avez besoin
Names Default To Here( 1 );
// Create Sample data tables
dtParms = New Table("Parameters",
Add Rows(4),
New Column("Order",formula(Row())),
New Column("Parameter", character,values({"Contact","MST","Height","Weight"})),
New Column("CL_LL", values([2,23,59,35])),
New Column("CL_UL", values([23,100,109,105])),
New Column("DC_LL", values([6,10,21,33])),
New Column("DC_UL", values([7,11,22,39]))
);
dtMain = New Table("Main",
Add Rows(100),
New Column("Contact", formula(randominteger(1,27))),
New Column("MST", formula(randominteger(18,115))),
New Column("Height", formula(randominteger(50,120))),
New Column("Weight", formula(randominteger(30,110))),
New Column("DC")
);
dtMain << run formulas;
dtMain:Contact << delete formula;
dtMain:MST << delete formula;
dtMain:Height << delete formula;
dtMain:Weight << delete formula;
// Loop through the data and assign the above and below limits
For(i=1,i<=N Rows(dtParms),i++,
foundRows = dtMain << get rows where( as column(dtMain, dtParms:Parameter[i]) < dtParms:CL_LL[i] & isMissing(dtMain:DC) == 1 );
dtMain:DC[foundRows] = dtParms:DC_LL[i];
foundRows = dtMain << get rows where( as column(dtMain, dtParms:Parameter[i]) > dtParms:CL_UL[i] & isMissing(dtMain:DC) == 1);
dtMain:DC[foundRows] = dtParms:DC_UL[i];
);Question de suivi:
Au lieu d'avoir à coder les dtParms, je les ai stockés dans une table de données du même nom mais cela ne produit pas de résultats avec celui qui utilise les scripts - il dit cependant " L'accès à une table de données étendue nécessite une colonne ou une variable de table de données {1} "- comment puis-je résoudre ce problème?
Pour le code:
For(i=1,i<=N Rows(dtParms),i++,
foundRows = dtMain << get rows where( as column(dtMain, dtParms:Parameter[i]) < dtParms:CL_LL[i] & isMissing(dtMain:DC) == 1 );
dtMain:DC[foundRows] = dtParms:DC_LL[i];
foundRows = dtMain << get rows where( as column(dtMain, dtParms:Parameter[i]) > dtParms:CL_UL[i] & isMissing(dtMain:DC) == 1);
dtMain:DC[foundRows] = dtParms:DC_UL[i];
);
pour fonctionner correctement, vous devez associer la variable "dtParms" à la table de données qui contient les paramètres. Vous avez déclaré avoir enregistré la table de données sous le même nom, je suppose donc que vous avez nommé la table de données "Paramètres". Donc, ce que vous devez faire, c'est ouvrir cette table de données avant d'exécuter le script et ajouter au script l'instruction suivante
dtParms = Data Table("Parameters");