Quel est le format recommandé pour spécifier les noms de colonne pour un sous-ensemble dans JSL ?Lors de la création d'une table de sous-ensemble dans JSL, les noms de colonne peuvent être spécifiés plus simplement avec un caractère deux-points avant le nom, comme dans :hauteur . Cependant, si ce nom a un tiret ( '-' ) caractère dedans, cela ne fonctionne pas. Mais je trouve que l'ajout de guillemets autour du nom le fait fonctionner. Le script complet ci-dessous illustre les deux méthodes (bien que Grande classe.jmp ne contient aucun nom de colonne avec des tirets).
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
scrName = "Col name test script";
dt << New Script( // (use of 'New Script' gets script written to data table.)
scrName,
//---- create subset with StartTime and given FOMs ----
dt = Current Data Table();
dt_subset = dt << Subset(
Output Table( "Subset of Big Class" ),
All Rows,
Columns(
:name, // not in quotes.
:"height", // in quotes -- required if col name contains '-'.
:"weight" // in quotes -- required if col name contains '-'.
);
);
);
// run script to generate graph.
dt << Run Script( scrName );
Et, si vous le souhaitez, ce script est ajouté à la table JMP avec le nom Script de test de nom de colonne . Et l'exécution de ce script à partir de la table JMP (en sélectionnant sa flèche verte) régénère correctement la table de sous-ensemble. Jusqu'ici, tout va bien.
Mais des choses amusantes se produisent si vous voulez entrer et commencer à éditer ce script (en double-cliquant sur le nom du script et en ouvrant l'éditeur). Dans ce cas, l'exécution du script, tel quel, à partir de l'éditeur de script ne permet pas d'ajouter les noms de colonne entre guillemets à la table de sous-ensemble.

En regardant le script, il semble que les guillemets doubles font que les noms de colonne sont traités comme nuls Comme colonne Caractéristiques. (Il est très étrange que le script s'exécute correctement à partir de la flèche verte, mais pas à partir de l'éditeur de script ; peut-être qu'il est enregistré en interne d'une manière, mais qu'il est rendu à l'éditeur différemment ?)
Dans tous les cas, ma question est : Existe-t-il une méthode recommandée pour spécifier généralement les noms de colonne de sous-ensemble afin de se protéger contre les caractères spéciaux (comme les tirets) dans les noms, tout en étant toujours en mesure d'utiliser l'éditeur de script pour développer et déboguer un script ? (Je suis en train de générer le Nouveau scénario code par programme, donc je ne sais pas à l'avance si des caractères spéciaux existent dans les noms.) J'exécute JMP 14.3.0 sur Mac OS.
Re : Quel est le format recommandé pour spécifier les noms de colonne pour un sous-ensemble dans JSL ?Oui, cela semble bien fonctionner. Merci beaucoup Jim!
Pour être complet, voici comment cela s'est passé.
Tout d'abord, le script qui enregistre un script sur le Grande classe.jmp tableau de données :
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column("Height / Weight", Formula(:height / :weight));
dt << New Column("Height-Weight", Formula(:height / :weight)); // using '-'.
scrName = "Col name test script";
dt << New Script( // (use of 'New Script' gets script written to data table.)
scrName,
// create subset.
dt = Current Data Table();
dt_subset = dt << Subset(
Output Table( "Subset of Big Class" ),
All Rows,
Columns(
:name,
:Name("height"),
:Name("weight"),
:Name("Height / Weight"),
:Name("Height-Weight")
);
);
);
// run script to create subset.
dt << Run Script( scrName );Et puis, en ouvrant le script nouvellement créé dans Grande classe.jmp :

Et, contrairement à avant, lorsque j'exécute ce script à partir de cette fenêtre, il s'exécute comme prévu.
Re : Quel est le format recommandé pour spécifier les noms de colonne pour un sous-ensemble dans JSL ?La bonne façon de référencer les noms de colonnes qui contiennent des caractères spéciaux est avec la fonction :Name()
names default to here(1);
dt=open("$SAMPLE_DATA/big class.jmp");
dt << new column("Height / Weight", formula(:height / :weight));
colList = dt << get column names();
show( colList );
/*
colList = {name, age, sex, height, weight, Name("Height / Weight")};
*/
dt << Distribution( Continuous Distribution( Column( colList[6] ) ) );
show(:Name("height / weight")[1]);