cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Choose Language Hide Translation Bar
shampton82
Level VII

Populate the manage spec limit table from another table through JMP

Hey everyone,

I was wondering if someone could help me with the JSL to populate the manage spec limit (MSL) table by loading the values from another table.  The provided script in the sample library only causes the MSL window to pop up, I then have to select the reference table and save to column properties manually.

 

Thanks for any ideas!

 

Steve

2 ACCEPTED SOLUTIONS

Accepted Solutions
jthi
Super User

Re: Populate the manage spec limit table from another table through JMP

Do you want to populate Manage Spec Limits from spec table or do you want to set spec limits from spec table to measurement table? I'm not sure if you can fill Manage Spec Limits by using Load from Limits table by scripting, but there are most likely at least two ways to fill it otherwise:

  1. Add Spec Limits to measurement datatables columns as column properties from limits table by looping (and then open Manage Spec limits if needed)
  2. Manage Spec Limits platform is Table Box, so you could set values there most likely with some scripting

I would use option 1 as it is in my opinion simpler option.

 

This script should give some ideas how to do option 1:

Names Default To Here(1);

dt = Open("$SAMPLE_DATA/Big Class.jmp");

//create spec table dt_spec = New Table("Limits", Add Rows(2), New Column("Variable", Character, "Nominal", Set Values({"height", "weight"})), New Column("LSL", Numeric, "Continuous", Format("Best", 12), Set Values([50, 49])), New Column("USL", Numeric, "Continuous", Format("Best", 12), Set Values([150, 151])), New Column("Target", Numeric, "Continuous", Format("Best", 12), Set Values([100, 101])) ); //Loop over spec table and look for matches in measurement table meas_cols = dt << Get Column Names("String"); For Each Row(dt_spec, If(Contains(meas_cols, :Variable), Eval( Eval Expr( Column(dt, :Variable) << Add Column Properties( Set Property("Spec Limits", {LSL(Expr(:LSL)), USL(Expr(:USL)), Target(Expr(:Target)), Show Limits(1)}) ) ) ) ); ); //open manage spec limits if needed dt << Manage Spec Limits(Y(dt_spec[0, "Variable"])); //Close(dt_spec, no save);
-Jarmo

View solution in original post

Re: Populate the manage spec limit table from another table through JMP

It looks like the original request was to use jsl to load a limits table into the Manage Spec Limits platform and then save to column properties.  Below is JSL that will do that.

dtLimits=New Table( "Limits",
	Add Rows( 4 ),
	New Column( "Variable",
		Character,
		"Nominal",
		Set Values( {"OZONE", "CO", "SO2", "NO"} )
	),
	New Column( "_LSL",
		Numeric,
		"Continuous",
		Format( "Best", 12 ),
		Set Values( [0.075, 5, 0.01, 0.01] )
	),
	New Column( "_USL",
		Numeric,
		"Continuous",
		Format( "Best", 12 ),
		Set Values( [0.25, 12, 0.09, 0.04] )
	),
	New Column( "_Target",
		Numeric,
		"Continuous",
		Format( "Best", 12 ),
		Set Values( [0.15, 7, 0.04, 0.025] )
	),
	New Column( "Show Limits",
		Numeric,
		"Nominal",
		Format( "Best", 12 ),
		Set Values( [1, 1, 1, 1] )
	),
	New Column( "Importance", Numeric, "Nominal", Format( "Best", 12), Set Values([2,4,1,3])),
	New Column( "Units",
		Character,
		"Nominal",
		Set Values( {"lbs", "mi", "in", "ft"} )
	),
	New Column( "Centerline",
		Numeric,
		"Continuous",
		Format( "Best", 12 ),
		Set Values( [0.15, 7, 0.05, 0.025] )
	),
	New Column( "Sigma",
		Numeric,
		"Continuous",
		Format( "Best", 12 ),
		Set Values( [.05, 4, 0.03, 0.01] )
	),
	New Column( "Measurement Sigma",
		Numeric,
		"Continuous",
		Format( "Best", 12 ),
		Set Values( [1, 5, .5, .8] )
	),
	New Column( "Lower Tolerance",
		Numeric,
		"Continuous",
		Format( "Best", 12 ),
		Set Values( [0.075, 5, 0.01, 0.02] )
	),
	New Column( "Upper Tolerance",
		Numeric,
		"Continuous",
		Format( "Best", 12 ),
		Set Values( [0.25, 12, 0.1, 0.05] )
	),
	New Column( "Reference",
		Numeric,
		"Continuous",
		Format( "Best", 12 ),
		Set Values( [0.15, 7, 0.04, 0.025] )
	),
	New Column( "Resolution",
		Numeric,
		"Continuous",
		Format( "Best", 12 ),
		Set Values( [0.05, 1, 0.08, 0.9] )
	),
	New Column( "Historical Mean",
		Numeric,
		"Continuous",
		Format( "Best", 12 ),
		Set Values( [0.15, 7, 0.04, 0.025] )
	),
	New Column( "Historical Process Sigma",
		Numeric,
		"Continuous",
		Format( "Best", 12 ),
		Set Values( [1, 2, 3, 4] )
	)	
);
dt = Open( "$SAMPLE_DATA/Cities.jmp" );
obj=dt<<Manage Spec Limits( Y( :OZONE, :CO, :SO2, :NO ), Load from Limits Table(dtLimits) );
obj << Save to Column Properties;

View solution in original post

5 REPLIES 5
jthi
Super User

Re: Populate the manage spec limit table from another table through JMP

Do you want to populate Manage Spec Limits from spec table or do you want to set spec limits from spec table to measurement table? I'm not sure if you can fill Manage Spec Limits by using Load from Limits table by scripting, but there are most likely at least two ways to fill it otherwise:

  1. Add Spec Limits to measurement datatables columns as column properties from limits table by looping (and then open Manage Spec limits if needed)
  2. Manage Spec Limits platform is Table Box, so you could set values there most likely with some scripting

I would use option 1 as it is in my opinion simpler option.

 

This script should give some ideas how to do option 1:

Names Default To Here(1);

dt = Open("$SAMPLE_DATA/Big Class.jmp");

//create spec table dt_spec = New Table("Limits", Add Rows(2), New Column("Variable", Character, "Nominal", Set Values({"height", "weight"})), New Column("LSL", Numeric, "Continuous", Format("Best", 12), Set Values([50, 49])), New Column("USL", Numeric, "Continuous", Format("Best", 12), Set Values([150, 151])), New Column("Target", Numeric, "Continuous", Format("Best", 12), Set Values([100, 101])) ); //Loop over spec table and look for matches in measurement table meas_cols = dt << Get Column Names("String"); For Each Row(dt_spec, If(Contains(meas_cols, :Variable), Eval( Eval Expr( Column(dt, :Variable) << Add Column Properties( Set Property("Spec Limits", {LSL(Expr(:LSL)), USL(Expr(:USL)), Target(Expr(:Target)), Show Limits(1)}) ) ) ) ); ); //open manage spec limits if needed dt << Manage Spec Limits(Y(dt_spec[0, "Variable"])); //Close(dt_spec, no save);
-Jarmo
shampton82
Level VII

Re: Populate the manage spec limit table from another table through JMP

 Thanks for the input.  I agree if there isn't a way to script in those steps then looping through the limits table will have to be the way to go.  I was hoping I could shortcut the more complex coding and just add in some additions commands to the MSL.  

jthi
Super User

Re: Populate the manage spec limit table from another table through JMP

You can open Load from Limits Table, but no idea how to go from there to Other and then input path to limits table

Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
obj = dt << Manage Spec Limits(Y(dt << Get Column Group("Processes")));
obj << Load from Limits Table();
-Jarmo
txnelson
Super User

Re: Populate the manage spec limit table from another table through JMP

Here is a simple script that will create a limits table that can be used for Manage Spec Limits

Names Default To Here( 1 );
// point to your table that has limits 
dt = Data Table( "your table name" );
// Create the new limits table
dtLimit = New Table( "Limits",
	New Column( "Variable", character ),
	New Column( "LSL" ),
	New Column( "USL" ),
	New Column( "Target" )
);

// Read through the original table and move to the new limits table
For( i = 1, i <= N Rows( dt ), i++,
	dtLimit << add rows( 1 );
	dtLimit:Variable[i] = dt:your column name that has the parameter name[i];
	dtLimit:LSL[i] = dt:your column name that has the LSL value[i];
	dtLimit:USL[i] = dt:your column name that has the USL value[i];
	dtLimit:Target[i] = dt:your column name that has the Target value[i];
);
Jim

Re: Populate the manage spec limit table from another table through JMP

It looks like the original request was to use jsl to load a limits table into the Manage Spec Limits platform and then save to column properties.  Below is JSL that will do that.

dtLimits=New Table( "Limits",
	Add Rows( 4 ),
	New Column( "Variable",
		Character,
		"Nominal",
		Set Values( {"OZONE", "CO", "SO2", "NO"} )
	),
	New Column( "_LSL",
		Numeric,
		"Continuous",
		Format( "Best", 12 ),
		Set Values( [0.075, 5, 0.01, 0.01] )
	),
	New Column( "_USL",
		Numeric,
		"Continuous",
		Format( "Best", 12 ),
		Set Values( [0.25, 12, 0.09, 0.04] )
	),
	New Column( "_Target",
		Numeric,
		"Continuous",
		Format( "Best", 12 ),
		Set Values( [0.15, 7, 0.04, 0.025] )
	),
	New Column( "Show Limits",
		Numeric,
		"Nominal",
		Format( "Best", 12 ),
		Set Values( [1, 1, 1, 1] )
	),
	New Column( "Importance", Numeric, "Nominal", Format( "Best", 12), Set Values([2,4,1,3])),
	New Column( "Units",
		Character,
		"Nominal",
		Set Values( {"lbs", "mi", "in", "ft"} )
	),
	New Column( "Centerline",
		Numeric,
		"Continuous",
		Format( "Best", 12 ),
		Set Values( [0.15, 7, 0.05, 0.025] )
	),
	New Column( "Sigma",
		Numeric,
		"Continuous",
		Format( "Best", 12 ),
		Set Values( [.05, 4, 0.03, 0.01] )
	),
	New Column( "Measurement Sigma",
		Numeric,
		"Continuous",
		Format( "Best", 12 ),
		Set Values( [1, 5, .5, .8] )
	),
	New Column( "Lower Tolerance",
		Numeric,
		"Continuous",
		Format( "Best", 12 ),
		Set Values( [0.075, 5, 0.01, 0.02] )
	),
	New Column( "Upper Tolerance",
		Numeric,
		"Continuous",
		Format( "Best", 12 ),
		Set Values( [0.25, 12, 0.1, 0.05] )
	),
	New Column( "Reference",
		Numeric,
		"Continuous",
		Format( "Best", 12 ),
		Set Values( [0.15, 7, 0.04, 0.025] )
	),
	New Column( "Resolution",
		Numeric,
		"Continuous",
		Format( "Best", 12 ),
		Set Values( [0.05, 1, 0.08, 0.9] )
	),
	New Column( "Historical Mean",
		Numeric,
		"Continuous",
		Format( "Best", 12 ),
		Set Values( [0.15, 7, 0.04, 0.025] )
	),
	New Column( "Historical Process Sigma",
		Numeric,
		"Continuous",
		Format( "Best", 12 ),
		Set Values( [1, 2, 3, 4] )
	)	
);
dt = Open( "$SAMPLE_DATA/Cities.jmp" );
obj=dt<<Manage Spec Limits( Y( :OZONE, :CO, :SO2, :NO ), Load from Limits Table(dtLimits) );
obj << Save to Column Properties;