根据另一个数据表中的数据更新列轴参考线我希望根据来自另一个数据能力的数据添加列参考线。 例如,使用“Big Class”将使用查找数据表中的 P50 和 P95 值更新列“weight”和“height”。
查找数据表上的行对应于主表中的列名。 参考线需要从查找表列名称“P50”或“P95”中分配标签值,并且该值来自该列中的行。
显示添加的列轴参考线的示例:

查找数据表示例:

我不是很精通 JSL,所以我很感激在这个主题上得到的任何帮助。 我已经创建了一个脚本,但它没有做我想要的。
它似乎损坏了列,有时在绘制分布时它显示所有 '0' 值。 此外,如果我尝试添加 P50 和 P95 参考行,则只有最后一个会保存到列中,并将其保存在两列中。
dt = Open ("C:\Program Files\SAS\JMP\15\Samples\Data\big class.jmp");
dtLookup = New Table( "Lookup Table",
Add Rows( 2 ),
New Column( "Column Name",
Character,
Nominal,
Set Values( {"weight", "height"} )
),
New Column( "P50",
"Continuous",
Set Values( [100, 61] )
),
New Column( "P95",
"Continuous",
Set Values( [120, 70] )
)
);
col_name_list = dt << get column names(string);
col_name_list_lookup = dtLookup << get column names(string);
numRowsLookup = N Rows( dtLookup );
numColsLookup = N Cols( dtLookup );
for(n=1,n<=numRowsLookup,n++,
col_name = dtLookup[n,1];
If(contains(col_name_list,col_name),
for(j=2,j<=numColsLookup,j++,
col = Column(dt, col_name);
col_name_Lookup = col_name_list_lookup[j];
value = Column(dtLookup,col_name_Lookup)[n];
col <<
Set Property("Axis",
{
//Add Ref Line( 63, "Dashed", "Orange", "P50", 2 )
Add Ref Line( value, "Dashed", "Orange", col_name_Lookup, 2 )
});
);
);
);
谢谢,
罗杰
脚本编写回复:根据另一个数据表中的数据更新列轴参考线这是一个示例脚本。 我的猜测是,如果您尝试这样多次执行 Axis 会被覆盖,因此您可能必须将它们添加到相同的 << Set Property(构建表达式的多种不同方式来实现)。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dtLookup = New Table("Lookup Table",
Add Rows(2),
New Column("Column Name", Character, Nominal, Set Values({"weight", "height"})),
New Column("P50", "Continuous", Set Values([100, 61])),
New Column("P95", "Continuous", Set Values([120, 70]))
);
For Each Row(dtLookup,
col_name =:"Column Name"n;
//because we know we have only two lines to add and they are always added
Eval(EvalExpr(Column(dt, col_name) << Set Property("Axis", {
Add Ref Line(Expr(:P50), "Dashed", "Orange", "P50", 2),
Add Ref Line(Expr(:P95), "Dashed", "Orange", "P95", 2)
}))
);
);

不知道Eval(EvalExpr())在这里是必要的,但它不会受到伤害。
回复:根据另一个数据表中的数据更新列轴参考线谢谢贾莫。 这个解决方案要简单得多,但它似乎覆盖了任何现有的轴参考线。 您知道是否有办法保留该列中已经存在的任何轴参考线吗?
回复:根据另一个数据表中的数据更新列轴参考线我不是 100% 确定,但也许您可以先使用 << Get Propery("Axis") 获取旧的 Axis 属性,然后添加到该属性中。
也许是这样的(也可能有更简单的方法):
old_properties = Column(dt, "height") << get property("Axis");
old_with_new = Insert(old_properties, Expr(Add Ref Line(1, "Dashed", "Orange", "P45", 2)));
Eval(EvalExpr(column(dt, "height") << Set Property("Axis",{expr(old_with_new)})));回复:根据另一个数据表中的数据更新列轴参考线Insert() 函数在这里做什么? 我似乎无法正常工作。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dtLookup = New Table("Lookup Table",
Add Rows(2),
New Column("Column Name", Character, Nominal, Set Values({"weight", "height"})),
New Column("P50", "Continuous", Set Values([100, 61])),
New Column("P95", "Continuous", Set Values([120, 70]))
);
col_name_list = dt << get column names(string);
col_name_list_lookup = dtLookup << get column names(string);
For Each Row(dtLookup,
col_name =:"Column Names"n;
If(contains(col_name_list,col_name),
old_properties = Column(dt, col_name) << get property("Axis");
old_with_new = Insert(old_properties,
{Expr( Add Ref Line(Expr(:P50), "Dashed", "Orange", "P50", 2),
Add Ref Line(Expr(:P95), "Dashed", "Orange", "P95", 2)
)
});
Eval(EvalExpr(Column(dt, col_name) << Set Property("Axis",{
Expr(old_with_new)
})));
);
);