<?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 Re: Optimization of a (slow) JSL code based on FOR() loops in Discussions</title>
    <link>https://community.jmp.com/t5/Discussions/Optimization-of-a-slow-JSL-code-based-on-FOR-loops/m-p/755060#M93747</link>
    <description>&lt;P&gt;One thing which will provide (generally) a speed up is to remove all prints from loops but in this case rewriting it without those loops is faster and not to use for loop when going over data table (for each row is better option).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is one option which hopefully yields faster results (this can also be turned into a formula and it should still be fairly fast if needed). It assumes that data is ordered in such a manner, that REL_T0 is always the first row for each serialnumber, if that is not the case it will require a small change&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;Names Default To Here(1);

//Create dummy table 
RawData = New Table("RawData",
	Add Rows(20),
	New Column("serial_number",
		Character,
		set values({"A", "A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B", "C", "C", "C", "C", "C", "C", "C"})
	),
	New Column("rel_event",
		Character,
		set values(
			{"REL_T0", "DROP1", "DROP2", "DROP3", "DROP4", "DROP5", "DROP6", "REL_T0", "DROP1", "DROP2", "DROP3", "DROP4", "DROP5", "REL_T0", "DROP1",
			"DROP2", "DROP3", "DROP4", "DROP5", "DROP6"}
		)
	),
	New Column("metric1", Continuous, set values({1, 2, 3, 5, 7, 10, 13, 2, 4, 5, 6, 8, 11, 1, 2, 4, 5, 5, 9, 12})),
	New Column("metric2", Continuous, set values({2, 3, 4, 7, 9, 14, 18, 2, 3, 4, 7, 9, 14, 2, 5, 7, 8, 9, 11, 13}))
);

delta1col = RawData &amp;lt;&amp;lt; New Column("delta1", Numeric, Continuous);
delta2col = RawData &amp;lt;&amp;lt; New Column("delta2", Numeric, Continuous);

For Each Row(RawData,
	// find REL_T0 row for current serial_number
	start_row = Col Min(Row(), :serial_number);
	delta1col[Row()] = :metric1 - :metric1[start_row];
	delta2col[Row()] = :metric2 - :metric2[start_row];
);&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jthi_0-1715920729140.png" style="width: 400px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/64327i40305A63BC323EAD/image-size/medium?v=v2&amp;amp;px=400" role="button" title="jthi_0-1715920729140.png" alt="jthi_0-1715920729140.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Fri, 17 May 2024 04:38:55 GMT</pubDate>
    <dc:creator>jthi</dc:creator>
    <dc:date>2024-05-17T04:38:55Z</dc:date>
    <item>
      <title>Optimization of a (slow) JSL code based on FOR() loops</title>
      <link>https://community.jmp.com/t5/Discussions/Optimization-of-a-slow-JSL-code-based-on-FOR-loops/m-p/755048#M93746</link>
      <description>&lt;DIV&gt;Hello,&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I need to write a code for reliability data analysis.&lt;/DIV&gt;&lt;DIV&gt;Several metrics (metric1, metric2,...metricN) are measured before the experiment begins (REL_T0), and then measured again after each drop events (DROP1, DROP2,... DROPN…).&lt;/DIV&gt;&lt;DIV&gt;My goal is to calculate the drift value between REL_T0 and each measure after drop events for each serial number and each metric.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;My initial code is based on FOR() loops — which I know are definitely not optimal — and works fine with small datasets.&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Nonetheless, I need to optimize my code to make it run faster with bigger datasets.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Currently, with 10000 rows and 50 metrics, it takes about 20min for the process to finish, which is way too much.&lt;/DIV&gt;&lt;DIV&gt;I tried to organize the FOR() loops differently but with no significant impact.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I am sure there are ways to make these simple calculations in a much much faster way, using JSL proprietary commands.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;What do you guys think?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;The code below creates a dummy table and then run my initial code to end up with new columns&amp;nbsp;“∆_metricN” with the calculated drift.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I would like to do the same thing using JSL commands instead of FOR() loops that would make my code lightning fast!&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Thanks a lot in advance.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Voiz.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;//Create dummy table 
RawData = New Table( "RawData",
	Add Rows( 20 ),
	New Column( "serial_number", Character, set values( {"A","A","A","A","A","A","A","B","B","B","B","B","B","C","C","C","C","C","C","C"})),
	New Column( "rel_event", Character, set values( {
		"REL_T0","DROP1","DROP2","DROP3","DROP4","DROP5","DROP6",
		"REL_T0","DROP1","DROP2","DROP3","DROP4","DROP5",
		"REL_T0","DROP1","DROP2","DROP3","DROP4","DROP5", "DROP6"})),
	New Column("metric1", Continuous, set values({1,2,3,5,7,10,13,2,4,5,6,8,11,1,2,4,5,5,9,12}) ),
	New Column("metric2", Continuous, set values({2,3,4,7,9,14,18,2,3,4,7,9,14,2,5,7,8,9,11,13}) );
	);

RawData &amp;lt;&amp;lt; save( "$Desktop\RawData.jmp" );

Column(RawData, "rel_event") &amp;lt;&amp;lt; Set Property( "Value ordering", {"REL_T0","DROP1","DROP2","DROP3","DROP4","DROP5","DROP6"} );

//Create handle for data table to be analyzed
RawData = Current Data Table();
ChosenDataCol = {"metric1", "metric2"};
NumDataCol = N Items( ChosenDataCol );
NumRow = N Row( RawData );
RawDataCol = RawData &amp;lt;&amp;lt; get column names;

Show( NumDataCol );
Show( ChosenDataCol );
Show( RawData );
Show( NumRow );
Show( RawDataCol );

//Scan each selected data row for which Deltas must be computed
For( cpt = 1, cpt &amp;lt;= NumDataCol, cpt++, 
	
	//Create column to receive delta data
	DeltaCol = RawData &amp;lt;&amp;lt; New Column( "∆_" || Char( ChosenDataCol[cpt] ), Numeric, "Continuous" );
	TargetCol = Column( RawData, ChosenDataCol[cpt] );
	
	serial_numberlist = {}; //List of unique serial_number's within the data table of interest
	
	Show( cpt );
	Show( ChosenDataCol[cpt] );
	
	For( i = 1, i &amp;lt;= NumRow, i++,
		Currentserial_number = :serial_number[i];
		If( Contains( serial_numberlist, Currentserial_number ) == 0,
			Insert Into( serial_numberlist, Currentserial_number )
		);
	);//For i
	Show( serial_numberList );
	Numserial_number = N Items( serial_numberlist );
	Show( Numserial_number );
	
	//Scan data table for each unique serial_number
	For( i = 1, i &amp;lt;= Numserial_number, i++,
		Currentserial_number = serial_numberList[i];
		Currentserial_numberrows = RawData &amp;lt;&amp;lt; GetRowsWhere( :serial_number == Currentserial_number );  //matrix of rows containing current serial_number
		Show( Currentserial_numberrows );
		NumCurrentserial_numberrows = N Row( Currentserial_numberrows );
		Show( NumCurrentserial_numberrows );
		show(i);
		TzeroExist = 0;
		TzeroVal = 0;
		//identify Time Zero value for each serial_number under consideration
		For( j = 1, j &amp;lt;= NumCurrentserial_numberrows, j++,
			CurrentRead = :rel_event[Currentserial_numberrows[j]];
			Show( CurrentRead );
			If( CurrentRead == "REL_T0",
				TzeroVal = TargetCol[Currentserial_numberrows[j]];
				Show( TzeroVal );
				TzeroExist = 1;
			);
		); //For j
		//Calculate Drift
		For( j = 1, j &amp;lt;= NumCurrentserial_numberrows, j++,
			If( TzeroExist == 1,
				DeltaCol[Currentserial_numberrows[j]] = TargetCol[Currentserial_numberrows[j]] - TzeroVal
			)
		); //For j
	);//For i
);//For cpt&lt;/CODE&gt;&lt;/PRE&gt;&lt;/DIV&gt;</description>
      <pubDate>Fri, 17 May 2024 03:31:30 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/Optimization-of-a-slow-JSL-code-based-on-FOR-loops/m-p/755048#M93746</guid>
      <dc:creator>Voizingu</dc:creator>
      <dc:date>2024-05-17T03:31:30Z</dc:date>
    </item>
    <item>
      <title>Re: Optimization of a (slow) JSL code based on FOR() loops</title>
      <link>https://community.jmp.com/t5/Discussions/Optimization-of-a-slow-JSL-code-based-on-FOR-loops/m-p/755060#M93747</link>
      <description>&lt;P&gt;One thing which will provide (generally) a speed up is to remove all prints from loops but in this case rewriting it without those loops is faster and not to use for loop when going over data table (for each row is better option).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is one option which hopefully yields faster results (this can also be turned into a formula and it should still be fairly fast if needed). It assumes that data is ordered in such a manner, that REL_T0 is always the first row for each serialnumber, if that is not the case it will require a small change&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;Names Default To Here(1);

//Create dummy table 
RawData = New Table("RawData",
	Add Rows(20),
	New Column("serial_number",
		Character,
		set values({"A", "A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B", "C", "C", "C", "C", "C", "C", "C"})
	),
	New Column("rel_event",
		Character,
		set values(
			{"REL_T0", "DROP1", "DROP2", "DROP3", "DROP4", "DROP5", "DROP6", "REL_T0", "DROP1", "DROP2", "DROP3", "DROP4", "DROP5", "REL_T0", "DROP1",
			"DROP2", "DROP3", "DROP4", "DROP5", "DROP6"}
		)
	),
	New Column("metric1", Continuous, set values({1, 2, 3, 5, 7, 10, 13, 2, 4, 5, 6, 8, 11, 1, 2, 4, 5, 5, 9, 12})),
	New Column("metric2", Continuous, set values({2, 3, 4, 7, 9, 14, 18, 2, 3, 4, 7, 9, 14, 2, 5, 7, 8, 9, 11, 13}))
);

delta1col = RawData &amp;lt;&amp;lt; New Column("delta1", Numeric, Continuous);
delta2col = RawData &amp;lt;&amp;lt; New Column("delta2", Numeric, Continuous);

For Each Row(RawData,
	// find REL_T0 row for current serial_number
	start_row = Col Min(Row(), :serial_number);
	delta1col[Row()] = :metric1 - :metric1[start_row];
	delta2col[Row()] = :metric2 - :metric2[start_row];
);&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jthi_0-1715920729140.png" style="width: 400px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/64327i40305A63BC323EAD/image-size/medium?v=v2&amp;amp;px=400" role="button" title="jthi_0-1715920729140.png" alt="jthi_0-1715920729140.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 17 May 2024 04:38:55 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/Optimization-of-a-slow-JSL-code-based-on-FOR-loops/m-p/755060#M93747</guid>
      <dc:creator>jthi</dc:creator>
      <dc:date>2024-05-17T04:38:55Z</dc:date>
    </item>
    <item>
      <title>Re: Optimization of a (slow) JSL code based on FOR() loops</title>
      <link>https://community.jmp.com/t5/Discussions/Optimization-of-a-slow-JSL-code-based-on-FOR-loops/m-p/755075#M93750</link>
      <description>&lt;P&gt;Thanks Jarmo for your reply.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I like the idea of using For Each Row(), it simplifies the whole script.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;But to add more context and make the script more robust, REL_T0 might not always be the first row per serial number (the database doesn't always query the data in the right order in the JMP table), and also the drift might be positive OR negative, so I don't know if Col Min() is well suited here (maybe I don't read it right).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Is it possible to anchor&amp;nbsp;&lt;EM&gt;start_row&amp;nbsp;&lt;/EM&gt;to the REL_T0 value per serial number directly?&lt;/P&gt;</description>
      <pubDate>Fri, 17 May 2024 05:07:32 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/Optimization-of-a-slow-JSL-code-based-on-FOR-loops/m-p/755075#M93750</guid>
      <dc:creator>Voizingu</dc:creator>
      <dc:date>2024-05-17T05:07:32Z</dc:date>
    </item>
    <item>
      <title>Re: Optimization of a (slow) JSL code based on FOR() loops</title>
      <link>https://community.jmp.com/t5/Discussions/Optimization-of-a-slow-JSL-code-based-on-FOR-loops/m-p/755081#M93751</link>
      <description>&lt;P&gt;Yes, it is possible with small changes directly to that script. I added debug column which you can remove to show that it matches correct rows&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;Names Default To Here(1);

dt = New Table("RawData",
	Add Rows(27),
	Compress File When Saved(1),
	New Column("serial_number",
		Character,
		"Nominal",
		Set Values(
			{"A", "A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B", "C", "C", "C", "C", "C", "C", "C", "D", "D", "D", "D", "D", "D", "D"}
		)
	),
	New Column("rel_event",
		Character,
		"Nominal",
		Set Values(
			{"REL_T0", "DROP1", "DROP2", "DROP3", "DROP4", "DROP5", "DROP6", "REL_T0", "DROP1", "DROP2", "DROP3", "DROP4", "DROP5", "REL_T0", "DROP1",
			"DROP2", "DROP3", "DROP4", "DROP5", "DROP6", "DROP1", "DROP2", "DROP3", "REL_T0", "DROP4", "DROP5", "DROP6"}
		)
	),
	New Column("metric1",
		Numeric,
		"Continuous",
		Format("Best", 10),
		Set Values([1, 2, 3, 5, 7, 10, 13, 2, 4, 5, 6, 8, 11, 1, 2, 4, 5, 5, 9, 12, 1, 2, 4, 5, 5, 9, 12])
	),
	New Column("metric2",
		Numeric,
		"Continuous",
		Format("Best", 10),
		Set Values([2, 3, 4, 7, 9, 14, 18, 2, 3, 4, 7, 9, 14, 2, 5, 7, 8, 9, 11, 13, 2, 5, 7, 8, 9, 11, 13])
	)
);

debugcol = dt &amp;lt;&amp;lt; New Column("REL_T0_ROW", Numeric, Continuous);
delta1col = dt &amp;lt;&amp;lt; New Column("delta1", Numeric, Continuous);
delta2col = dt &amp;lt;&amp;lt; New Column("delta2", Numeric, Continuous);

For Each Row(dt, 
	// find REL_T0 row for current serial_number
	start_row = Col Min(If(:rel_event == "REL_T0", Row(), .), :serial_number);
	debugcol[Row()] = start_row;
	delta1col[Row()] = :metric1 - :metric1[start_row];
	delta2col[Row()] = :metric2 - :metric2[start_row];
);
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jthi_0-1715922890278.png" style="width: 400px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/64334i3EFCF0B0798F930D/image-size/medium?v=v2&amp;amp;px=400" role="button" title="jthi_0-1715922890278.png" alt="jthi_0-1715922890278.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 17 May 2024 05:15:02 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/Optimization-of-a-slow-JSL-code-based-on-FOR-loops/m-p/755081#M93751</guid>
      <dc:creator>jthi</dc:creator>
      <dc:date>2024-05-17T05:15:02Z</dc:date>
    </item>
    <item>
      <title>Re: Optimization of a (slow) JSL code based on FOR() loops</title>
      <link>https://community.jmp.com/t5/Discussions/Optimization-of-a-slow-JSL-code-based-on-FOR-loops/m-p/755083#M93752</link>
      <description>&lt;P&gt;The normalization of measurement data is a common task in Data Analysis.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The&amp;nbsp;&lt;LI-MESSAGE title="Normalization GUI" uid="675055" url="https://community.jmp.com/t5/JMP-Add-Ins/Normalization-GUI/m-p/675055#U675055" discussion_style_icon_css="lia-mention-container-editor-message lia-img-icon-tkb-thread lia-fa-icon lia-fa-tkb lia-fa-thread lia-fa"&gt;&lt;/LI-MESSAGE&gt;&amp;nbsp;provides many options to do so.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In the GUI the user can specify many different settings - and the AddIn generates the corresponding code.&lt;/P&gt;&lt;P&gt;The generated formulas are based on &lt;FONT face="courier new,courier"&gt;Col ...&lt;/FONT&gt; aggregations, like &lt;FONT face="courier new,courier"&gt;Col Min, Col Max, Col Median&lt;/FONT&gt; ...&lt;/P&gt;&lt;P&gt;other options:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="hogi_1-1715922613053.png" style="width: 400px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/64331i53A2E0EA5462B7C0/image-size/medium?v=v2&amp;amp;px=400" role="button" title="hogi_1-1715922613053.png" alt="hogi_1-1715922613053.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For this application case , you could use "first" (based on the &lt;FONT face="courier new,courier"&gt;ColMin(row())&lt;/FONT&gt; logic)&lt;/P&gt;&lt;P&gt;... or specify the reference via "use a subset for normalization" [for cases where the reference values are not the "first" ones]:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="hogi_3-1715922828693.png" style="width: 400px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/64333iFA2C35FE0F93C775/image-size/medium?v=v2&amp;amp;px=400" role="button" title="hogi_3-1715922828693.png" alt="hogi_3-1715922828693.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 17 May 2024 05:17:57 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/Optimization-of-a-slow-JSL-code-based-on-FOR-loops/m-p/755083#M93752</guid>
      <dc:creator>hogi</dc:creator>
      <dc:date>2024-05-17T05:17:57Z</dc:date>
    </item>
    <item>
      <title>Re: Optimization of a (slow) JSL code based on FOR() loops</title>
      <link>https://community.jmp.com/t5/Discussions/Optimization-of-a-slow-JSL-code-based-on-FOR-loops/m-p/755400#M93770</link>
      <description>&lt;P&gt;Thanks a lot Jarmo!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I tried this new version to a data table with 18000 rows and 2 metrics:&lt;/P&gt;&lt;P&gt;- Old method : ~5min&amp;nbsp;&lt;/P&gt;&lt;P&gt;- your method : &amp;lt;2min&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;It's already a terrific improvement!!!&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks again!!&lt;/P&gt;&lt;P&gt;Voiz&lt;/P&gt;</description>
      <pubDate>Fri, 17 May 2024 17:15:31 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/Optimization-of-a-slow-JSL-code-based-on-FOR-loops/m-p/755400#M93770</guid>
      <dc:creator>Voizingu</dc:creator>
      <dc:date>2024-05-17T17:15:31Z</dc:date>
    </item>
    <item>
      <title>Re: Optimization of a (slow) JSL code based on FOR() loops</title>
      <link>https://community.jmp.com/t5/Discussions/Optimization-of-a-slow-JSL-code-based-on-FOR-loops/m-p/755410#M93771</link>
      <description>&lt;P&gt;Hello Hogi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for your suggestion, I checked your post related to the Normalization add-in. I will definitely keep it in mind for future projects.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Voiz&lt;/P&gt;</description>
      <pubDate>Fri, 17 May 2024 17:17:16 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/Optimization-of-a-slow-JSL-code-based-on-FOR-loops/m-p/755410#M93771</guid>
      <dc:creator>Voizingu</dc:creator>
      <dc:date>2024-05-17T17:17:16Z</dc:date>
    </item>
    <item>
      <title>Re: Optimization of a (slow) JSL code based on FOR() loops</title>
      <link>https://community.jmp.com/t5/Discussions/Optimization-of-a-slow-JSL-code-based-on-FOR-loops/m-p/755418#M93772</link>
      <description>&lt;P&gt;Further speed improvements can be most likely done quite easily using matrices to perform those calculations. Also adding&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;dt &amp;lt;&amp;lt; begin data update;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;before the loop and&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;dt &amp;lt;&amp;lt; end data update;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;most likely will also provide some speed improvements, especially if your table isn't opened as invisible/private as it will "delay" then the visuals in table are updated.&lt;/P&gt;</description>
      <pubDate>Fri, 17 May 2024 17:20:05 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/Optimization-of-a-slow-JSL-code-based-on-FOR-loops/m-p/755418#M93772</guid>
      <dc:creator>jthi</dc:creator>
      <dc:date>2024-05-17T17:20:05Z</dc:date>
    </item>
  </channel>
</rss>

