Code JSL et aide au résuméBonjour la communauté JMP,
JMP Pro v17.
J'ai un script qui fonctionnait le mois dernier, mais qui ne semble plus fonctionner. J'ai une table de données où une colonne est nommée :Date (voir la table de données ci-jointe). Le script suivant est censé résumer la table de données par l'année ( ) de :Date et générer une liste d'années pour la variable "yrs".
Summarize( dt, yrs = By( Year( :Date ) ) );
Par exemple, il est censé renvoyer une liste de dates comme {"2022", "2023", "2024"} et ainsi de suite, car la commande Year( ) est censée extraire uniquement la valeur de l'année de la colonne :Date, mais ce n'est pas le cas.
Si vous supprimez la commande Year( ) autour de :Date et l'exécutez comme ceci :
Summarize( dt, yrs = By( :Date ) );
Le résultat est une liste de toutes les dates individuelles, voici un extrait :
{"29/09/0263", "30/01/1930", "11/02/1955", "03/05/2002", "13/08/2002", "19/10/2002",
"01/01/2021", "02/01/2021", "06/01/2021", "18/01/2021", "30/01/2021", "12/02/2021",
"13/02/2021", "15/02/2021", "26/03/2021", "27/03/2021", "28/03/2021", "30/03/2021",
"23/04/2021", "24/04/2021", "25/04/2021",}
Il y a quelques dates mal orthographiées, mais cela peut être ignoré pour le moment.
En fait, je ne veux pas toutes les dates individuelles, je veux juste une liste de toutes les années. Malheureusement, lorsque j'essaie d'exécuter yr = Year( :Date), j'obtiens une variable nulle/vide pour yr. Cela finit par ne pas pouvoir être évalué par la prochaine commande By( ) autour d'elle dans le JSL d'origine. Je ne sais pas si j'en ai besoin
Ce que je trouve étrange, c'est qu'il y a environ un mois, lorsque je construisais ce code, il semblait fonctionner très bien, mais maintenant, il ne fonctionne plus comme avant.
Je suis sûr qu'il me manque quelque chose de simple qui cause ce problème, mais je n'arrive pas à comprendre ce que c'est. Ou alors, je pense à Summarize( ) et/ou à la façon dont il utilise le groupe By( ).
Merci pour vos réflexions/commentaires !
DS
Automatisation et scriptsPersonnalisation de masseFenêtresRe: Code JSL et aide au résuméSalut,
Vous devez évaluer la fonction Année comme suit :
Eval(Eval Expr(summarize (dt, yr = By(Year(:Date)))));
Meilleur,
TS
Re: Code JSL et aide au résuméJe ne pense pas que vous puissiez faire cela avec Summarize, mais vous pouvez utiliser Summary avec la colonne de transformation si vous ne souhaitez pas créer de nouvelle colonne dans votre table
Names Default To Here(1);
dt = Open("$DOWNLOADS/Date.jmp");
dt_summary = dt << Summary(
Group(Transform Column("Year", Formula(Year(:Date)))),
Freq("None"),
Weight("None"),
Link to original data table(0),
output table name("Summary of Date grouped by Year"),
Private
);
years = dt_summary[0, 1];
Close(dt_summary, no save);
Show(years);
Re: Code JSL et aide au résuméBonjour @Thierry_S et @jthi ,
Merci à vous deux pour vos retours rapides et vos idées. J'ai peut-être été trop rapide à marquer le problème comme résolu car quelque chose d'étrange vient de se produire.
J'ai essayé d'exécuter Eval( Eval Expr( )) de @Thierry_S enveloppé autour de la commande summary, et cela a fonctionné lorsque je le testais sur la table de données de test (celle contenant uniquement les dates), mais dès que je suis passé à la table de données d'origine, cela a cessé de fonctionner et j'obtiens l'erreur suivante : Colonne non trouvée dans l'accès ou l'évaluation de 'Year' , Year/*###*/(:Date).
Maintenant, lorsque je reviens en arrière et essaie de le faire sur la « fausse » table de données de dates, j'obtiens à nouveau l'erreur.
@jthi , votre option est une possibilité, mais je devrais la transformer d'une matrice (ou d'un vecteur 1-D en une liste de nombres) - existe-t-il un moyen rapide de le faire ? Je dois le faire parce que j'utilise la liste des années dans un tableau associatif.
Merci!,
DS
Re: Code JSL et aide au résuméLes clés de votre tableau associatif sont-elles des entiers ou des chaînes ? Si ce sont des entiers, vous pouvez utiliser As List())
Names Default To Here(1);
dt = Open("$DOWNLOADS/Date.jmp");
dt_summary = dt << Summary(
Group(Transform Column("Year", Formula(Year(:Date)))),
Freq("None"),
Weight("None"),
Link to original data table(0),
output table name("Summary of Date grouped by Year"),
Private
);
years = dt_summary[0, 1];
Close(dt_summary, no save);
show(As List(years)); // As List(years) = {263, 1930, 1955, 2002, 2021, 2022, 2023, 2024, 2025};
Et s'il s'agit de chaînes, je changerais la colonne en caractère, puis je prendrais les valeurs
Names Default To Here(1);
dt = Open("$DOWNLOADS/Date.jmp");
dt_summary = dt << Summary(
Group(Transform Column("Year", Formula(Year(:Date)))),
Freq("None"),
Weight("None"),
Link to original data table(0),
output table name("Summary of Date grouped by Year"),
Private
);
Column(dt_summary, 1) << Set Data Type("Character");
years = dt_summary[0, 1];
Close(dt_summary, no save);
show(years); // years = {"263", "1930", "1955", "2002", "2021", "2022", "2023", "2024", "2025"};
Re: Code JSL et aide au résuméJ'ai un script qui fonctionnait le mois dernier
peut-être à cause d'une colonne préexistante ?

Re: Code JSL et aide au résuméRésumer fonctionne avec les colonnes Transformer :
dt = Open( "$SAMPLE_DATA/Hurricanes.jmp" );
dt << Transform Column( "tmp", Formula( year(:date) ) );
Summarize(years = by (tmp));
//dt << Delete Columns( :tmp );
Show(years)
Ne vous inquiétez pas si vous oubliez de supprimer la colonne de transformation, elle disparaîtra après la prochaine « ouverture ».
Re: Code JSL et aide au résuméSalut @jthi ,
Merci pour vos commentaires et suggestions. J'ai besoin des années sous forme de chaînes car je finis par les utiliser plus tard dans une zone de liste déroulante, qui ne prend que des chaînes.
Merci pour toute l'aide et le dépannage !
DS
Re: Code JSL et aide au résuméSalut @hogi ,
Toutes les tables de données ont le même nom de colonne :Date, et ce sont toutes des colonnes numériques continues, donc je ne sais pas pourquoi cela fonctionnait avant et ne fonctionne plus maintenant. Et, ce qui est étrange, c'est que cela fonctionne pour la table de données Hurricanes.jmp, mais cela ne fonctionne pas pour la mienne. Je ne comprends vraiment pas pourquoi cela se produit, mais c'est le cas.
Quoi qu'il en soit, la méthode suggérée par Jarmo fonctionne bien et ne finit pas par être capricieuse comme la commande Summarize(By( )).
Merci!,
DS
Re: Code JSL et aide au résuméPour Hurricanes.jmp, cela fonctionne grâce à la colonne :year .
JMP redirige l' année (:date) vers :year ?!?
Re: Code JSL et aide au résuméSalut @hogi , peut-être. Je n'en ai aucune idée et je ne comprends pas pourquoi JSL ferait quelque chose comme ça. Je viens de tester cette théorie et, bien sûr, la commande Summarize n'a PAS fonctionné car la colonne :Year avait disparu. C'est tellement étrange ! Et, même si la colonne :Date est une formule dans le fichier Hurricanes.jmp, cela n'a pas d'importance. Si la formule est supprimée, cela fonctionne très bien, mais si la colonne :Year est supprimée, cela ne fonctionne plus. Je ne comprends pas la logique JSL derrière cela, mais c'est comme ça.