cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Submit your abstract to the call for content for Discovery Summit Americas by April 23. Selected abstracts will be presented at Discovery Summit, Oct. 21- 24.
Discovery is online this week, April 16 and 18. Join us for these exciting interactive sessions.
Choose Language Hide Translation Bar
PS
PS
Level III

Combining For loop and Dispatch() command in a variability chart

Hello everyone,

 

I am new to JMP and programming in general. My current challenge:

 

I have a large data table with 800 columns. Now I would like to create box plots using the Variability Chart, but using a list, in which I first define which columns out of the 800 I would like to use. Then I create a For-loop as shown below.

 

What is the proper syntax to get the concat to work?

 

Thanks

Datalist_log = {Test1, Test2, Test33, Test50}; //first I define the list with the tests I Need. It needs to be like this in the code.

imax = N Items( Datalist );

//Boxplots
For( i = 1, i <= imax, i++, 
	Variability Chart(
		Y( Datalist_log[i] ), //Loop cycling through the list putting the respective column on the Y axis
		X( :wafernr ),
		Max Iter( 100 ),
		Conv Limit( 0.00000001 ),
		Number Integration Abscissas( 128 ),
		Number Function Evals( 65536 ),
		Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
		Std Dev Chart( 1 ),
		Show Box Plots( 1 ),
		SendToReport(
			Dispatch(
				{"Variability Chart for Test1"}, 
// This is how it looks when it works.
//But I need to replace the hard coded string with an element from
//the list defined above as a part of the Loop, for example: {"Variability Chart for " ||Datalist_log[i]},
//This is my most promising attempt. But I have failed to understand how the concat works. //If i manually change the argument to
//{"Variability Chart for XYSomethingElse"}, the outcome is the same, meaning that the
//formatting commands (lot plot, scientific axis etc.) that follow are all ignored. "2", ScaleBox, {Scale( "Log" ), Format( "Scientific", 12 ), Min( 0.0000000001 ), Max( 0.000001 ), Inc( 1 ), Minor Ticks( 0 ), Add Ref Line( UpperSpec_log[i], "Dotted", "Black", "USL", 2 )} ), Dispatch( {"Variability Chart for Test1"}, "Variability Chart", FrameBox, {Frame Size( 600, 240 ), Marker Size( 1 ), DispatchSeg( Box Plot Seg( 1 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ), DispatchSeg( Box Plot Seg( 2 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ), DispatchSeg( Box Plot Seg( 3 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ), DispatchSeg( Box Plot Seg( 4 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ), DispatchSeg( Box Plot Seg( 5 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ), DispatchSeg( Box Plot Seg( 6 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ), DispatchSeg( Box Plot Seg( 7 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ), DispatchSeg( Box Plot Seg( 8 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ), DispatchSeg( Box Plot Seg( 9 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ), DispatchSeg( Box Plot Seg( 10 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ), DispatchSeg( Box Plot Seg( 11 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ), DispatchSeg( Box Plot Seg( 12 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ), DispatchSeg( Box Plot Seg( 13 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ), DispatchSeg( Box Plot Seg( 14 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ), DispatchSeg( Box Plot Seg( 15 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ), DispatchSeg( Box Plot Seg( 16 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ), DispatchSeg( Box Plot Seg( 17 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ), DispatchSeg( Box Plot Seg( 18 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ), DispatchSeg( Box Plot Seg( 19 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ), DispatchSeg( Box Plot Seg( 20 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ), DispatchSeg( Box Plot Seg( 21 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ), DispatchSeg( Box Plot Seg( 22 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ), DispatchSeg( Box Plot Seg( 23 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ), DispatchSeg( Box Plot Seg( 24 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ), DispatchSeg( Box Plot Seg( 25 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} )} ), Dispatch( {"Variability Chart for Test1"}, "", NomAxisBox, {Set Width( 573 ), Set Height( 21 )} ), Dispatch( {"Variability Chart for Test1"}, "Varability Std Chart", FrameBox, {Frame Size( 559, 180 )} ) ) //) );

 

 

1 ACCEPTED SOLUTION

Accepted Solutions
txnelson
Super User

Re: Combining For loop and Dispatch() command in a variability chart

Here is a rework of you code, using a very powerful capability in JSL, Substitution.  I commented out your UpperSpec_log reference line, since I didn't have that list available.  However, Variability Chart Platform will automatically plot those spec limits, if you add them as Column Properties to your columns, before running the Variability Chart Platform.  Once the limits are added as Column Properties, many of the platforms will allow for the displaying of the Spec Limits.

Here is my reworked code

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Semiconductor Capability.jmp" );
Try(dt:Wafer << Set Name( "wafernr" ));

Datalist_log = {NPN1, PNP1, NPN2}; //first I define the list with the tests I Need. It needs to be like this in the code.

imax = N Items( Datalist_log );

//Boxplots
For( i = 1, i <= imax, i++,
	Eval(
		Substitute(
				Expr(
					Variability Chart(
						Y( __DataList__ ), //Loop cycling through the list putting the respective column on the Y axis
						X( :wafernr ),
						Max Iter( 100 ),
						Conv Limit( 0.00000001 ),
						Number Integration Abscissas( 128 ),
						Number Function Evals( 65536 ),
						Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
						Std Dev Chart( 1 ),
						Show Box Plots( 1 ),
						SendToReport(
							Dispatch(
								{__VarChart__}, 
								// This is how it looks when it works. 
								//But I need to replace the hard coded string with an element from
								//the list defined above as a part of the Loop, for example:
								//{"Variability Chart for " || Datalist_log[i]}, 
								//This is my most promising attempt. But I have failed to understand how the concat works.
								//If i manually change the argument to 
								//{"Variability Chart for XYSomethingElse"}, the outcome is the same, meaning that the 
								//formatting commands (lot plot, scientific axis etc.) that follow are all ignored.
								"2",
								ScaleBox,
								{Scale( "Log" ), Format( "Scientific", 12 ), Min( 0.0000000001 ), Max( 0.000001 ), Inc( 1 ), Minor Ticks( 0 )//,
								//Add Ref Line( UpperSpec_log[i], "Dotted", "Black", "USL", 2 )
									
								}
							),
							Dispatch(
								{__VarChart__},
								"Variability Chart",
								FrameBox,
								{Frame Size( 600, 240 ), Marker Size( 1 ), DispatchSeg(
									Box Plot Seg( 1 ),
									{Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )}
								), DispatchSeg( Box Plot Seg( 2 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 3 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 4 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 5 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 6 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 7 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 8 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 9 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 10 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 11 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 12 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 13 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 14 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 15 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 16 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 17 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 18 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 19 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 20 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 21 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 22 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 23 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 24 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 25 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} )}
							),
							Dispatch( {__VarChart__}, "", NomAxisBox, {Set Width( 573 ), Set Height( 21 )} ),
							Dispatch( {__VarChart__}, "Varability Std Chart", FrameBox, {Frame Size( 559, 180 )} )
						)
					)
				),
			Expr( __DataList__ ), Parse( ":" || Char( DataList_Log[i] ) ),
			Expr( __VarChart__ ), "Variability Chart for " || Char( DataList_Log[i] )
		)
	)
);
Jim

View solution in original post

3 REPLIES 3
txnelson
Super User

Re: Combining For loop and Dispatch() command in a variability chart

Here is a rework of you code, using a very powerful capability in JSL, Substitution.  I commented out your UpperSpec_log reference line, since I didn't have that list available.  However, Variability Chart Platform will automatically plot those spec limits, if you add them as Column Properties to your columns, before running the Variability Chart Platform.  Once the limits are added as Column Properties, many of the platforms will allow for the displaying of the Spec Limits.

Here is my reworked code

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Semiconductor Capability.jmp" );
Try(dt:Wafer << Set Name( "wafernr" ));

Datalist_log = {NPN1, PNP1, NPN2}; //first I define the list with the tests I Need. It needs to be like this in the code.

imax = N Items( Datalist_log );

//Boxplots
For( i = 1, i <= imax, i++,
	Eval(
		Substitute(
				Expr(
					Variability Chart(
						Y( __DataList__ ), //Loop cycling through the list putting the respective column on the Y axis
						X( :wafernr ),
						Max Iter( 100 ),
						Conv Limit( 0.00000001 ),
						Number Integration Abscissas( 128 ),
						Number Function Evals( 65536 ),
						Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
						Std Dev Chart( 1 ),
						Show Box Plots( 1 ),
						SendToReport(
							Dispatch(
								{__VarChart__}, 
								// This is how it looks when it works. 
								//But I need to replace the hard coded string with an element from
								//the list defined above as a part of the Loop, for example:
								//{"Variability Chart for " || Datalist_log[i]}, 
								//This is my most promising attempt. But I have failed to understand how the concat works.
								//If i manually change the argument to 
								//{"Variability Chart for XYSomethingElse"}, the outcome is the same, meaning that the 
								//formatting commands (lot plot, scientific axis etc.) that follow are all ignored.
								"2",
								ScaleBox,
								{Scale( "Log" ), Format( "Scientific", 12 ), Min( 0.0000000001 ), Max( 0.000001 ), Inc( 1 ), Minor Ticks( 0 )//,
								//Add Ref Line( UpperSpec_log[i], "Dotted", "Black", "USL", 2 )
									
								}
							),
							Dispatch(
								{__VarChart__},
								"Variability Chart",
								FrameBox,
								{Frame Size( 600, 240 ), Marker Size( 1 ), DispatchSeg(
									Box Plot Seg( 1 ),
									{Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )}
								), DispatchSeg( Box Plot Seg( 2 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 3 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 4 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 5 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 6 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 7 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 8 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 9 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 10 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 11 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 12 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 13 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 14 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 15 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 16 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 17 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 18 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 19 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 20 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 21 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 22 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 23 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 24 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
								DispatchSeg( Box Plot Seg( 25 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} )}
							),
							Dispatch( {__VarChart__}, "", NomAxisBox, {Set Width( 573 ), Set Height( 21 )} ),
							Dispatch( {__VarChart__}, "Varability Std Chart", FrameBox, {Frame Size( 559, 180 )} )
						)
					)
				),
			Expr( __DataList__ ), Parse( ":" || Char( DataList_Log[i] ) ),
			Expr( __VarChart__ ), "Variability Chart for " || Char( DataList_Log[i] )
		)
	)
);
Jim
PS
PS
Level III

Re: Combining For loop and Dispatch() command in a variability chart

Hi Jim,

 

Something happened after editing my post 4-5 times, the site said it needs to be reviewed before it becomes visible and then it disappeared. Thats why I didnt see the answer.

 

In fact, after posting the initial question I did something goofy and it worked, so I thought I had it worked out. But then I found it works no matter what I write after Dispatch() (see below).

 

I will try to figure out what Eval, Expr, and Substitute actually do. Thanks a lot

For( q = 1, q <= kmax, q++, 	
	Variability Chart(
		Y( Datalist_log[q] ),
		X( :wafernr ),
		Max Iter( 100 ),
		Conv Limit( 0.00000001 ),
		Number Integration Abscissas( 128 ),
		Number Function Evals( 65536 ),
		Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
		Std Dev Chart( 1 ),
		Show Box Plots( 1 ),
		Disp_String = concat Items ({VarChartText,Datalist_log[q]}), //This is useless
		SendToReport(
			Dispatch(Disp_stringxyuz12034823048, //Does not matter what I write here
				"2",
				ScaleBox,
				{Scale( "Log" ), Format( "Scientific", 12 ), Min( 0.0000000001 ), Max( 0.000001 ), Inc( 1 ), Minor Ticks( 0 ),
				Add Ref Line( UpperSpec_log[q], "Dotted", "Black", "USL", 2 )}
				),
			Dispatch(Disp_Stringsomethingelse,
				"Variability Chart",
				FrameBox,
				{Frame Size( 600, 240 ), Marker Size( 1 ), 
				DispatchSeg( Box Plot Seg( 1 ),	{Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ), 
				DispatchSeg( Box Plot S
...
...
...
txnelson
Super User

Re: Combining For loop and Dispatch() command in a variability chart

Your code snippet does not allow me to figure out the issue.  My initial suggestion is to shut down JMP and then restart it.  On rare occasions JMP will get confused.  Restarting JMP will clear that memory.

 

It would be useful if you could provide the complete script and a sample data table.

Jim