条件满足后如何执行JSL命令尊敬的 JMP 社区用户,
我是 JMP 的新人,我一直面临一个问题。 希望我能得到你们的帮助。
我有一个数据表。 我想仅针对某些特定值的列运行图形生成器。
例如,我想选择属于“monitor_set_name”和“measurement_set_name”列的AB766和RSDF单元格;以及对应于“AB766”和“RSDF”的其他列和行

然后,我想为包含我需要的信息的表运行“图形生成器”。
如果“monitor_set_name”和“measurement_set_name”不包含“AB766”和“RSDF”,我将跳过运行“graph builder”
你能给我一些建议吗?
真挚地,
大规模定制Re: 满足条件后如何执行JSL命令亲爱的布雷迪先生,
感谢您的支持。 我稍后会在我的脚本中应用您的建议。
真挚地,
Re: 满足条件后如何执行JSL命令让我尝试一下非常感谢。
顺便说一句,我找到了论坛中建议的一种方法,它对我有用
CHECK_U2_CT_HDF = Contains(
df << get column names( string ),
"centerline@u2_holdforceduration_2"
);
If( CHECK_U2_CT_HDF == 0,
df << New Column( "centerline@u2_holdforceduration_2",
Numeric,
Continuous,
Format( "Best", 10 )
)
);
感谢您的大力支持!
Re: 满足条件后如何执行JSL命令Try() 函数是处理此问题的一种方法。
U1_UCL_HDF =Try( Column( dt, "up_control_lmt@u1_holdforceduration_2" )[1],.);
if(isMissing(:U1_UCL_HDF),
add and populate the new column
);
如果列和行存在,U1_UCL_HDF 将具有有效值,但如果尝试失败,它将返回缺失值。因此流程可能类似于
Re: 满足条件后如何执行JSL命令亲爱的特克斯尼尔森,
当 JMP 找不到引用列时,它将停止运行 --> 你是对的
我想澄清我的问题。 事情是我尝试从我公司的系统中获取数据。 由于产品类别不同,数据表会有所不同。
例如:
产品A:包含栏: up_control_lmt@u1_holdforceduration_2和up_control_lmt@u2_holdforceduration_2
产品B:仅包含列: up_control_lmt@u1_holdforceduration_2
因为我想构建一个可以应用于这两种产品的脚本。
在您的建议中,如果产品 B 的数据表不包含列,我需要为产品 B 添加一列: up_control_lmt@u2_holdforceduration_2。
因此,我可以使用函数来检查产品 B 的数据表是否包含: up_control_lmt@u2_holdforceduration_2。 --> 如果数据表确实包含: up_control_lmt@u2_holdforceduration_2。 , 我将向数据表添加新列。
希望您能理解我的问题?
真挚地,
Re: 满足条件后如何执行JSL命令我很困惑。您表明您想要从指定的列(单元格 1)读取值,但您没有这样的列。
当 JMP 找不到引用的列时,它将停止运行。因此,一旦发现错误,就不会继续处理。
如果您没有这样的列但想要拥有它,则需要将该列添加到数据表中,并使用您希望其具有的值填充单元格 1。这就是解决方案......但我认为我并没有真正理解这个问题。
Re: 满足条件后如何执行JSL命令亲爱的特克斯尼尔森,
有用。 谢谢你的建议。 我将参考脚本指南进行学习。
同时,我还有更多问题。
我想从列的单元格中提取值,然后将值分配给变量,因为我想使用变量进行绘图。
但是,如果我的表不包含列: lo_control_lmt@u2_holdforceduration_2或者 : up_control_lmt@u2_holdforceduration_2 ,我的脚本没有显示任何图表
如果我删除下面脚本中的 2 行,我的脚本将显示图表
U2_UCL_HDF = 列(dt,"up_control_lmt@u2_holdforceduration_2")[1];
U2_LCL_HDF = 列(dt,"lo_control_lmt@u2_holdforceduration_2")[1];
对于这种情况有什么解决方案吗? 真挚地。
我的脚本:
U1_UCL_HDF = Column( dt, "up_control_lmt@u1_holdforceduration_2" )[1]; //extract value from cell
U1_LCL_HDF = Column( dt, "lo_control_lmt@u1_holdforceduration_2" )[1]; //extract value from cell
U2_UCL_HDF = Column( dt, "up_control_lmt@u2_holdforceduration_2" )[1]; //extract value from cell
U2_LCL_HDF = Column( dt, "lo_control_lmt@u2_holdforceduration_2" )[1]; // extract value from cell
NW = New Window( "KPP summarize",
Variability Chart(
Y( :HOLDFORCEDURATION_2 ),
X( :COMPLEVEL_1, :LINK_ID, :TEST_OR_BOND_HEAD_ID, :LOT, :BONDSTAGE, :CARRIER_X ),
Max Iter( 100 ),
Conv Limit( 0.00000001 ),
Number Integration Abscissas( 128 ),
Number Function Evals( 65536 ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Connect Cell Means( 1 ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
AIAG Labels( 0 ),
SendToReport(
Dispatch(
{"Variability Chart for HOLDFORCEDURATION_2"},
"2",
ScaleBox,
{Min( 332 ), Max( 641 ), Inc( 50 ), Minor Ticks( 1 ),
Add Ref Line( 0, "Dotted", "Medium Light Gray", "", 1 ),
Add Ref Line( U1_UCL_HDF, "Solid", "Red", "UCL_U1", 2 ),
Add Ref Line( U1_LCL_HDF, "Solid", "Red", "LCL_U1", 2 ), // put the value in here extract
Add Ref Line( U1_CT_HDF, "DashDot", "Red", "CL_U1", 2 ), // put the value in here extract
Add Ref Line( U2_UCL_HDF, "Solid", "BlueCyan", "UCL_U2", 2 ), // put the value in here extract
Add Ref Line( U2_LCL_HDF, "Solid", "BlueCyan", "LCL_U2", 2 ), // put the value in here extract
Add Ref Line( U2_CT_HDF, "DashDot", "BlueCyan", "CL_U2", 2 )} // put the value in here extract
)
)
)
);Re: 满足条件后如何执行JSL命令您的变量“df”指向子集数据表。当您从数据表创建报表时,它不会成为数据表的一部分。它本身就是一个实体。因此,访问创建的报告的最简单方法是指定一个变量来指向它。我已经在您的脚本的以下修改中完成了此操作。
gb = df << Graph Builder(
变量“gb”指向图形生成器对象。稍后在代码中,“保存图片”消息将应用于图形生成器平台生成的报告
report(gb) << save picture( "C:\Users\lamquocb\image.jpg" );
这是修改后的脚本
names default to here( 1 );
dt = Open( "raw_data.csv", "invisible" );
dt << Select Where(
:monitor_set_name == "CSP_FAST_TC" & :spc_chart_subset == "STDDEV" & :measurement_set_name == "U1_X"
);
df = dt << Subset( Selected Rows( 1 ), Selected columns only( 0 ), "invisible" );
gb = df << Graph Builder(
Size( 1056, 675 ),
Show Control Panel( 0 ),
Automatic Recalc( 0 ),
Variables(
X( :spc_txn_date ),
Y( :chart_value ),
Y( :lo_control_lmt, Position( 1 ) ),
Y( :up_control_lmt, Position( 1 ) ),
Y( :centerline, Position( 1 ) ),
Group Y( :monitor_set_name ),
Group Y( :measurement_set_name ),
Group Y( :spc_chart_subset ),
Wrap( :spc_entity )
),
Elements(
Line( X, Y( 1 ), Y( 2 ), Y( 3 ), Y( 4 ), Legend( 25 ), Connection( "Curve" ), Smoothness( 0.5 ) )
),
SendToReport(
Dispatch( {}, "spc_txn_date", ScaleBox, {Label Row( Automatic Font Size( 0 ) )} ),
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
25,
Properties( 2, {Line Color( 19 )} ),
Properties( 3, {Line Color( 0 ), Line Style( "Dotted" )} )
)}
)
)
);
report(gb) << save picture( "C:\Users\lamquocb\image.jpg" );
我强烈建议您花时间阅读 JMP 文档库中的脚本指南,该指南位于“帮助”下拉菜单下!
Re: 满足条件后如何执行JSL命令亲爱的特克斯尼尔森,
有用。 非常欣赏。
我尝试遵循您的指导并为自己应用
dt = Open( "raw_data.csv", "invisible" );
dt << Select Where(
:monitor_set_name == "CSP_FAST_TC" & :spc_chart_subset == "STDDEV" & :measurement_set_name == "U1_X"
);
df = dt << Subset( Selected Rows( 1 ), Selected columns only( 0 ), "invisible" );
df << Graph Builder(
Size( 1056, 675 ),
Show Control Panel( 0 ),
Automatic Recalc( 0 ),
Variables(
X( :spc_txn_date ),
Y( :chart_value ),
Y( :lo_control_lmt, Position( 1 ) ),
Y( :up_control_lmt, Position( 1 ) ),
Y( :centerline, Position( 1 ) ),
Group Y( :monitor_set_name ),
Group Y( :measurement_set_name ),
Group Y( :spc_chart_subset ),
Wrap( :spc_entity )
),
Elements(
Line( X, Y( 1 ), Y( 2 ), Y( 3 ), Y( 4 ), Legend( 25 ), Connection( "Curve" ), Smoothness( 0.5 ) )
),
SendToReport(
Dispatch( {}, "spc_txn_date", ScaleBox, {Label Row( Automatic Font Size( 0 ) )} ),
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
25,
Properties( 2, {Line Color( 19 )} ),
Properties( 3, {Line Color( 0 ), Line Style( "Dotted" )} )
)}
)
)
);
df << save picture( "C:\Users\lamquocb\image.jpg" );
但是,我遇到了另一个问题,即无法保存 df 的图片图形生成器。
我尝试访问我想要存储图片的位置,但找不到。
你有什么建议吗?
真挚地,
Re: 满足条件后如何执行JSL命令你好,
如果您是 JMP 新手,请务必查看本地数据过滤器和列切换器。 本地数据过滤器可能会在这里帮助您...... 我在示例中包含了一个列切换器,只是为了让您知道它可以做什么。
只需单击菜单项即可将图表限制为您想要考虑的数据。 不需要编码,而且很容易使用......任何人都可以使用它们。
要获取本地数据过滤器,请从图形生成器的红色小三角菜单中选择添加本地数据过滤器。
要获取列切换器,请从主菜单中选择重做 > 列切换器。 您还必须选择要换出的列以及要在其中轮换的列。 请务必在此组中包含要换出的列。 所有列必须具有相同的数据类型。
运行下面的脚本来了解这些的实际情况。
干杯,
布雷迪

Names Default To Here(1);
dt = open ("$Sample_Data\Car Physical Data.jmp");
Graph Builder(
Size( 526, 448 ),
Show Control Panel( 0 ),
Variables( X( :Country ), Y( :Gas Tank Size ) ),
Elements( Box Plot( X, Y, Legend( 8 ) ), Points( X, Y, Legend( 9 ) ) ),
Local Data Filter(
Show Histograms and Bars( 0 ),
Add Filter(
columns( :Type ),
Where( :Type == "Compact" ),
Display( :Type, N Items( 5 ) )
)
),
Column Switcher(
:Gas Tank Size,
{:Weight, :Turning Circle, :Displacement, :Horsepower, :Gas Tank Size}
)
);
Re: 满足条件后如何执行JSL命令为了生成下面的 JSL,我只需以交互方式运行这些步骤,然后从日志中获取代码并将其粘贴到脚本窗口中。
names default to here(1);
// Open Data Table: big class.jmp
// → Data Table( "big class" )
Open( "$SAMPLE_DATA/big class.jmp" );
// Select matching cells
Data Table( "big class" ) << Select Where( :age == 12 & :sex == "F" );
// Subset data table
// → Data Table( "Subset of big class" )
Data Table( "big class" ) << Subset( Selected Rows( 1 ), Selected columns only( 0 ) );
// Report snapshot: Subset of big class - Graph Builder
Data Table( "Subset of big class" ) << Graph Builder(
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 3 ) ), Smoother( X, Y, Legend( 4 ) ) )
);
// Invert current selection
Data Table( "big class" ) << Invert Row Selection;
// Subset data table
// → Data Table( "Subset of big class 2" )
Data Table( "big class" ) << Subset( Selected Rows( 1 ), Selected columns only( 0 ) );
// Report snapshot: Subset of big class 2 - Graph Builder
Data Table( "Subset of big class 2" ) <<
Graph Builder(
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 6 ) ), Smoother( X, Y, Legend( 7 ) ) )
);