<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Is it possible to use the Missing Data Pattern to speed up data preparation? in Discussions</title>
    <link>https://community.jmp.com/t5/Discussions/Is-it-possible-to-use-the-Missing-Data-Pattern-to-speed-up-data/m-p/344739#M59459</link>
    <description>&lt;P&gt;Lack of consistent data quality hinders data analysis and deters many from embarking on a Machine Learning journey.&lt;/P&gt;&lt;P&gt;In the semiconductor industry it is expected that processes are continuously improved. Unfortunately, one of the side effects of such endeavours is a change in data structure. One reason for this could be the renaming of the process step.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have simulated such a case below where 20 lots have been processed through 4 process steps having step name changes.&lt;/P&gt;&lt;P&gt;For root cause analysis it is necessary to compare the probe results from equipment associated with a specific step. In the case below we can see that the data have become stratified.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I know that I could continue to use the "Combine Columns" feature in JMP (Cols\Utilities\Combine columns...) but in reality I have several hundreds of columns which need to be checked and combined.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;When using the Tables\Missing Data Pattern feature in JMP I can readily see the data structures and potential columns to be combined.&lt;/P&gt;&lt;P&gt;I was wondering if the information from the Missing Data Pattern could be used to script the combine columns requirement?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;There would be several checks required before automating the process such as:&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Are columns representing the same Step in the process?&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Are the contents of both steps similar?&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Is the Missing Data pattern and inverse for paired columns?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Broken data looks like:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jpol_0-1609239184815.png" style="width: 400px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/29123i99E6632F8E1C9AB9/image-size/medium?v=v2&amp;amp;px=400" role="button" title="jpol_0-1609239184815.png" alt="jpol_0-1609239184815.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Missing Data Pattern:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jpol_1-1609239236594.png" style="width: 400px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/29124i605DF91F1574F79C/image-size/medium?v=v2&amp;amp;px=400" role="button" title="jpol_1-1609239236594.png" alt="jpol_1-1609239236594.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Re constructed data:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jpol_2-1609239266654.png" style="width: 400px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/29125iA76F7A7F86CD5592/image-size/medium?v=v2&amp;amp;px=400" role="button" title="jpol_2-1609239266654.png" alt="jpol_2-1609239266654.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- jpol&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Sat, 10 Jun 2023 23:24:27 GMT</pubDate>
    <dc:creator>jpol</dc:creator>
    <dc:date>2023-06-10T23:24:27Z</dc:date>
    <item>
      <title>Is it possible to use the Missing Data Pattern to speed up data preparation?</title>
      <link>https://community.jmp.com/t5/Discussions/Is-it-possible-to-use-the-Missing-Data-Pattern-to-speed-up-data/m-p/344739#M59459</link>
      <description>&lt;P&gt;Lack of consistent data quality hinders data analysis and deters many from embarking on a Machine Learning journey.&lt;/P&gt;&lt;P&gt;In the semiconductor industry it is expected that processes are continuously improved. Unfortunately, one of the side effects of such endeavours is a change in data structure. One reason for this could be the renaming of the process step.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have simulated such a case below where 20 lots have been processed through 4 process steps having step name changes.&lt;/P&gt;&lt;P&gt;For root cause analysis it is necessary to compare the probe results from equipment associated with a specific step. In the case below we can see that the data have become stratified.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I know that I could continue to use the "Combine Columns" feature in JMP (Cols\Utilities\Combine columns...) but in reality I have several hundreds of columns which need to be checked and combined.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;When using the Tables\Missing Data Pattern feature in JMP I can readily see the data structures and potential columns to be combined.&lt;/P&gt;&lt;P&gt;I was wondering if the information from the Missing Data Pattern could be used to script the combine columns requirement?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;There would be several checks required before automating the process such as:&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Are columns representing the same Step in the process?&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Are the contents of both steps similar?&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Is the Missing Data pattern and inverse for paired columns?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Broken data looks like:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jpol_0-1609239184815.png" style="width: 400px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/29123i99E6632F8E1C9AB9/image-size/medium?v=v2&amp;amp;px=400" role="button" title="jpol_0-1609239184815.png" alt="jpol_0-1609239184815.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Missing Data Pattern:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jpol_1-1609239236594.png" style="width: 400px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/29124i605DF91F1574F79C/image-size/medium?v=v2&amp;amp;px=400" role="button" title="jpol_1-1609239236594.png" alt="jpol_1-1609239236594.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Re constructed data:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jpol_2-1609239266654.png" style="width: 400px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/29125iA76F7A7F86CD5592/image-size/medium?v=v2&amp;amp;px=400" role="button" title="jpol_2-1609239266654.png" alt="jpol_2-1609239266654.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- jpol&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 10 Jun 2023 23:24:27 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/Is-it-possible-to-use-the-Missing-Data-Pattern-to-speed-up-data/m-p/344739#M59459</guid>
      <dc:creator>jpol</dc:creator>
      <dc:date>2023-06-10T23:24:27Z</dc:date>
    </item>
    <item>
      <title>Re: Is it possible to use the Missing Data Pattern to speed up data preparation?</title>
      <link>https://community.jmp.com/t5/Discussions/Is-it-possible-to-use-the-Missing-Data-Pattern-to-speed-up-data/m-p/344781#M59462</link>
      <description>&lt;P&gt;I think you can use the missing data pattern to identify the columns that have data with no intersection for either the non missing patterns and the missing patterns.&amp;nbsp; This script uses the output table from the Missing Pattern platform, using a slightly modified Missing Data Pattern data table from the JMP Sample data tables.&amp;nbsp; It finds all of the inversely matched patterns and then displays them in a display window&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="miss1.PNG" style="width: 688px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/29127i2251A2D180C29522/image-size/large?v=v2&amp;amp;px=999" role="button" title="miss1.PNG" alt="miss1.PNG" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="miss2.PNG" style="width: 247px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/29128i54D103D291C3F96F/image-size/large?v=v2&amp;amp;px=999" role="button" title="miss2.PNG" alt="miss2.PNG" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;names default to here(1);
dt=New Table( "example",
	Add Rows( 4 ),
	New Column( "Count",
		Numeric,
		"Continuous",
		Format( "Fixed Dec", 10, 0 ),
		Preselect Role( Freq ),
		Set Values( [1, 3, 1, 2] )
	),
	New Column( "Number of columns missing",
		Numeric,
		"Continuous",
		Format( "Fixed Dec", 10, 0 ),
		Set Values( [1, 2, 1, 2] )
	),
	New Column( "Patterns",
		Character,
		"Ordinal",
		List Check( {"0010", "0011", "0100", "0101"} ),
		Set Values( {"0010", "0011", "0100", "0101"} )
	),
	New Column( "Trial 1", Numeric( 1 ), "Nominal", Set Values( [0, 0, 0, 0] ) ),
	New Column( "Trial 2", Numeric( 1 ), "Nominal", Set Values( [0, 0, 1, 1] ) ),
	New Column( "Trial 3", Numeric( 1 ), "Nominal", Set Values( [1, 1, 0, 0] ) ),
	New Column( "Trial 4", Numeric( 1 ), "Nominal", Set Values( [0, 1, 0, 1] ) )
);
cols1List = {};
cols2List = {};
For( i = 4, i &amp;lt;= N Cols( dt ), i++,
	comp = Associative Array( dt &amp;lt;&amp;lt; get rows where( As Column( dt, i ) == 1 ) );
	compMissing = Associative Array( dt &amp;lt;&amp;lt; get rows where( As Column( dt, i ) == 0 ) );
	If( N Items( comp ) &amp;gt; 0,
		For( k = i + 1, k &amp;lt;= N Cols( dt ), k++,
			comp2 = Associative Array( dt &amp;lt;&amp;lt; get rows where( As Column( dt, k ) == 1 ) );
			comp2Missing = Associative Array( dt &amp;lt;&amp;lt; get rows where( As Column( dt, k ) == 0 ) );
			comp2 &amp;lt;&amp;lt; intersect( comp );
			comp2Missing &amp;lt;&amp;lt; intersect( compMissing );
			If( N Items( comp2 &amp;lt;&amp;lt; get keys ) == 0 &amp;amp; N Items( comp2Missing &amp;lt;&amp;lt; get keys ) == 0,
				Insert Into( cols1List, Column( dt, i ) &amp;lt;&amp;lt; get name );
				Insert Into( cols2List, Column( dt, k ) &amp;lt;&amp;lt; get name );
			);
		)
	);
);
nw = New Window( "Results",
	Outline Box( "Columns that can be combined",
		Table Box( String Col Box( "Column", cols1List ), String Col Box( "With", cols2List ) )
	)
);


&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 29 Dec 2020 12:45:37 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/Is-it-possible-to-use-the-Missing-Data-Pattern-to-speed-up-data/m-p/344781#M59462</guid>
      <dc:creator>txnelson</dc:creator>
      <dc:date>2020-12-29T12:45:37Z</dc:date>
    </item>
    <item>
      <title>Re: Is it possible to use the Missing Data Pattern to speed up data preparation?</title>
      <link>https://community.jmp.com/t5/Discussions/Is-it-possible-to-use-the-Missing-Data-Pattern-to-speed-up-data/m-p/344905#M59499</link>
      <description>&lt;P&gt;Thanks Jim for the very fast response and solution.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For those wishing to see your script in action I am including&amp;nbsp; the data building script from the example I provided and your JSL to report the columns which could be combined.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;names default to here(1);
// Construct the initial data table
New Table( "Missing data initial",
	Add Rows( 20 ),
	New Column( "LOT_ID",
		Character,
		"Nominal",
		Set Values(
			{"AA_234_xx.1", "AA_234_xx.2", "AA_234_xx.3", "AA_234_xx.4",
			"AA_234_xx.5", "AA_234_xx.6", "AA_234_xx.7", "AA_234_xx.8",
			"AA_234_xx.9", "AA_234_xx.10", "AA_234_xx.11", "AA_234_xx.12",
			"AA_234_xx.13", "AA_234_xx.14", "AA_234_xx.15", "AA_234_xx.16",
			"AA_234_xx.17", "AA_234_xx.18", "AA_234_xx.19", "AA_234_xx.20"}
		),
		Set Display Width( 81 )
	),
	New Column( "Step1.v1",
		Character( 6 ),
		"Nominal",
		Set Values(
			{"SRD_01", "SRD_02", "SRD_01", "SRD_04", "SRD_02", "", "", "", "", "",
			"SRD_01", "SRD_02", "SRD_01", "SRD_04", "SRD_02", "", "", "", "", ""}
		),
		Set Display Width( 58 )
	),
	New Column( "Step1.v2",
		Character( 16 ),
		"Nominal",
		Set Values(
			{"", "", "", "", "", "SRD_01", "SRD_02", "SRD_01", "SRD_04", "SRD_02",
			"", "", "", "", "", "SRD_02", "SRD_02", "SRD_02", "SRD_02", "SRD_02"}
		),
		Set Display Width( 58 )
	),
	New Column( "Step2.v2",
		Character( 16 ),
		"Nominal",
		Set Values(
			{"COATER_02", "COATER_01", "", "", "COATER_02", "COATER_01", "COATER_02",
			"COATER_02", "COATER_02", "COATER_01", "COATER_02", "COATER_02",
			"COATER_01", "COATER_01", "COATER_01", "", "", "", "COATER_01",
			"COATER_01"}
		),
		Set Display Width( 71 )
	),
	New Column( "Step2.v3",
		Character( 16 ),
		"Nominal",
		Set Values(
			{"", "", "COATER_01", "COATER_01", "", "", "", "", "", "", "", "", "",
			"", "", "COATER_02", "COATER_02", "COATER_02", "", ""}
		),
		Set Display Width( 71 )
	),
	New Column( "Step3.v5",
		Character( 16 ),
		"Nominal",
		Set Values(
			{"DRIE_03", "DRIE_04", "DRIE_03", "", "", "", "", "", "", "DRIE_04",
			"DRIE_03", "DRIE_04", "DRIE_03", "DRIE_04", "", "", "", "", "", ""}
		),
		Set Display Width( 58 )
	),
	New Column( "Step3.v6",
		Character( 16 ),
		"Nominal",
		Set Values(
			{"", "", "", "DRIE_04", "DRIE_03", "DRIE_04", "DRIE_03", "DRIE_04",
			"DRIE_03", "", "", "", "", "", "DRIE_03", "DRIE_04", "DRIE_03",
			"DRIE_04", "DRIE_03", "DRIE_04"}
		),
		Set Display Width( 58 )
	),
	New Column( "Step4.v1",
		Character( 16 ),
		"Nominal",
		Set Values(
			{"PRIME_06", "", "PRIME_07", "", "PRIME_06", "", "PRIME_07", "",
			"PRIME_06", "", "PRIME_07", "", "PRIME_06", "", "PRIME_07", "",
			"PRIME_06", "", "PRIME_07", ""}
		),
		Set Display Width( 61 )
	),
	New Column( "Step4.v2",
		Character( 16 ),
		"Nominal",
		Set Values(
			{"", "PRIME_06", "", "PRIME_07", "", "PRIME_06", "", "PRIME_07", "",
			"PRIME_06", "", "PRIME_07", "", "PRIME_06", "", "PRIME_07", "",
			"PRIME_06", "", "PRIME_07"}
		),
		Set Display Width( 61 )
	)
);

// Check the Missings Data Patern
Data Table( "Missing data initial" ) &amp;lt;&amp;lt;
Missing Data Pattern(
	columns(
		:Step1.v1,
		:Step1.v2,
		:Step2.v2,
		:Step2.v3,
		:Step3.v5,
		:Step3.v6,
		:Step4.v1,
		:Step4.v2
	),
	Output Table( "Missing Data Pattern" )
);

// Check for columns which could be combined
//  *** JSL written by txnelson ***
dt=Data Table( "Missing Data Pattern");	
cols1List = {};
cols2List = {};
For( i = 4, i &amp;lt;= N Cols( dt ), i++,
	comp = Associative Array( dt &amp;lt;&amp;lt; get rows where( As Column( dt, i ) == 1 ) );
	compMissing = Associative Array( dt &amp;lt;&amp;lt; get rows where( As Column( dt, i ) == 0 ) );
	If( N Items( comp ) &amp;gt; 0,
		For( k = i + 1, k &amp;lt;= N Cols( dt ), k++,
			comp2 = Associative Array( dt &amp;lt;&amp;lt; get rows where( As Column( dt, k ) == 1 ) );
			comp2Missing = Associative Array( dt &amp;lt;&amp;lt; get rows where( As Column( dt, k ) == 0 ) );
			comp2 &amp;lt;&amp;lt; intersect( comp );
			comp2Missing &amp;lt;&amp;lt; intersect( compMissing );
			If( N Items( comp2 &amp;lt;&amp;lt; get keys ) == 0 &amp;amp; N Items( comp2Missing &amp;lt;&amp;lt; get keys ) == 0,
				Insert Into( cols1List, Column( dt, i ) &amp;lt;&amp;lt; get name );
				Insert Into( cols2List, Column( dt, k ) &amp;lt;&amp;lt; get name );
			);
		)
	);
);
nw = New Window( "Results",
	Outline Box( "Columns that can be combined",
		Table Box( String Col Box( "Column", cols1List ), String Col Box( "With", cols2List ) )
	)
);&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- Philip&lt;/P&gt;</description>
      <pubDate>Wed, 30 Dec 2020 05:45:20 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/Is-it-possible-to-use-the-Missing-Data-Pattern-to-speed-up-data/m-p/344905#M59499</guid>
      <dc:creator>jpol</dc:creator>
      <dc:date>2020-12-30T05:45:20Z</dc:date>
    </item>
    <item>
      <title>Re: Is it possible to use the Missing Data Pattern to speed up data preparation?</title>
      <link>https://community.jmp.com/t5/Discussions/Is-it-possible-to-use-the-Missing-Data-Pattern-to-speed-up-data/m-p/344934#M59505</link>
      <description>&lt;P&gt;Went maybe a bit too heavy on scripting.. I didn't use Missing Data Patterns in this solution due to possibility of having more than 2 similar columns (not sure if it is the case here). Most likely these could also be detected with Missing Data Patterns but I made my own solution.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Result table:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jthi_0-1609338224896.png" style="width: 999px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/29142iF9A71489BE824D5B/image-size/large?v=v2&amp;amp;px=999" role="button" title="jthi_0-1609338224896.png" alt="jthi_0-1609338224896.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;New columns are created and old ones are left alone (could be easily deleted). Value in the new column name between brackets tells how many columns were combined to create the new column. Step5.v1 and Step5.v2 are not combined due to row 12 having same value twice. Should be easy to change by modifying function&amp;nbsp;F_checkForInversePatterns in the script to allow columns which have matching data on same row.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This solution doesn't take into account how similar the data is inside columns (would require one additional check). Also column name similarity is simply checked if the Step name before period is same between columns.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Script attached.&lt;/P&gt;</description>
      <pubDate>Wed, 30 Dec 2020 14:34:52 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/Is-it-possible-to-use-the-Missing-Data-Pattern-to-speed-up-data/m-p/344934#M59505</guid>
      <dc:creator>jthi</dc:creator>
      <dc:date>2020-12-30T14:34:52Z</dc:date>
    </item>
    <item>
      <title>Re: Is it possible to use the Missing Data Pattern to speed up data preparation?</title>
      <link>https://community.jmp.com/t5/Discussions/Is-it-possible-to-use-the-Missing-Data-Pattern-to-speed-up-data/m-p/345071#M59524</link>
      <description>&lt;P&gt;Whilst evaluating txnelson's script on a much larger data table from manufacturing, it was found (Jim found) that if certain rows have no data in all targeted columns the script will not give an output listing. Jim has kindly provided a fix to the script. See below:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;Names Default To Here( 1 );
dtRaw = Current Data Table();
colNamesList = dtRaw &amp;lt;&amp;lt; get column names( string );
Remove From( colNamesList, 1, 1 );
dt = dtRaw &amp;lt;&amp;lt; Missing Data Pattern(
	columns( Eval( colNamesList ) ),
	Output Table( "Missing Data Pattern" )
);

// Get rid of all missing and all present patterns
dt &amp;lt;&amp;lt; lock data table( 0 );
dt &amp;lt;&amp;lt; select where( Contains( :patterns, "0" ) &amp;amp; !Contains( :Patterns, "1" ) );
Try( dt &amp;lt;&amp;lt; delete rows );
dt &amp;lt;&amp;lt; select where( Contains( :patterns, "1" ) &amp;amp; !Contains( :Patterns, "0" ) );
Try( dt &amp;lt;&amp;lt; delete rows );

// Check for columns which could be combined
//  *** JSL written by txnelson ***
cols1List = {};
cols2List = {};
For( i = 4, i &amp;lt;= N Cols( dt ), i++,
	comp = Associative Array( dt &amp;lt;&amp;lt; get rows where( As Column( dt, i ) == 1 ) );
	compMissing = Associative Array( dt &amp;lt;&amp;lt; get rows where( As Column( dt, i ) == 0 ) );
	If( N Items( comp ) &amp;gt; 0,
		For( k = i + 1, k &amp;lt;= N Cols( dt ), k++,
			comp2 = Associative Array( dt &amp;lt;&amp;lt; get rows where( As Column( dt, k ) == 1 ) );
			comp2Missing = Associative Array( dt &amp;lt;&amp;lt; get rows where( As Column( dt, k ) == 0 ) );
			comp2 &amp;lt;&amp;lt; intersect( comp );
			comp2Missing &amp;lt;&amp;lt; intersect( compMissing );
			If( N Items( comp2 &amp;lt;&amp;lt; get keys ) == 0 &amp;amp; N Items( comp2Missing &amp;lt;&amp;lt; get keys ) == 0,
				Insert Into( cols1List, Column( dt, i ) &amp;lt;&amp;lt; get name );
				Insert Into( cols2List, Column( dt, k ) &amp;lt;&amp;lt; get name );
			);
		)
	);
);
nw = New Window( "Results",
	Outline Box( "Columns that can be combined",
		Table Box( String Col Box( "Column", cols1List ), String Col Box( "With", cols2List ) )
	)
);&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;- Philip&lt;/P&gt;</description>
      <pubDate>Thu, 31 Dec 2020 12:34:03 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/Is-it-possible-to-use-the-Missing-Data-Pattern-to-speed-up-data/m-p/345071#M59524</guid>
      <dc:creator>jpol</dc:creator>
      <dc:date>2020-12-31T12:34:03Z</dc:date>
    </item>
    <item>
      <title>Re: Is it possible to use the Missing Data Pattern to speed up data preparation?</title>
      <link>https://community.jmp.com/t5/Discussions/Is-it-possible-to-use-the-Missing-Data-Pattern-to-speed-up-data/m-p/345072#M59525</link>
      <description>&lt;P&gt;Hi jthi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I like your alternative solution also. Especially&amp;nbsp; the way you leave the original columns untouched and create new columns to the data table. Another issue that you address is the possibility to combine from more than 2 columns should the need arise. I have had this need also on a few occasions.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I would be interested in further developing your script to include&amp;nbsp; the other pre-combine checks that you mention.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Philip&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 31 Dec 2020 12:44:56 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/Is-it-possible-to-use-the-Missing-Data-Pattern-to-speed-up-data/m-p/345072#M59525</guid>
      <dc:creator>jpol</dc:creator>
      <dc:date>2020-12-31T12:44:56Z</dc:date>
    </item>
    <item>
      <title>Re: Is it possible to use the Missing Data Pattern to speed up data preparation?</title>
      <link>https://community.jmp.com/t5/Discussions/Is-it-possible-to-use-the-Missing-Data-Pattern-to-speed-up-data/m-p/356959#M60699</link>
      <description>&lt;P&gt;Hi, for those of you interested in using the Missing Data Pattern to improve data quality I am giving a brief update here:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I had been using the script by &lt;a href="https://community.jmp.com/t5/user/viewprofilepage/user-id/2687"&gt;@txnelson&lt;/a&gt;&amp;nbsp;to build better data sets but then I realised that there is an instance where I would like to combine columns despite their respective missing data pattern (and complement) not matching. It is when both columns have missing data in the same rows.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here is an example, building upon the original example :&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jpol_0-1612764226159.png" style="width: 400px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/30089i39F9E7F639B2D618/image-size/medium?v=v2&amp;amp;px=400" role="button" title="jpol_0-1612764226159.png" alt="jpol_0-1612764226159.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I would like to combine columns associated with Step6 as seen above.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;It then occurred to me that it would help to know the percent matching between columns prior to any data handling. This would&amp;nbsp; give the possibility to use such information when deciding whether to combine or not.&lt;/P&gt;&lt;P&gt;Having communicated with&amp;nbsp;&lt;a href="https://community.jmp.com/t5/user/viewprofilepage/user-id/2687"&gt;@txnelson&lt;/a&gt;&amp;nbsp;he kindly developed his script.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Attached is the final version.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am also including below some examples using "real" data where this method has been used to improvement data quality:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Note: Cells coloured blue denote missing data&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Case 1:&amp;nbsp;&lt;/P&gt;&lt;P&gt;From&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jpol_1-1612764664165.png" style="width: 400px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/30090i05E374A316698D47/image-size/medium?v=v2&amp;amp;px=400" role="button" title="jpol_1-1612764664165.png" alt="jpol_1-1612764664165.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;to&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jpol_2-1612764699416.png" style="width: 400px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/30091iF99DFA2B326FCB1B/image-size/medium?v=v2&amp;amp;px=400" role="button" title="jpol_2-1612764699416.png" alt="jpol_2-1612764699416.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Case 2:&lt;/P&gt;&lt;P&gt;From&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jpol_3-1612764737025.png" style="width: 400px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/30092iF12B7733299ECD9A/image-size/medium?v=v2&amp;amp;px=400" role="button" title="jpol_3-1612764737025.png" alt="jpol_3-1612764737025.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;to&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jpol_4-1612764754197.png" style="width: 400px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/30093i859953F86EA99F7A/image-size/medium?v=v2&amp;amp;px=400" role="button" title="jpol_4-1612764754197.png" alt="jpol_4-1612764754197.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;There is a vast reduction in the columns and much fewer "empty" cells&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;As you can imagine, this allows for improved, faster and more efficient root cause analyses.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Attached are the scripts to make the simulated missing data example and the final script which reports "Percent Combinable" and "Columns that can be combined" based on missing data patterns.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- Philip&lt;/P&gt;</description>
      <pubDate>Mon, 08 Feb 2021 06:30:08 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/Is-it-possible-to-use-the-Missing-Data-Pattern-to-speed-up-data/m-p/356959#M60699</guid>
      <dc:creator>jpol</dc:creator>
      <dc:date>2021-02-08T06:30:08Z</dc:date>
    </item>
  </channel>
</rss>

