Qual è il formato consigliato per specificare i nomi delle colonne per un sottoinsieme in JSL?Quando si crea una tabella di sottoinsieme in JSL, i nomi delle colonne possono essere semplicemente specificati con un carattere due punti prima del nome, come in :altezza . Tuttavia, se quel nome ha un trattino ( '-' ) in esso, che non funziona. Ma trovo che l'aggiunta di virgolette attorno al nome lo faccia funzionare. Lo script completo di seguito mostra entrambi i metodi (sebbene Grande classe.jmp non contiene nomi di colonna con trattini).
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 );
E, come desiderato, questo script viene aggiunto alla tabella JMP con il nome Script di test del nome colonna . E l'esecuzione di quello script dall'interno della tabella JMP (selezionando la sua freccia verde) rigenera correttamente la tabella del sottoinsieme. Fin qui tutto bene.
Ma accadono cose divertenti se vuoi entrare e iniziare a modificare quello script (facendo doppio clic sul nome dello script e aprendo l'editor). In questo caso, l'esecuzione dello script, così com'è, dall'interno dell'editor di script non riesce ad aggiungere i nomi delle colonne tra virgolette alla tabella del sottoinsieme.

Osservando lo script, sembra che le virgolette doppie facciano sì che i nomi delle colonne vengano trattati come nulli Come Colonna specifiche. (È molto strano che lo script venga eseguito correttamente dalla freccia verde, ma non dall'interno dell'editor di script; forse è salvato internamente in un modo, ma viene visualizzato nell'editor in modo diverso ??)
In ogni caso la mia domanda è: Esiste un modo consigliato per specificare generalmente i nomi delle colonne di sottoinsiemi per proteggersi da caratteri speciali (come i trattini) nei nomi, ma essere comunque in grado di utilizzare l'editor di script per sviluppare ed eseguire il debug di uno script? (In realtà sto generando il file Nuova sceneggiatura codice a livello di codice, quindi non so in anticipo se esistono caratteri speciali nei nomi.) Sto eseguendo JMP 14.3.0 su Mac OS.
Ri: Qual è il formato consigliato per specificare i nomi delle colonne per un sottoinsieme in JSL?Sì, sembra che le cose funzionino bene. Grazie mille Jim!
Per completezza, ecco come è andata a finire.
Innanzitutto, lo script che salva uno script nel file Grande classe.jmp tabella dati:
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 );E poi, aprendo lo script appena creato Grande classe.jmp :

E, a differenza di prima, quando eseguo questo script da questa finestra, viene eseguito come previsto.
Ri: Qual è il formato consigliato per specificare i nomi delle colonne per un sottoinsieme in JSL?Il modo corretto per fare riferimento a nomi di colonna che contengono caratteri speciali è con la funzione :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]);