cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
  • See how to interactively organize and restructure data for analysis. Register for May 29 webinar, 2pm US ET.

Discussions

Solve problems, and share tips and tricks with other JMP users.
Choose Language Hide Translation Bar
brammern
Level I

Automated reports - selecting variable number of columns

I know that this is a pretty basic request but I'm new to coding and got a bit stumped at the last huddle.

I've writing an add-in for our quality engineers to take data in one table, split the table, add spec and control limits from another table and then I want them to have the control charts to be created for them - they either just have a dialogue box to select columns or all numeric/continuous columns are plotted.

The issue is the names and the number of columns will vary each time as it's product dependent and I want a generic addin.

This is the last bit of code that is troubling me - I can get it to work with a prescribed number of columns (13 in this case) but want it to be any number.  I know I need a couple of simple lines of code but just can't get my head around it.  Any help appreciated.

 

/* Query the user for X and Y columns */
cdlg = Column Dialog(
yCol = ColList( "Y, Response", MinCol( 1 ), MaxCol( 25 ), Data Type( "Numeric" ) ),
xCol = ColList( "X, Factor", MinCol( 1 ), MaxCol( 1 ) )
);
/* Unload the values from the Column Dialog */
my_Y1 = cdlg["yCol"][1];
my_Y2 = cdlg["yCol"][2];
my_Y3 = cdlg["yCol"][3];
my_Y4 = cdlg["yCol"][4];
my_Y5 = cdlg["yCol"][5];
my_Y6 = cdlg["yCol"][6];
my_Y7 = cdlg["yCol"][7];
my_Y8 = cdlg["yCol"][8];
my_Y9 = cdlg["yCol"][9];
my_Y10 = cdlg["yCol"][10];
my_Y11 = cdlg["yCol"][11];
my_Y12 = cdlg["yCol"][12];
my_Y13 = cdlg["yCol"][13];
my_X = cdlg["xCol"][1];
/* Use the column selections in an analysis */
Control Chart Builder(
	Show Two Shewhart Charts( 0 ),
	Sort by Row Order( 1 ),
	Connect Thru Missing( 1 ),
	Variables(
		Subgroup(my_X ),
		Y(my_Y1,my_Y2,my_Y3,my_Y4,my_Y5,my_Y6,my_Y7,my_Y8,my_Y9,my_Y10,my_Y11,my_Y12,my_Y13)),
	Chart(
		Points( Statistic( "Individual" ) ),
		Limits( Sigma( "Levey Jennings" ) ),
		Process Capability Analysis(
			Within Sigma Capability( 0 ),
			Histogram( 1, Show Within Sigma Density( 0 ) )
		)
	));
1 ACCEPTED SOLUTION

Accepted Solutions
txnelson
Super User

Re: Automated reports - selecting variable number of columns

The issues that you need to solve are dealing with an unknown number of Y columns, and then how to insert that unknown number of Y columns into the Control Chart Builder.  Below is one way to do that

/* Query the user for X and Y columns */
cdlg = Column Dialog(
	yCol = ColList( "Y, Response", MinCol( 1 ), MaxCol( 25 ), Data Type( "Numeric" ) ),
	xCol = ColList( "X, Factor", MinCol( 1 ), MaxCol( 1 ) )
);

// There isn't a need to unload the values from the Column Dialog
/* Unload the values from the Column Dialog */
/*my_Y1 = cdlg["yCol"][1];
my_Y2 = cdlg["yCol"][2];
my_Y3 = cdlg["yCol"][3];
my_Y4 = cdlg["yCol"][4];
my_Y5 = cdlg["yCol"][5];
my_Y6 = cdlg["yCol"][6];
my_Y7 = cdlg["yCol"][7];
my_Y8 = cdlg["yCol"][8];
my_Y9 = cdlg["yCol"][9];
my_Y10 = cdlg["yCol"][10];
my_Y11 = cdlg["yCol"][11];
my_Y12 = cdlg["yCol"][12];
my_Y13 = cdlg["yCol"][13];
my_X = cdlg["xCol"][1];*/

// What is returned from the ColDialog for yCol is a list of columns in the 
// form of expressions, not strings.  Control Chart builder does not seem to
// like processing of lists of a length greater than 1.  So to get around that
// I take the list and convert it into a single character string.  I have found
// the fastest way to do this is to strip off the "{}" from the list leaving
// everything inside of the list as a single string 
temp = Substr( Char( cdlg["yCol"] ), 2, Length( Char( cdlg["yCol"] ) ) - 2 );

/* Use the column selections in an analysis */
// Build a character string that is the complete command string
// to run the Control Chart Builder, inserting the above created 
// temp variable and then run it. 
Eval(
	Parse(
		"Control Chart Builder(
	Show Two Shewhart Charts( 0 ),
	Sort by Row Order( 1 ),
	Connect Thru Missing( 1 ),
	Variables(
		Subgroup(eval(cdlg[\!"xCol\!"])),
		Y("
		 || temp ||
		")),
	Chart(
		Points( Statistic( \!"Individual\!" ) ),
		Limits( Sigma( \!"Levey Jennings\!" ) ),
		Process Capability Analysis(
			Within Sigma Capability( 0 ),
			Histogram( 1, Show Within Sigma Density( 0 ) )
		)
	));"
	)
);
	
	
;
Jim

View solution in original post

2 REPLIES 2
txnelson
Super User

Re: Automated reports - selecting variable number of columns

The issues that you need to solve are dealing with an unknown number of Y columns, and then how to insert that unknown number of Y columns into the Control Chart Builder.  Below is one way to do that

/* Query the user for X and Y columns */
cdlg = Column Dialog(
	yCol = ColList( "Y, Response", MinCol( 1 ), MaxCol( 25 ), Data Type( "Numeric" ) ),
	xCol = ColList( "X, Factor", MinCol( 1 ), MaxCol( 1 ) )
);

// There isn't a need to unload the values from the Column Dialog
/* Unload the values from the Column Dialog */
/*my_Y1 = cdlg["yCol"][1];
my_Y2 = cdlg["yCol"][2];
my_Y3 = cdlg["yCol"][3];
my_Y4 = cdlg["yCol"][4];
my_Y5 = cdlg["yCol"][5];
my_Y6 = cdlg["yCol"][6];
my_Y7 = cdlg["yCol"][7];
my_Y8 = cdlg["yCol"][8];
my_Y9 = cdlg["yCol"][9];
my_Y10 = cdlg["yCol"][10];
my_Y11 = cdlg["yCol"][11];
my_Y12 = cdlg["yCol"][12];
my_Y13 = cdlg["yCol"][13];
my_X = cdlg["xCol"][1];*/

// What is returned from the ColDialog for yCol is a list of columns in the 
// form of expressions, not strings.  Control Chart builder does not seem to
// like processing of lists of a length greater than 1.  So to get around that
// I take the list and convert it into a single character string.  I have found
// the fastest way to do this is to strip off the "{}" from the list leaving
// everything inside of the list as a single string 
temp = Substr( Char( cdlg["yCol"] ), 2, Length( Char( cdlg["yCol"] ) ) - 2 );

/* Use the column selections in an analysis */
// Build a character string that is the complete command string
// to run the Control Chart Builder, inserting the above created 
// temp variable and then run it. 
Eval(
	Parse(
		"Control Chart Builder(
	Show Two Shewhart Charts( 0 ),
	Sort by Row Order( 1 ),
	Connect Thru Missing( 1 ),
	Variables(
		Subgroup(eval(cdlg[\!"xCol\!"])),
		Y("
		 || temp ||
		")),
	Chart(
		Points( Statistic( \!"Individual\!" ) ),
		Limits( Sigma( \!"Levey Jennings\!" ) ),
		Process Capability Analysis(
			Within Sigma Capability( 0 ),
			Histogram( 1, Show Within Sigma Density( 0 ) )
		)
	));"
	)
);
	
	
;
Jim
brammern
Level I

Re: Automated reports - selecting variable number of columns

Thanks - that's brilliant.

I'd never have got there myself

Recommended Articles