Itérer le script sur une table différenteJ'ai ce niveau défectueux qui détermine le nombre de fois qu'il va itérer.
dtparms << Subset( By( :Defecting_Level ), All rows, Selected columns only( 0 ), columns( :Parameter, :CL_LL, :CL_UL, :MD_LL, :MD_UL ) );
dtParms1 = Data Table( "Defecting_Level=1" );<BR />dtParms2 = Data Table( "Defecting_Level=2" );
C'est le code qui doit itérer en fonction du nombre de niveaux défectueux. Mon problème est puis-je parcourir différentes tables en utilisant le même script? Ou comment puis-je répéter ce processus en fonction du nombre de niveaux défectueux? Comme par exemple, mon niveau défectueux est de 3. Ensuite, ce code doit s'exécuter trois fois, en parcourant les trois tables qui ont été sous-ensemble. Merci
deftb << New Column( "MD1", numeric );
parameters = Column( dtParms1, "Parameter" ) << get values;
deftb_colnames = deftb << get column names( string );
parameters = Associative Array( Eval( parameters ) );
deftb_colnames = Associative Array( Eval( deftb_colnames ) );
parameters << Intersect( deftb_colnames );
params = parameters << get keys;
For( i = 1, i <= N Items( params ), i++,
foundRows = deftb << get rows where( As Column( deftb, dtParms1:Parameter[i] ) < dtParms1:CL_LL[i] & Is Missing( deftb:MD1 ) == 1 );
deftb:MD1[foundRows] = dtParms1:MD_LL[i];
foundRows = deftb << get rows where( As Column( deftb, dtParms1:Parameter[i] ) > dtParms1:CL_UL[i] & Is Missing( deftb:MD1 ) == 1 );
deftb:MD1[foundRows] = dtParms1:MD_UL[i];
);
AnalytiqueTableau de donnéesAutreScriptingRe: Iterate script sur une table différenteJe suis sûr que le JSL ci-dessous, tel qu'il est écrit, ne fonctionnera pas. L'exemple de code qui a été fourni avait des pointeurs vers des tables de données non définies, par conséquent, je fais des hypothèses qui peuvent ne pas être exactement correctes. Cependant, si vous suivez la logique et la syntaxe que je fournis, vous devriez être en mesure de vous faire une idée de la façon dont votre morceau de code est utilisé pour boucler sur le nombre de paramètres d'entrée spécifié.
// By specifying the variable to hold the data table names
// that will be created from the Subset with the By clause
// the variable specified becomes a List with an element
// for each table created
theTables = dtparms << Subset(
By( :Defecting_Level ),
All rows,
columns( :Parameter, :CL_LL, :CL_UL, :MD_LL, :MD_UL )
);
Show( theTables );
For( k = 1, k <= N Items( theTables ), k++,
deftb << New Column( "MD1", numeric );
parameters = Column( theTables[k], "Parameter" ) << get values;
deftb_colnames = deftb << get column names( string );
parameters = Associative Array( Eval( parameters ) );
deftb_colnames = Associative Array( Eval( deftb_colnames ) );
parameters << Intersect( deftb_colnames );
params = parameters << get keys;
For( i = 1, i <= N Items( params ), i++,
foundRows = deftb << get rows where(
As Column( deftb, column( theTables[k],"Parameter")[i] ) < column( theTables[k], "CL_LL")[i] &
Is Missing( deftb:MD1 ) == 1
);
deftb:MD1[foundRows] = column(theTables[k],"MD_LL")[i];
foundRows = deftb << get rows where(
As Column( deftb, column( theTables[k],"Parameter")[i] ) < column( theTables[k], "CL_UL")[i] &
Is Missing( deftb:MD1 ) == 1
);
deftb:MD1[foundRows] = column( theTables[k],"MD_UL")[i];
);
);
Re: Iterate script sur une table différenteMerci pour une réponse rapide! J'ai une question complémentaire tho,
deftb << Nouvelle colonne ("MD1", numérique); => qui sera le stockage des valeurs itérées, devrait être (MD1, MD2, MD3 ..) en fonction du nombre d'itérations. Par exemple, l'itération pour les valeurs de la table 1 sera stockée dans MD1, l'itération pour les valeurs de la table 2 sera stockée dans MD2 et ainsi de suite. J'ai essayé d'ajouter cette ligne mais cela ne fonctionne pas:
MD = {"MD1", "MD2", "MD3", "MD4", "MD5", "MD6"};
Pour (k = 1, k <= N Items (theTables), k ++,
deftb << Nouvelle colonne (MD [k + 1], numérique);
Merci pour l'aide
Re: Iterate script sur une table différenteLes deux morceaux de code ci-dessous fonctionnent très bien pour moi, tant que la référence de la table de données deftb a été définie et que la liste theTables a été remplie. Puisque le script n'a pas fonctionné pour vous, quels messages d'erreur y avait-il dans le journal?
MD = {"MD1", "MD2", "MD3", "MD4", "MD5", "MD6"};
For( k = 1, k <= N Items( theTables ), k++,
deftb << New Column( MD[k + 1], numeric )
);
// or, why go through all of the work to create the list MD
// when you can easily create the character string required
// for the column name as shown below
deftb = Current Data Table();
For( k = 1, k <= N Items( theTables ), k++,
deftb << New Column( "MD" || char[k + 1]), numeric )
);Re: Iterate script sur une table différenteMaintenant ça marche, merci pour l'explication rapide. Et dernière question, après avoir créé la colonne de stockage pour les valeurs, cette boucle affiche une erreur: Plage d'indice {1} dans l'accès ou l'évaluation de 'theTables [k]', theTables [/ * ### * / k]
Pour (i = 1, i <= N Items (params), i ++,
foundRows = deftb << obtenir des lignes où (
Comme Colonne (deftb, colonne (theTables [k], "Parameter") [i]) Manquant (deftb: MD [k + 1]) == 1
);
deftb: MD [k + 1] [foundRows] = colonne (theTables [k], "MD_LL") [i];
foundRows = deftb << obtenir des lignes où (
En tant que colonne (deftb, colonne (theTables [k], "Parameter") [i]) Manquant (deftb: MD [k + 1]) == 1
);
deftb: MD [k + 1] [foundRows] = colonne (theTables [k], "MD_UL") [i];
);
Est-ce à cause de mon MD [k + 1]?Re: Iterate script sur une table différentePour comprendre ce qui se passe ici, tout ce que vous avez à faire est de déterminer la valeur de la variable k et cela vous dira pourquoi le fait de référencer les Tables [k] pointe vers un indice invalide. Cela est généralement dû au fait que vous avez utilisé une boucle For () avec k comme valeur d'index et que dans la spécification de la boucle For (), vous incrémentez k au-delà du nombre d'éléments de la listeTables. Ou bien, la variable k utilisée dans une partie précédente du script, et lorsqu'elle est référencée à ce stade, la valeur de k est inappropriée.
Si vous survolez l'une des références à la variable k dans votre script, il affichera la valeur actuelle de k. Vous devriez être en mesure de savoir d'où vient la valeur.
une dernière remarque ... puisque vous n'initialisez pas vos variables au début de votre script, les valeurs des variables seront définies sur les valeurs qu'elles étaient à la dernière fois que le script s'est terminé. Par conséquent, cela peut également être à l'origine du problème.
Re: Iterate script sur une table différenteJe suis donc un peu perdu à nouveau avec ces boucles, et je ne reçois que la valeur de 6 dans la colonne MD1 uniquement au lieu des valeurs de chaque table des tables et placées dans leurs MD respectifs. SOrry je suis vraiment confondu avec la boucle For dans jmp
theTables = dtparms << Subset(
By( :Dispo_name ),
All rows,
Selected columns only( 0 ),
columns( :Parameter, :CL_LL, :CL_UL, :MD_LL, :MD_UL )
);
//create columns
For( n = 1, n <= N Items( theTables ), n++,
deftb << New Column( "MD" || Char( n ), numeric )
);
//loop through each table and store value in MDs
For( k = 1, k <= N Items( theTables ), k++,
parameters = Column( theTables[k], "Parameter" ) << get values;
deftb_colnames = deftb << get column names( string );
parameters = Associative Array( Eval( parameters ) );
deftb_colnames = Associative Array( Eval( deftb_colnames ) );
parameters << Intersect( deftb_colnames );
params = parameters << get keys;
Show( params );
For( i = 1, i <= N Items( params ), i++,
foundRows = deftb << get rows where(
As Column( deftb, Column( theTables[k], "Parameter" )[i] ) < Column( theTables[k], "CL_LL" )[i] &
Is Missing( deftb:MD ) == 1
);
deftb:MD[foundRows] = Column( theTables[k], "MD_LL" )[i];
foundRows = deftb << get rows where(
As Column( deftb, Column( theTables[k], "Parameter" )[i] ) < Column( theTables[k], "CL_UL" )[i] &
Is Missing( deftb:MD ) == 1
);
deftb:MD[foundRows] = Column( theTables[k], "MD_UL" )[i];
);
);Re: Iterate script sur une table différente1. Veuillez joindre un exemple de tableau de données afin que je puisse tester le code par rapport à des données réelles.
2. Veuillez fournir une maquette de ce à quoi vous vous attendez du tableau de données final.