為 JSL 中的子集指定列名的推薦格式是什麼?在 JSL 中創建子表時,最簡單的列名可以在名稱前用冒號字符指定,如:高度. 但是,如果該名稱有破折號 ( '-' ) 字符,這是行不通的。 但我發現在名稱周圍添加引號可以使其正常工作。 下面的完整腳本演示了這兩種方法(儘管大類.jmp不包含任何帶有破折號的列名)。
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 );
並且,根據需要,此腳本會添加到 JMP 表中,名稱為列名測試腳本. 從 JMP 表中執行該腳本(通過選擇其綠色箭頭)會正確地重新生成子集表。 到目前為止,一切都很好。
但是如果您想進入並開始編輯該腳本(通過雙擊腳本名稱並打開編輯器),就會發生有趣的事情。 在這種情況下,從腳本編輯器中按原樣運行腳本無法將帶引號的列名添加到子集表中。

查看腳本,似乎雙引號導致列名被視為 null作為列規格。 (很奇怪,腳本從綠色箭頭運行正常,但不是從腳本編輯器中運行;也許它在內部以一種方式保存,但以不同的方式呈現給編輯器??)
無論如何,我的問題是:是否有推薦的方法來指定子集列名稱,以防止名稱中出現特殊字符(如破折號),但仍然能夠使用腳本編輯器開發和調試腳本? (我實際上正在生成新腳本以編程方式編寫代碼,所以我不知道名稱中是否存在任何特殊字符。)我在 Mac OS 上運行 JMP 14.3.0。
回复:為 JSL 中的子集指定列名的推薦格式是什麼?是的,這似乎使事情順利進行。 非常感謝你,吉姆!
為了完整起見,結果如下。
首先,將腳本保存到大類.jmp數據表:
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 );然後,打開新創建的腳本大類.jmp :

而且,與以前不同,當我從這個窗口運行這個腳本時,它會按預期運行。
回复:為 JSL 中的子集指定列名的推薦格式是什麼?引用包含特殊字符的列名的正確方法是使用 :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]);