JMP 按 JSL 中的列名列表制表你好,
我有表格,我想按“学生”列、“主题”列和“班级”列将其制成表格,但数据中没有必要提供“主题”列和“班级”列。
如果它有“主题”列但没有“班级”列,那么它应该按“学生”列和“主题”列制表。
如果它有“类”列但没有“主题”列,那么它应该按“学生”列和“类”列制表。
如果它包含所有列,那么它应该按所有三列制表。 下面是一些例子。
示例 1:(它同时包含“主题”列和“类”列)
输入:
| 班级 | 学生 | 分数 | 主题 |
| 1个 | A | 10 | 数学 |
| 2个 | A | 15 | 科学 |
| 3个 | A | 12 | 科学 |
| 1个 | 乙 | 15 | 数学 |
| 2个 | 乙 | 12 | 科学 |
输出:
| 班级 | 学生 | 主题 | 最大(分数) |
| 1个 | A | 数学 | 10 |
| 2个 | A | 科学 | 15 |
| 3个 | A | 科学 | 12 |
| 1个 | 乙 | 数学 | 15 |
| 2个 | 乙 | 科学 | 12 |
示例 2:(它有“Class”列但没有“subject”列)
输入:
| 班级 | 学生 | 分数 |
| 1个 | A | 10 |
| 2个 | A | 15 |
| 3个 | A | 12 |
| 1个 | 乙 | 15 |
| 2个 | 乙 | 12 |
输出:
| 班级 | 学生 | 最大(分数) |
| 1个 | A | 10 |
| 2个 | A | 15 |
| 3个 | A | 12 |
| 1个 | 乙 | 15 |
| 2个 | 乙 | 12 |
示例 3:(它有“主题”列但没有“类”列)
输入:
| 学生 | 分数 | 主题 |
| A | 10 | 数学 |
| A | 15 | 科学 |
| A | 12 | 科学 |
| 乙 | 15 | 数学 |
| 乙 | 12 | 科学 |
输出:
| 学生 | 主题 | 最大(分数) |
| A | 数学 | 10 |
| A | 科学 | 15 |
| 乙 | 数学 | 15 |
| 乙 | 科学 | 12 |
请帮我解决这个问题。
谢谢
回复:JMP 按 JSL 中的列名列表制表谢谢你@tsnelson回复:JMP 按 JSL 中的列名列表制表这是你想要的???
names default to here(1);
dt=current data table();
// The list of columns to look for
theList={"Class","Student","Subject", "xxxxxx","xxxxxx"};
allColList = dt << get column names(string);
// Remove any columns from theList that are not in the data table
For(i=n items(theList),i>=1, i--,
If(n rows(loc(allColList,theList[i]))==0,
remove from(theList,i,1)
)
);
// Run the tabulate
Tabulate(
Show Control Panel( 0 ),
Add Table(
Column Table( Analysis Columns( :Marks ), Statistics( Max ) ),
Row Table( Grouping Columns( eval(theList) ) )
)
);
如果不同的目标列扮演分组列以外的角色,您将需要针对不同的所需输入语法开发代码。
回复:JMP 按 JSL 中的列名列表制表@txnelson我有 5 列,例如“类”列和“主题”列,它们可以存在于数据中,也可以不存在。 现在要制表,我必须给出 IF 条件的所有排列,每个排列都有单独的制表代码。 它会让代码变得过于凌乱。
相反,如果我们可以使用单个 Tabulate 函数来做到这一点,我们在其中给出所有列的列表,它将只采用数据中可用的那些列。
谢谢回复:JMP 按 JSL 中的列名列表制表将 Tabulate 代码压缩为一组代码,会使代码复杂得多。
当你说你有更多的专栏时,你能进一步解释吗?
回复:JMP 按 JSL 中的列名列表制表@txnelson感谢回复。
我们可以用单个制表脚本块解决这个问题吗,因为在我的原始数据集中我有很多这样的列。回复:JMP 按 JSL 中的列名列表制表在示例数据表上运行 3 个场景中的每一个,将每次运行的每个脚本保存到脚本窗口中。然后分别取相应的脚本,在指定位置放到下面的脚本中
names default to here(1);
dt= current data table();
colNames = dt << get column names(string);
// Here is the IF() structure to add in the tabulate code to
If( N Rows(loc(colNames, "Subject" ) ) > 0 & N Rows(loc(colNames, "Class" ) ) > 0,
// Add in the tabulate code that has Student, Subject and Class
,
N Rows(loc(colNames, "Subject" ) ) > 0,
// Add in the tablulate code that has just Student and Subject
,
N Rows(loc(colNames, "Class" ) ) > 0,
// Add in the tablulate code that has just Student and Class
);