Salut,
J'ai le problème suivant :
a) Je génère une table (appelez-la table dt) avec plusieurs colonnes. Cependant, je souhaite uniquement examiner un modèle spécifique (disons - "ABC@XYZ") dans les noms de colonnes ainsi que deux autres colonnes (disons - "LCOL", "WCOL"). Je génère cette table. (Appelant cette table dtB)
Suivant
b) J'utilise la table dtB, extrait sa colonne et utilise une boucle for pour générer un tableau récapitulatif pour chacune de ces colonnes qui correspond au modèle dans Col Name.
c) J'ai créé une liste de tables vide, dt_sum_all
d) Maintenant, mon objectif est d'obtenir toutes les valeurs récapitulatives des colonnes qui correspondent au modèle dans une seule table avec les colonnes LCOL et WCOL. (Je reçois N tables pour N de telles colonnes, si je n'utilise pas la nouvelle table, mais ce n'est pas ce que je veux - je veux 1 table )
e) Également à la fin, une fois que j'ai une seule table, je souhaite renommer les colonnes (généralement, cela ajoute SUM au début de chaque colonne), comme SUM ( ABC@XYZ_1AS ) en ABC@XYZ_1AS . Comme j'ai plusieurs colonnes, je veux le faire en boucle ou similaire.
Ce que j'ai jusqu'à présent est le suivant :
dt = currentdatatable();
Wait(1);
colsd = dt << get column names( string );
pattern = "ABC@XYZ";
nd = N Items( colsd );
selCols = {"LCOL", "WCOL"};
For( i = 1, i <= nd, i++,
If( Contains( colsd[i], pattern ),
Insert Into( selCols, colsd[i] )
)
);
dtB = dt << Subset(
All rows,
Columns(selCols)
);
colNameList= dtB << get column names( string );
Wait(1);
dt_sum_all = {};
For( i = 1, i <= N Items( colNameList ), i++,
If( Contains( colNameList[i], pattern),
dt_sum = dtB << Summary(
Group( :LCOL, :WCOL ),
Sum(colNameList[i]),
Freq( "None" ),
Weight( "None" ),
) << show window(0);
);
Insert Into(dt_sum_all, dt_sum);
//Data Table (dt_sum_all) << Update (
///With(Data Table(dt_sum)),
//Match Columns(:LCOL = :LCOL, :WCOL=:WCOL)
);
////column(dt_sum, "SUM("||colNameList[i] || ")" ) << set name(colNameList[i]);
///);Le code ci-dessus ne fonctionne pas et j'obtiens plusieurs tables pour chaque colonne, au lieu d'une seule fusionnée/mise à jour. Donc, je n’ai pas une seule table. Quelqu'un peut-il aider s'il vous plait. Merci.
Si je lis correctement votre code, ce que vous voulez obtenir est une table de données de données récapitulatives pour un ensemble de colonnes qui correspondent à un modèle dans la table de données d'origine.
Je crois que vous travailliez beaucoup plus dur que nécessaire.Vous trouverez ci-dessous un exemple de script, utilisant la majeure partie de votre code, mais travaillant sur l'exemple de table de données Semiconductor Capability, où les noms des colonnes lot et wafer sont lot_id et wafer, plutôt que vos Lcol et Wcol.J'ai éliminé la table de données dtB, car à moins que vous n'en ayez besoin pour quelque chose plus tard dans le script, il n'est certainement pas nécessaire de la créer juste pour ensuite créer des données récapitulatives.Les données récapitulatives peuvent provenir directement de la table de données d'origine.De plus, il n'est pas nécessaire de résumer chaque colonne une à la fois.Toutes les colonnes peuvent facilement être résumées en même temps.Ainsi, aucune mise à jour n'a besoin d'être exécutée.Enfin, il existe une option dans la plate-forme de résumé, qui permettra de donner aux noms de colonne le même nom que le nom de la colonne d'entrée, il n'est donc pas nécessaire de renommer les colonnes dans le tableau récapitulatif.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
Wait( 0 );
colsd = dt << get column names( string );
pattern = "PNP";
nd = N Items( colsd );
selCols = {"lot_id", "wafer"};
For( i = 1, i <= nd, i++,
If( Contains( colsd[i], pattern ),
Insert Into( selCols, colsd[i] )
)
);
dt_sum = dt << Summary(
Group( :lot_id, :wafer ),
Sum( colNameList[Index( 3, N Items( colNameList ) )] ),
Freq( "None" ),
Weight( "None" ),
link to original data table( 0 ),
statistics column name format( "column" )
);