Comment recoder une colonne avec une formule en JSLJe n'arrive pas à faire fonctionner correctement mon script de recodage. J'ai une table de données avec une colonne appelée DEPT qui contient un numéro qui correspond à un nom de département spécifique. Ce que je veux faire, c'est créer une nouvelle colonne appelée Dept Name qui prend les valeurs dans DEPT et les convertit en nom de département écrit plutôt qu'en version numérique. Cette table fait partie d'un script plus vaste que j'exécute deux fois par semaine avec une année de données glissantes à chaque exécution, de sorte que chaque numéro/nom de département peut ne pas être présent dans une itération donnée. Vous trouverez ci-dessous ce que j'ai essayé, mais je n'ai réussi qu'à transposer simplement la valeur de DEPT dans Dept Name ou à obtenir une colonne vide Dept Name. Toute aide serait très appréciée.
FD << Current Data Table();
New Column("Dept Name", Character, Nominal, Formula(:DEPT));
:Dept Name << Delete Formula;
For Each Row(:Dept Name =
Match( :Dept Name,
"100", "Wet Production",
"200", "QA Lab",
"300", "Dry Component",
"400", "Finished Component",
"410", "Microsis",
"415", "Antimicrobial",
"425", "Finished Component Product",
"475", "Special Processing",
"490", "eSIS",
"500", "QC",
"600", "Labeling",
"700", "Sterilization",
"1000", "Shipping and Finished Product Labeling",
"1200", "Quarentine",
:Dept Name);
);
Re : Comment recoder une colonne avec une formule en JSLSi vous souhaitez utiliser le Match paradigme, il devrait être structuré comme suit :
FD = Current Data Table();
FD << New Column( "Dog Group", Character, Nominal );
For Each Row(
Dog Group = Match( :Breed #,
"6", "Toy",
"10", "Toy",
"18", "Toy",
"20", "Toy",
"24", "Toy",
"27", "Toy",
"30", "Toy",
"31", "Toy",
"8", "Work",
"9", "Work",
"15", "Work",
"17", "Work",
"21", "Work",
"28", "Work",
"36", "Work",
"1", "Sport",
"14", "Sport",
"23", "Sport",
"26", "Sport",
"29", "Sport",
"33", "Sport"
)
);
Re : Comment recoder une colonne avec une formule en JSLJe pense que vous ne pouvez pas faire de comparaison comme ça lorsque vous utilisez Match, vous devriez écrire toutes les valeurs séparément. J'utiliserais soit un tableau associatif, soit une table de données pour stocker le numéro de race et les groupes (vous pouvez également utiliser Match, mais je pense que les autres options sont meilleures). Selon l'endroit où vous obtenez ces valeurs, il existe de nombreuses façons de les construire.
Re : Comment recoder une colonne avec une formule en JSLBonjour!
J'essaie quelque chose de similaire ici sur JMP 16. La seule différence, je crois, est que j'ai plusieurs valeurs dans chacun de mes groupes. C'est la formule que j'essaie maintenant:
FD = Current Data Table();
FD << New Column( "Dog Group", Character, Nominal );
For Each Row( Dog Group = Match( :Breed #, "6,10,18,20,24,27,30,31", "Toy", "8,9,15,17,21,28,36", "Work", "1,14,23,26,29,33", "Sport", "3,4,7,13,34,37,42", "Hound", "11,12,16,39", "Herder", "5,19,41", "Extra Fluff", "32,40", "Terrier", "2,25", "Doodle", "22", "Mixed", "35,38", "Other" ) );
J'ai également recodé à l'origine avec une formule et cela fonctionne dans ma table de données actuelle - mais je ne suis pas en mesure de copier/coller la formule dans une nouvelle table (même en m'assurant que les noms de colonne sont les mêmes).
Merci pour toute aide!
Re : Comment recoder une colonne avec une formule en JSLCela a parfaitement fonctionné ! Merci pour l'aide!
Re : Comment recoder une colonne avec une formule en JSLJe pense que vous êtes sur la bonne voie, mais votre script d'origine confondait les colonnes de données d'origine et cible. Essayez cette modif :
FD = Current Data Table();
FD << New Column( "Dept Name", Character, Nominal );
For Each Row(
:Dept Name = Match( :Dept,
"100", "Wet Production",
"200", "QA Lab",
"300", "Dry Component",
"400", "Finished Component",
"410", "Microsis",
"415", "Antimicrobial",
"425", "Finished Component Product",
"475", "Special Processing",
"490", "eSIS",
"500", "QC",
"600", "Labeling",
"700", "Sterilization",
"1000", "Shipping and Finished Product Labeling",
"1200", "Quarentine"
);
);