Tableau associatif pour renommer les colonnes de la table de donnéesSalut la communauté JMP,
J'ai une table de données (dt1) avec de nombreuses colonnes et je voudrais les renommer. Ils sont codés avec des noms étranges. Mais, j'ai une autre table de données (dt2) avec seulement deux colonnes: Nom et: Code. Chaque ligne de dt2 a le nom significatif associé au code.
Je sais comment faire cela avec des boucles for, mais j'essaie d'apprendre quelque chose de nouveau et j'espère le faire grâce à un tableau associatif. Quelque chose de similaire à ce qu'il y a dans ce fil ici . J'ai pensé que je pouvais faire quelque chose comme ça:
Names Default To Here( 1 );
dt = Data Table( "dt1" );
dtnames = Data Table( "dt2" );
aa_name_code = Associative Array(
Column( dtnames, "Name" ) << Get Values,
Column( dtnames, "Code" ) << Get Values
);
aavalues = aa_name_code << Get Values;
aakeys = aa_name_code << Get Keys;
Eval( Eval Expr( Column(dt,Expr( aavalues )))) << Set Name( Expr( aakeys ) ) ) );
Mais, malheureusement, cela ne fonctionne pas. Il ne se comporte pas comme je pensée les tableaux associatifs se sont comportés.
Encore une fois, je veux essayer d'apprendre quelque chose de nouveau et m'améliorer avec une nouvelle commande JSL, c'est pourquoi je veux travailler avec le tableau associatif. Si ce n'est pas possible, je le ferai de la manière brute-force For-Loop.
Merci pour vos réflexions et vos commentaires à ce sujet!
DS
Tableau de donnéesScriptingRe: Tableau associatif pour renommer les colonnes de la table de donnéesL'utilisation de tableaux associés et de boucles for ne s'exclut pas mutuellement.Je sais que beaucoup de gens aiment éviter les boucles for, mais à la fin de la journée, vous voulez itérer sur les colonnes d'une table et les boucles for sont conçues pour faire des itérations.
namesDefaultToHere(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
arr = [=>];
arr["name"] = "first name";
arr["age"] = "age";
arr["sex"] = "gender";
arr["height"] = "height (inches)";
arr["weight"] = "weight (lbs)";
for (i=1,i<=ncols(dt),i++,
cname = column(i)<<GETNAME></GETNAME>Re: Tableau associatif pour renommer les colonnes de la table de donnéessalut @David_Burnham ,
Merci pour vos commentaires. J'ai clairement besoin de faire plus de lecture dans les tableaux associatifs. Cela ne me dérange pas tellement For Loops, mais j'espérais coder le changement de nom d'une manière plus élégante. Le lien vers l'autre thread était une solution très élégante pour réorganiser les valeurs de colonne en fonction de l'entrée numérique d'une autre colonne. La façon dont le tableau associatif fonctionnait dans ce script était la façon dont je pensais que cela fonctionnerait pour les colonnes de la table, mais ce n'est clairement pas le cas. J'ai déjà renommé des colonnes avec For Loops à l'aide de lists {...}, mais je cherchais à essayer une méthode différente sans boucles. Cependant, j'aime la méthode de tableau associatif que vous avez présentée et je le ferai de cette façon plutôt que de créer des listes.
Je suppose que je pensais qu'avec une liste des noms de colonnes dans la première table de données et le tableau associatif de la deuxième table de données, on pourrait facilement réaffecter les noms à cause du tableau associatif, presque comme une fonction "recoder" pour la colonne noms.
Quoi qu'il en soit, j'apprécie votre réponse et votre solution à ma question sur l'utilisation de tableaux associatifs pour renommer les colonnes. Il est temps de revenir aux données!
Merci!,
DS
Re: Tableau associatif pour renommer les colonnes de la table de donnéesJuste pour être clair, j'ai codé en dur le contenu du tableau juste pour avoir un exemple fonctionnel - il est toujours logique de remplir les clés et les valeurs à partir d'une table séparée.Notez également qu'il n'y avait pas besoin de l'une des Evals, Expr, etc. Bonne chance.
Re: Tableau associatif pour renommer les colonnes de la table de donnéessalut @David_Burnham ,
Oui, j'ai suivi votre exemple et compris le codage en dur. Lorsque vous travaillez avec une autre table de colonnes Nom et Code, il était facile de créer le tableau associatif (note: doit être dans le bon ordre) afin que lors de la définition des noms de colonne, il applique la valeur correcte à la clé correspondante. Je l'ai couru et cela a parfaitement fonctionné. Encore une fois, merci pour l'aide!
DS