<?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: How do I construct a column A, whose entries are equal to the mean/median/mode of the last 10 non-null entries of another column B? in Discussions</title>
    <link>https://community.jmp.com/t5/Discussions/How-do-I-construct-a-column-A-whose-entries-are-equal-to-the/m-p/556586#M77052</link>
    <description>&lt;P&gt;Hello,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is another way to do this, using an intermediate table with no missings, which allows a simpler formula.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;Names Default To Here( 1 );

dt = Current Data Table();

//get nonmissing rows of table and put them in a new table
m = dt &amp;lt;&amp;lt; get rows where( !Is Missing( :a ) );
dt2 = New Table( "xxx", invisible, &amp;lt;&amp;lt;add rows( N Row( m ) ) );
dt2[0, 1] = dt[m, 1];

//run formula on the new table. it has no missings, so direct indexing can be used
dt2 &amp;lt;&amp;lt; New Column( "Xx",
	formula(
		tab = :column1 &amp;lt;&amp;lt; get data table;
		Mean( tab[Index( Max( Row() - 9, 1 ), Row() ), 1] );
	)
);

//place these answers in their corresponding rows in the orignal table, in a new column.
dt &amp;lt;&amp;lt; New Column( "ans" );
dt[m, N Col( dt )] = dt2[0, 2];

//span empty data to fill
dt &amp;lt;&amp;lt; New Column( "Mean10",
	formula( If( Row() == 1, :ans, !Is Missing( :ans ), :ans, Lag( :Mean10 ) ) )
);

//cleanup
dt:Mean10 &amp;lt;&amp;lt; Delete Formula;
dt &amp;lt;&amp;lt; delete columns( :ans );
Close( dt2, nosave );


&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;When the original table is small (like yours... about 15K rows), the two approaches perform similarly--the first is a touch faster:&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="brady_brady_1-1665844715162.png" style="width: 999px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/46319i499F102F6D893F8D/image-size/large?v=v2&amp;amp;px=999" role="button" title="brady_brady_1-1665844715162.png" alt="brady_brady_1-1665844715162.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As the original table grows, the "separate table" approach seems to scale appreciably better. Here is a 150K row example:&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="brady_brady_0-1665844547704.png" style="width: 999px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/46318i6400CD9B82608D11/image-size/large?v=v2&amp;amp;px=999" role="button" title="brady_brady_0-1665844547704.png" alt="brady_brady_0-1665844547704.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;A possible deal-breaker (??) is that this approach does not produce a formula in the source table, so you would need to re-run this whenever new data is appended.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I've attached the 150K row file in case you want to experiment.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Cheers,&lt;/P&gt;
&lt;P&gt;Brady&lt;/P&gt;</description>
    <pubDate>Sat, 15 Oct 2022 16:06:34 GMT</pubDate>
    <dc:creator>brady_brady</dc:creator>
    <dc:date>2022-10-15T16:06:34Z</dc:date>
    <item>
      <title>How do I construct a column A, whose entries are equal to the mean/median/mode of the last 10 non-null entries of another column B?</title>
      <link>https://community.jmp.com/t5/Discussions/How-do-I-construct-a-column-A-whose-entries-are-equal-to-the/m-p/556394#M77035</link>
      <description>&lt;P&gt;Hello,&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have a column A (around 15,000 rows) which has numbers and many null values (maybe 70-80% null).&lt;/P&gt;
&lt;P&gt;I would like to construct a column B which at row i, is equal to the the mean of:&amp;nbsp; &amp;nbsp;the *last 10 non-null values from A*&amp;nbsp;&lt;/P&gt;
&lt;P&gt;--&amp;gt; this means take&amp;nbsp; A[row i-1] ,&amp;nbsp;A[row i-2], ... and go back until you have 10 non-null values (or if you reach row 1 then&amp;nbsp; take whatever number &amp;lt;= 10 of&amp;nbsp; non-null values you get)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I would also like to do in addition to mean, a median and also mode, but a smoothed version of the mode where:&lt;/P&gt;
&lt;P&gt;I first do a Gaussian smoothing of the 10 non-null values ...&amp;nbsp; and take the&amp;nbsp;argmax (mode) of that distributions.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks for any thoughts or suggestions!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;***&lt;/P&gt;
&lt;P&gt;Solution ideas: One thought I had was because I want to do several different calculations with the last 10 non-null values, I should first construct a column C whose entries are arrays equal to those last 10 non-null values ... then I can do 3 formulas which operate on column C to produce B1 (mean), B2 (medial), B3 (smoothed mode).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here are some code fragments moving towards constructing this column C of arrays:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;//step 1 grab the last say 50 entries (some fixed amount that will likely have 10 non-nulls)

For Each Row( dt_join, 

	to = Row();

	If( to - 50 &amp;lt; 0,

	from = 1,

	from = to - 50); // Quantile( 0.5, 

		values = :away_1g_pull_seconds[Index( From, To )] &amp;lt;&amp;lt;Get Values //this is an array 

		Show(values);

	If(Row() &amp;gt; 50, Break());

); 

//step 2 convert array to list, drop nulls, convert list of first 10 entries back to array ... 
//I don't know how to assign this to a row of C 

num_lag = 10; 

values = dt_join:A[Index( From, To )] ;

 MyList = Remove(as list(values)[1], as list(Loc(as list(values)[1], .)) );   //convert array to list and remove nulls

 Mat = Number Col Box("", MyList[1:10]) &amp;lt;&amp;lt; get as matrix; //hack convert to array&lt;/CODE&gt;&lt;/PRE&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;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 10 Jun 2023 23:55:21 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-do-I-construct-a-column-A-whose-entries-are-equal-to-the/m-p/556394#M77035</guid>
      <dc:creator>jj_jmp</dc:creator>
      <dc:date>2023-06-10T23:55:21Z</dc:date>
    </item>
    <item>
      <title>Re: How do I construct a column A, whose entries are equal to the mean/median/mode of the last 10 non-null entries of another column B?</title>
      <link>https://community.jmp.com/t5/Discussions/How-do-I-construct-a-column-A-whose-entries-are-equal-to-the/m-p/556510#M77046</link>
      <description>&lt;P&gt;Here is a beginning for your first request.&amp;nbsp; It will create a mean for the last 10 values for column A and put the mean into column B&lt;/P&gt;
&lt;P&gt;I don't have time right now to work more on this.&amp;nbsp; Maybe later this weekend.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;Names Default To Here( 1 );
dt = Current Data Table();
theMatrix = [];
dt &amp;lt;&amp;lt; New Column( "B" );
For Each Row(
	If( Is Missing( :A ) == 0,
		theMatrix = Matrix( :a ) || theMatrix
	);
	If( Length( theMatrix ) &amp;gt; 10,
		theMatrix[1, 11] = []
	);
	:B = Mean( theMatrix );
);&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 14 Oct 2022 22:09:35 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-do-I-construct-a-column-A-whose-entries-are-equal-to-the/m-p/556510#M77046</guid>
      <dc:creator>txnelson</dc:creator>
      <dc:date>2022-10-14T22:09:35Z</dc:date>
    </item>
    <item>
      <title>Re: How do I construct a column A, whose entries are equal to the mean/median/mode of the last 10 non-null entries of another column B?</title>
      <link>https://community.jmp.com/t5/Discussions/How-do-I-construct-a-column-A-whose-entries-are-equal-to-the/m-p/556560#M77050</link>
      <description>&lt;P&gt;&lt;a href="https://community.jmp.com/t5/user/viewprofilepage/user-id/5080"&gt;@DonMcCormack&lt;/a&gt; this would make a good challenge problem. &lt;/P&gt;
&lt;P&gt;I think this will work and be reasonably efficient.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;nr = 15000;
dt = New Table( "Untitled",
    Add Rows( nr ),
    New Column( "a", Numeric, "Continuous", Format( "Best", 12 ), Set Values( J( nr, 1, If( Random Uniform() &amp;lt; .3, Random Integer( 0, 1 ), . ) ) ) )
);

lookback = 10;

dt &amp;lt;&amp;lt; New Column( "b" || Char( lookback ),
    formula(
        // make a helper to help look up the non-missing rows
        helper = As Constant( // AsConstant is for efficiency
            temp = dt &amp;lt;&amp;lt; getrowswhere( !Is Missing( a ) );
            // temp is the non-missing row numbers. Make sure row 1
            // is included, even if missing, because LocSorted will
            // return [1] when a smaller value would have been better.
            If( temp[1] != 1,
                Insert Into( temp, 1, 1 )
            );
            temp; // this is assigned to 'helper'
        );
        currentrow = Row(); // this is the target for a new mean, etc
        end = Loc Sorted( helper, currentrow )[1]; // end is the last non missing row before or at the target
        start = Max( 1, end - lookback + 1 ); // start is the row 'lookback' rows earlier
        rowset = helper[start :: end]; // rowset is the set of nonmissing rows, possibly including a missing value at row 1.
        // it is OK if a missing value is present; mean/median/mode ignore it.
        // grab the rowset from column a and report the statistic...
        Mean( dt[rowset, {a}] );// median, mode
    )
);&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 15 Oct 2022 13:22:52 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-do-I-construct-a-column-A-whose-entries-are-equal-to-the/m-p/556560#M77050</guid>
      <dc:creator>Craige_Hales</dc:creator>
      <dc:date>2022-10-15T13:22:52Z</dc:date>
    </item>
    <item>
      <title>Re: How do I construct a column A, whose entries are equal to the mean/median/mode of the last 10 non-null entries of another column B?</title>
      <link>https://community.jmp.com/t5/Discussions/How-do-I-construct-a-column-A-whose-entries-are-equal-to-the/m-p/556586#M77052</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is another way to do this, using an intermediate table with no missings, which allows a simpler formula.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;Names Default To Here( 1 );

dt = Current Data Table();

//get nonmissing rows of table and put them in a new table
m = dt &amp;lt;&amp;lt; get rows where( !Is Missing( :a ) );
dt2 = New Table( "xxx", invisible, &amp;lt;&amp;lt;add rows( N Row( m ) ) );
dt2[0, 1] = dt[m, 1];

//run formula on the new table. it has no missings, so direct indexing can be used
dt2 &amp;lt;&amp;lt; New Column( "Xx",
	formula(
		tab = :column1 &amp;lt;&amp;lt; get data table;
		Mean( tab[Index( Max( Row() - 9, 1 ), Row() ), 1] );
	)
);

//place these answers in their corresponding rows in the orignal table, in a new column.
dt &amp;lt;&amp;lt; New Column( "ans" );
dt[m, N Col( dt )] = dt2[0, 2];

//span empty data to fill
dt &amp;lt;&amp;lt; New Column( "Mean10",
	formula( If( Row() == 1, :ans, !Is Missing( :ans ), :ans, Lag( :Mean10 ) ) )
);

//cleanup
dt:Mean10 &amp;lt;&amp;lt; Delete Formula;
dt &amp;lt;&amp;lt; delete columns( :ans );
Close( dt2, nosave );


&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;When the original table is small (like yours... about 15K rows), the two approaches perform similarly--the first is a touch faster:&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="brady_brady_1-1665844715162.png" style="width: 999px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/46319i499F102F6D893F8D/image-size/large?v=v2&amp;amp;px=999" role="button" title="brady_brady_1-1665844715162.png" alt="brady_brady_1-1665844715162.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As the original table grows, the "separate table" approach seems to scale appreciably better. Here is a 150K row example:&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="brady_brady_0-1665844547704.png" style="width: 999px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/46318i6400CD9B82608D11/image-size/large?v=v2&amp;amp;px=999" role="button" title="brady_brady_0-1665844547704.png" alt="brady_brady_0-1665844547704.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;A possible deal-breaker (??) is that this approach does not produce a formula in the source table, so you would need to re-run this whenever new data is appended.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I've attached the 150K row file in case you want to experiment.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Cheers,&lt;/P&gt;
&lt;P&gt;Brady&lt;/P&gt;</description>
      <pubDate>Sat, 15 Oct 2022 16:06:34 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-do-I-construct-a-column-A-whose-entries-are-equal-to-the/m-p/556586#M77052</guid>
      <dc:creator>brady_brady</dc:creator>
      <dc:date>2022-10-15T16:06:34Z</dc:date>
    </item>
    <item>
      <title>Re: How do I construct a column A, whose entries are equal to the mean/median/mode of the last 10 non-null entries of another column B?</title>
      <link>https://community.jmp.com/t5/Discussions/How-do-I-construct-a-column-A-whose-entries-are-equal-to-the/m-p/556613#M77053</link>
      <description>&lt;P&gt;Here are some more results. The "separate" method seems to be scaling linearly. The "same table" method seems to hit a wall somewhere north of 450,000 rows. I'm not sure why.&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="brady_brady_2-1665849827059.png" style="width: 999px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/46331iBE0C8AC86645F65F/image-size/large?v=v2&amp;amp;px=999" role="button" title="brady_brady_2-1665849827059.png" alt="brady_brady_2-1665849827059.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="brady_brady_1-1665849460162.png" style="width: 999px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/46330i6C03B33FBD3B4C99/image-size/large?v=v2&amp;amp;px=999" role="button" title="brady_brady_1-1665849460162.png" alt="brady_brady_1-1665849460162.png" /&gt;&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Sat, 15 Oct 2022 16:09:35 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-do-I-construct-a-column-A-whose-entries-are-equal-to-the/m-p/556613#M77053</guid>
      <dc:creator>brady_brady</dc:creator>
      <dc:date>2022-10-15T16:09:35Z</dc:date>
    </item>
    <item>
      <title>Re: How do I construct a column A, whose entries are equal to the mean/median/mode of the last 10 non-null entries of another column B?</title>
      <link>https://community.jmp.com/t5/Discussions/How-do-I-construct-a-column-A-whose-entries-are-equal-to-the/m-p/556618#M77056</link>
      <description>&lt;P&gt;I'd guess it is still N^2 for the helper=AsConstant. That will be copying a 100K array 400K times...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;edit: guess confirmed. But even lifting the helper out of the formula still leaves my code about half as fast as Brady's.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;But...Jim's code can be tweaked to be faster...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;dt = Current Data Table();
startTime = Tick Seconds();
theMatrix = {., ., ., ., ., ., ., ., ., .};

z = .;
dt &amp;lt;&amp;lt; New Column( "B" );
dt &amp;lt;&amp;lt; begindataupdate;
For Each Row(
    v = :A;
    If( v == v,
        Insert Into( theMatrix, v );
        Remove From( theMatrix, 1 );
        z = Mean( theMatrix );
    );
    :B = z;
);
stopTime = Tick Seconds();
Show( stopTime - startTime );
dt &amp;lt;&amp;lt; enddataupdate;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sun, 16 Oct 2022 02:06:07 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-do-I-construct-a-column-A-whose-entries-are-equal-to-the/m-p/556618#M77056</guid>
      <dc:creator>Craige_Hales</dc:creator>
      <dc:date>2022-10-16T02:06:07Z</dc:date>
    </item>
    <item>
      <title>Re: How do I construct a column A, whose entries are equal to the mean/median/mode of the last 10 non-null entries of another column B?</title>
      <link>https://community.jmp.com/t5/Discussions/How-do-I-construct-a-column-A-whose-entries-are-equal-to-the/m-p/556635#M77057</link>
      <description>&lt;P&gt;Thank so much for all your responses - I am blown away!&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have not had chance to read them in detail but I will respond more when I do.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Best,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Joe&lt;/P&gt;</description>
      <pubDate>Sun, 16 Oct 2022 03:44:46 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-do-I-construct-a-column-A-whose-entries-are-equal-to-the/m-p/556635#M77057</guid>
      <dc:creator>jj_jmp</dc:creator>
      <dc:date>2022-10-16T03:44:46Z</dc:date>
    </item>
    <item>
      <title>Re: How do I construct a column A, whose entries are equal to the mean/median/mode of the last 10 non-null entries of another column B?</title>
      <link>https://community.jmp.com/t5/Discussions/How-do-I-construct-a-column-A-whose-entries-are-equal-to-the/m-p/557072#M77084</link>
      <description>&lt;P&gt;That is really nice--much more elegant than my approach.&lt;/P&gt;</description>
      <pubDate>Mon, 17 Oct 2022 21:07:07 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-do-I-construct-a-column-A-whose-entries-are-equal-to-the/m-p/557072#M77084</guid>
      <dc:creator>brady_brady</dc:creator>
      <dc:date>2022-10-17T21:07:07Z</dc:date>
    </item>
    <item>
      <title>Re: How do I construct a column A, whose entries are equal to the mean/median/mode of the last 10 non-null entries of another column B?</title>
      <link>https://community.jmp.com/t5/Discussions/How-do-I-construct-a-column-A-whose-entries-are-equal-to-the/m-p/557077#M77086</link>
      <description>&lt;P&gt;Wow......did this exercise teach me a bunch.&amp;nbsp; My original code worked, but was sooooo much slower than the alternate methods, that I took the time to study them.&amp;nbsp; Very fast and clever code.&amp;nbsp; Then &lt;a href="https://community.jmp.com/t5/user/viewprofilepage/user-id/982"&gt;@Craige_Hales&lt;/a&gt;&amp;nbsp;provided his latest code, which is down right speedy, but takes an approach very close to what my original code in approach.&amp;nbsp; &lt;a href="https://community.jmp.com/t5/user/viewprofilepage/user-id/982"&gt;@Craige_Hales&lt;/a&gt;&amp;nbsp;code is much faster.&amp;nbsp; And most of the difference is in my lack of using&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;Begin Data Update;
.....
End Data Update;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;So I have now gained a large appreciation for the holding up of the Update Messages until the end of the updating.&lt;/P&gt;
&lt;P&gt;Thanks for the fun!&lt;/P&gt;</description>
      <pubDate>Mon, 17 Oct 2022 21:44:48 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-do-I-construct-a-column-A-whose-entries-are-equal-to-the/m-p/557077#M77086</guid>
      <dc:creator>txnelson</dc:creator>
      <dc:date>2022-10-17T21:44:48Z</dc:date>
    </item>
  </channel>
</rss>

