cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Try the Materials Informatics Toolkit, which is designed to easily handle SMILES data. This and other helpful add-ins are available in the JMP® Marketplace
Choose Language Hide Translation Bar

Distribution graph with process capability not working in script

Hi,
I want to use this generated script on numerous columns:

Distribution(
	Stack( 1 ),
	Continuous Distribution(
		Column( :"VDD_ILIMIT"n ),
		Horizontal Layout( 1 ),
		Vertical( 0 ),
		Outlier Box Plot( 0 ),
		Process Capability( LSL( . ), Target( . ), USL( 0.5 ), Show as Graph Reference Lines )
	),
	SendToReport( Dispatch( {"VDD_ILIMIT"}, "1", ScaleBox, {Add Ref Line( 0.5, "Solid", "Blue", "USL", 1 )} ) )
);

When using this script, all works well, and I get a distribution graph with process capability plot at the same window.
When I try to run it on a number of columns, I get only the distribution graphs for each column, without the process capability plot and data.

// Open the data table
dt = Current Data Table();
colnames = dt << get column names( numeric, string );
For( i = 1, i <= N Items( colnames ), i++,
	If( Contains( Column( colnames[i] ) << Get Name, "ILIMIT" ), 
        // Create a distribution graph for the column
		meanValue = Col Mean( colnames[i] );
		stdDevValue = Col Std Dev( colnames[i] );
		ppkValue = 2;
		uslValue = meanValue + ppkValue * 3 * stdDevValue;
		Distribution(
			Stack( 1 ),
			Continuous Distribution(
				Column( colnames[i] ),
				Horizontal Layout( 1 ),
				Vertical( 0 ),
				Outlier Box Plot( 0 ),
				Process Capability( LSL( . ), Target( . ), USL( uslValue ), Show as Graph Reference Lines )
			),
			SendToReport( Dispatch( {colnames[i]}, "1", ScaleBox, {Add Ref Line( uslValue, "Solid", "Blue", "USL", 1 )} ) )
		);
	)
);

What am I doing wrong, and why is it behaving in this way?

1 ACCEPTED SOLUTION

Accepted Solutions
txnelson
Super User

Re: Distribution graph with process capability not working in script

Below is a modification to your code that should work for you

// Open the data table
dt = Current Data Table();
colnames = dt << get column names( numeric, string );
i = 2;
For( i = 1, i <= N Items( colnames ), i++, 
	//If( Contains( Column( colnames[i] ) << Get Name, "eight" ), 
	If( Contains( colnames[i], "ILIMIT" ), 
        // Create a distribution graph for the column
		//meanValue = Col Mean( colnames[i] );
		meanValue = Col Mean( Column( dt, colnames[i] ) );
		//stdDevValue = Col Std Dev( colnames[i] );
		stdDevValue = Col Std Dev( Column( dt, colnames[i] ) );
		ppkValue = 2; // ???
		
		uslValue = .5; // this value is used below, but was not assigned
		
		Eval(
			Eval Expr(  // JMP does not evaluate items in a list as parsing
				        // therefore it has to be preprocessed
				Distribution(
					Stack( 1 ),
					Continuous Distribution(
						Column( colnames[i] ),
						Horizontal Layout( 1 ),
						Vertical( 0 ),
						Outlier Box Plot( 0 ),
						Process Capability( LSL( . ), Target( . ), USL( Expr( uslValue ) ), Show as Graph Reference Lines )
					),
					SendToReport(
						Dispatch( {Expr( colnames[i] )}, "1", ScaleBox, {Add Ref Line( Expr( uslValue ), "Solid", "Blue", "USL", 1 )} )
					)
				)
			)
		);
	)
);
Jim

View solution in original post

2 REPLIES 2
txnelson
Super User

Re: Distribution graph with process capability not working in script

Below is a modification to your code that should work for you

// Open the data table
dt = Current Data Table();
colnames = dt << get column names( numeric, string );
i = 2;
For( i = 1, i <= N Items( colnames ), i++, 
	//If( Contains( Column( colnames[i] ) << Get Name, "eight" ), 
	If( Contains( colnames[i], "ILIMIT" ), 
        // Create a distribution graph for the column
		//meanValue = Col Mean( colnames[i] );
		meanValue = Col Mean( Column( dt, colnames[i] ) );
		//stdDevValue = Col Std Dev( colnames[i] );
		stdDevValue = Col Std Dev( Column( dt, colnames[i] ) );
		ppkValue = 2; // ???
		
		uslValue = .5; // this value is used below, but was not assigned
		
		Eval(
			Eval Expr(  // JMP does not evaluate items in a list as parsing
				        // therefore it has to be preprocessed
				Distribution(
					Stack( 1 ),
					Continuous Distribution(
						Column( colnames[i] ),
						Horizontal Layout( 1 ),
						Vertical( 0 ),
						Outlier Box Plot( 0 ),
						Process Capability( LSL( . ), Target( . ), USL( Expr( uslValue ) ), Show as Graph Reference Lines )
					),
					SendToReport(
						Dispatch( {Expr( colnames[i] )}, "1", ScaleBox, {Add Ref Line( Expr( uslValue ), "Solid", "Blue", "USL", 1 )} )
					)
				)
			)
		);
	)
);
Jim
jthi
Super User

Re: Distribution graph with process capability not working in script

JMP isn't able to add the reference lines correctly (and you don't seem to have value for upperlimit?). Below is an example which can give you some ideas

Names Default To Here(1);

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

// Open the data table
colnames = dt << get column names(numeric, continuous, string);
dists = {};
For Each({colname}, colnames,
	meanValue = Col Mean(Column(dt, colname));
	stdDevValue = Col Std Dev(Column(dt, colname));
	ppkValue = 2;
	uslValue = 3*stddevValue + meanValue;
	dist = Eval(EvalExpr(dt << Distribution(
		Stack(1),
		Continuous Distribution(
			Column(Eval(colname)),
			Horizontal Layout(1),
			Vertical(0),
			Outlier Box Plot(0),
			Process Capability(
				LSL(.),
				Target(.),
				USL(Expr(uslValue)),
				Show as Graph Reference Lines
			)
		),
		SendToReport(
			Dispatch(
				{colnames[i]},
				"1",
				ScaleBox,
				{Add Ref Line(Expr(uslValue), "Solid", "Blue", "USL", 1)}
			)
		)
	)));
	Insert Into(dists, dist);
	
);
-Jarmo