<?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: Store value in second record of id and use in first record of id in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Store-value-in-second-record-of-id-and-use-in-first-record-of-id/m-p/902514#M356679</link>
    <description>Thank you! That worked brilliantly! Can I just ask, what is the point of the underscore in _PrevInDate that you drop later?</description>
    <pubDate>Fri, 10 Nov 2023 14:43:15 GMT</pubDate>
    <dc:creator>Frk_bolsen</dc:creator>
    <dc:date>2023-11-10T14:43:15Z</dc:date>
    <item>
      <title>Store value in second record of id and use in first record of id</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Store-value-in-second-record-of-id-and-use-in-first-record-of-id/m-p/902449#M356643</link>
      <description>&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;P&gt;&lt;SPAN&gt;In sas 9.4 i have a dataset looking something like this:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;id&lt;/TD&gt;&lt;TD&gt;startdate&lt;/TD&gt;&lt;TD&gt;enddate&lt;/TD&gt;&lt;TD&gt;indate&lt;/TD&gt;&lt;TD&gt;outdate&lt;/TD&gt;&lt;TD&gt;owner&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;498106&lt;/TD&gt;&lt;TD&gt;22.01.2019&lt;/TD&gt;&lt;TD&gt;09.11.2019&lt;/TD&gt;&lt;TD&gt;29.01.2018&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;803&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;498106&lt;/TD&gt;&lt;TD&gt;22.01.2019&lt;/TD&gt;&lt;TD&gt;09.11.2019&lt;/TD&gt;&lt;TD&gt;01.01.2019&lt;/TD&gt;&lt;TD&gt;26.05.2023&lt;/TD&gt;&lt;TD&gt;584&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;499547&lt;/TD&gt;&lt;TD&gt;23.01.2019&lt;/TD&gt;&lt;TD&gt;09.11.2019&lt;/TD&gt;&lt;TD&gt;13.02.2018&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;803&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;499547&lt;/TD&gt;&lt;TD&gt;23.01.2019&lt;/TD&gt;&lt;TD&gt;09.11.2019&lt;/TD&gt;&lt;TD&gt;01.01.2019&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;584&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;SPAN&gt;where . is missing outdate.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I want to manipulate this in two ways:&lt;/P&gt;&lt;P&gt;1. In cases where the outdate is missing, and it is not the last id record, I want to use the indate for the record after as the outdate.&lt;/P&gt;&lt;P&gt;2. In cases where the the outdate is missing, and it is the last record for that id, i want to put 09.11.2023.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The code should produce this dataset:&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;animal_id&lt;/TD&gt;&lt;TD&gt;startdate&lt;/TD&gt;&lt;TD&gt;enddate&lt;/TD&gt;&lt;TD&gt;indate&lt;/TD&gt;&lt;TD&gt;outdate&lt;/TD&gt;&lt;TD&gt;owner&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;498106&lt;/TD&gt;&lt;TD&gt;22.01.2019&lt;/TD&gt;&lt;TD&gt;09.11.2019&lt;/TD&gt;&lt;TD&gt;29.01.2018&lt;/TD&gt;&lt;TD&gt;01.01.2019&lt;/TD&gt;&lt;TD&gt;803&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;498106&lt;/TD&gt;&lt;TD&gt;22.01.2019&lt;/TD&gt;&lt;TD&gt;09.11.2019&lt;/TD&gt;&lt;TD&gt;01.01.2019&lt;/TD&gt;&lt;TD&gt;26.05.2023&lt;/TD&gt;&lt;TD&gt;584&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;499547&lt;/TD&gt;&lt;TD&gt;23.01.2019&lt;/TD&gt;&lt;TD&gt;09.11.2019&lt;/TD&gt;&lt;TD&gt;13.02.2018&lt;/TD&gt;&lt;TD&gt;01.01.2019&lt;/TD&gt;&lt;TD&gt;803&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;499547&lt;/TD&gt;&lt;TD&gt;23.01.2019&lt;/TD&gt;&lt;TD&gt;09.11.2019&lt;/TD&gt;&lt;TD&gt;01.01.2019&lt;/TD&gt;&lt;TD&gt;09.11.2023&lt;/TD&gt;&lt;TD&gt;584&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Note that id's can have more that two rows each in the real dataset.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So far I have this code,&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=""&gt;proc sort data=have; by id indate outdate; run;

data want;
set have;
by id indate outdate;
if id = lag(id) and lag(outdate) = . then outdate2 = indate;
if last.id and outdate = . then outdate = 23323;
run;

&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;which produce the acquired results for problem 2, and store the correct indate for use in problem 1, but I do not know how to insert it in the row above.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Any help is appreciated.&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Fri, 10 Nov 2023 08:51:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Store-value-in-second-record-of-id-and-use-in-first-record-of-id/m-p/902449#M356643</guid>
      <dc:creator>Frk_bolsen</dc:creator>
      <dc:date>2023-11-10T08:51:33Z</dc:date>
    </item>
    <item>
      <title>Re: Store value in second record of id and use in first record of id</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Store-value-in-second-record-of-id-and-use-in-first-record-of-id/m-p/902491#M356670</link>
      <description>&lt;P&gt;We'll need to use the &lt;A href="https://go.documentation.sas.com/doc/en/pgmsascdc/v_043/lefunctionsref/n0l66p5oqex1f2n1quuopdvtcjqb.htm" target="_self"&gt;LAG function&lt;/A&gt; to get values from other rows. Because LAG only accesses values from&amp;nbsp;&lt;EM&gt;previous&lt;/EM&gt; rows of data, I'll sort the data in reverse chronological order for processing. Here's the code:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
	infile datalines dsd dlm='|';
	input id	startdate:ddmmyy10. enddate:ddmmyy10. 
				indate:ddmmyy10. outdate:ddmmyy10. owner;
	format startdate -- outdate ddmmyyp10.;
datalines;
498106|22.01.2019|09.11.2019|29.01.2018|.|803
498106|22.01.2019|09.11.2019|01.01.2019|26.05.2023|584
499547|23.01.2019|09.11.2019|13.02.2018|.|803
499547|23.01.2019|09.11.2019|01.01.2019|.|584
499547|23.01.2020|09.11.2020|13.02.2010|.|803
499547|23.01.2021|09.11.2021|01.01.2021|.|584
;

title "Have";
proc print data=have;
run;

/* LAG() only reads previous records, so first sort in reverse chronological order */
proc sort data=have;
	by id descending indate descending outdate;
run;

data want;
	set have;
	by id descending indate descending outdate;
	/* The LAG() function must be executed for every row, even if we don't need every value */
	_prevInDate=lag1(indate);
	/* If this is the first record for the ID and outdata is missing, set 11SEP2023*/
	if first.id and missing(outdate) then outdate='11SEP2023'd;
	/* Otherwise, if outdata is missing, use the previous indate */
	else if missing(outdate) then outdate=_prevInDate;
	drop _:;
run;

/* Sort the data back into chronological order */
proc sort data=want;
		by id indate outdate;
run;

title "Want";
proc print data=want;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;And here is the result:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="branch"&gt;&lt;STRONG&gt;HAVE&lt;/STRONG&gt;&lt;/DIV&gt;
&lt;DIV class="branch"&gt;
&lt;DIV class="branch"&gt;
&lt;DIV&gt;
&lt;DIV align="left"&gt;
&lt;TABLE class="table" summary="Procedure Print: Data Set WORK.HAVE" frame="box" rules="all" cellspacing="0" cellpadding="5"&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="r header" scope="col"&gt;Obs&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;id&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;startdate&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;enddate&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;indate&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;outdate&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;owner&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;1&lt;/TH&gt;
&lt;TD class="r data"&gt;498106&lt;/TD&gt;
&lt;TD class="r data"&gt;22.01.2019&lt;/TD&gt;
&lt;TD class="r data"&gt;09.11.2019&lt;/TD&gt;
&lt;TD class="r data"&gt;29.01.2018&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;803&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;2&lt;/TH&gt;
&lt;TD class="r data"&gt;498106&lt;/TD&gt;
&lt;TD class="r data"&gt;22.01.2019&lt;/TD&gt;
&lt;TD class="r data"&gt;09.11.2019&lt;/TD&gt;
&lt;TD class="r data"&gt;01.01.2019&lt;/TD&gt;
&lt;TD class="r data"&gt;26.05.2023&lt;/TD&gt;
&lt;TD class="r data"&gt;584&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;3&lt;/TH&gt;
&lt;TD class="r data"&gt;499547&lt;/TD&gt;
&lt;TD class="r data"&gt;23.01.2019&lt;/TD&gt;
&lt;TD class="r data"&gt;09.11.2019&lt;/TD&gt;
&lt;TD class="r data"&gt;13.02.2018&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;803&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;4&lt;/TH&gt;
&lt;TD class="r data"&gt;499547&lt;/TD&gt;
&lt;TD class="r data"&gt;23.01.2019&lt;/TD&gt;
&lt;TD class="r data"&gt;09.11.2019&lt;/TD&gt;
&lt;TD class="r data"&gt;01.01.2019&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;584&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;5&lt;/TH&gt;
&lt;TD class="r data"&gt;499547&lt;/TD&gt;
&lt;TD class="r data"&gt;23.01.2020&lt;/TD&gt;
&lt;TD class="r data"&gt;09.11.2020&lt;/TD&gt;
&lt;TD class="r data"&gt;13.02.2010&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;803&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;6&lt;/TH&gt;
&lt;TD class="r data"&gt;499547&lt;/TD&gt;
&lt;TD class="r data"&gt;23.01.2021&lt;/TD&gt;
&lt;TD class="r data"&gt;09.11.2021&lt;/TD&gt;
&lt;TD class="r data"&gt;01.01.2021&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;584&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV class="branch"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="branch"&gt;&lt;STRONG&gt;WANT&lt;/STRONG&gt;&lt;BR /&gt;
&lt;DIV&gt;
&lt;DIV align="left"&gt;
&lt;TABLE class="table" summary="Procedure Print: Data Set WORK.WANT" frame="box" rules="all" cellspacing="0" cellpadding="5"&gt;&lt;COLGROUP&gt; &lt;COL /&gt;&lt;/COLGROUP&gt; &lt;COLGROUP&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt;&lt;/COLGROUP&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="r header" scope="col"&gt;Obs&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;id&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;startdate&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;enddate&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;indate&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;outdate&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;owner&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;1&lt;/TH&gt;
&lt;TD class="r data"&gt;498106&lt;/TD&gt;
&lt;TD class="r data"&gt;22.01.2019&lt;/TD&gt;
&lt;TD class="r data"&gt;09.11.2019&lt;/TD&gt;
&lt;TD class="r data"&gt;29.01.2018&lt;/TD&gt;
&lt;TD class="r data"&gt;01.01.2019&lt;/TD&gt;
&lt;TD class="r data"&gt;803&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;2&lt;/TH&gt;
&lt;TD class="r data"&gt;498106&lt;/TD&gt;
&lt;TD class="r data"&gt;22.01.2019&lt;/TD&gt;
&lt;TD class="r data"&gt;09.11.2019&lt;/TD&gt;
&lt;TD class="r data"&gt;01.01.2019&lt;/TD&gt;
&lt;TD class="r data"&gt;26.05.2023&lt;/TD&gt;
&lt;TD class="r data"&gt;584&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;3&lt;/TH&gt;
&lt;TD class="r data"&gt;499547&lt;/TD&gt;
&lt;TD class="r data"&gt;23.01.2020&lt;/TD&gt;
&lt;TD class="r data"&gt;09.11.2020&lt;/TD&gt;
&lt;TD class="r data"&gt;13.02.2010&lt;/TD&gt;
&lt;TD class="r data"&gt;13.02.2018&lt;/TD&gt;
&lt;TD class="r data"&gt;803&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;4&lt;/TH&gt;
&lt;TD class="r data"&gt;499547&lt;/TD&gt;
&lt;TD class="r data"&gt;23.01.2019&lt;/TD&gt;
&lt;TD class="r data"&gt;09.11.2019&lt;/TD&gt;
&lt;TD class="r data"&gt;13.02.2018&lt;/TD&gt;
&lt;TD class="r data"&gt;01.01.2019&lt;/TD&gt;
&lt;TD class="r data"&gt;803&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;5&lt;/TH&gt;
&lt;TD class="r data"&gt;499547&lt;/TD&gt;
&lt;TD class="r data"&gt;23.01.2019&lt;/TD&gt;
&lt;TD class="r data"&gt;09.11.2019&lt;/TD&gt;
&lt;TD class="r data"&gt;01.01.2019&lt;/TD&gt;
&lt;TD class="r data"&gt;01.01.2021&lt;/TD&gt;
&lt;TD class="r data"&gt;584&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;6&lt;/TH&gt;
&lt;TD class="r data"&gt;499547&lt;/TD&gt;
&lt;TD class="r data"&gt;23.01.2021&lt;/TD&gt;
&lt;TD class="r data"&gt;09.11.2021&lt;/TD&gt;
&lt;TD class="r data"&gt;01.01.2021&lt;/TD&gt;
&lt;TD class="r data"&gt;11.09.2023&lt;/TD&gt;
&lt;TD class="r data"&gt;584&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;</description>
      <pubDate>Fri, 10 Nov 2023 13:25:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Store-value-in-second-record-of-id-and-use-in-first-record-of-id/m-p/902491#M356670</guid>
      <dc:creator>SASJedi</dc:creator>
      <dc:date>2023-11-10T13:25:37Z</dc:date>
    </item>
    <item>
      <title>Re: Store value in second record of id and use in first record of id</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Store-value-in-second-record-of-id-and-use-in-first-record-of-id/m-p/902514#M356679</link>
      <description>Thank you! That worked brilliantly! Can I just ask, what is the point of the underscore in _PrevInDate that you drop later?</description>
      <pubDate>Fri, 10 Nov 2023 14:43:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Store-value-in-second-record-of-id-and-use-in-first-record-of-id/m-p/902514#M356679</guid>
      <dc:creator>Frk_bolsen</dc:creator>
      <dc:date>2023-11-10T14:43:15Z</dc:date>
    </item>
    <item>
      <title>Re: Store value in second record of id and use in first record of id</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Store-value-in-second-record-of-id-and-use-in-first-record-of-id/m-p/902535#M356685</link>
      <description>&lt;P&gt;I'm a lazy programmer - I hate to type more than necessary. So whenever I create a variable I intend to drop, I start the name with an underscore. Then, I can use simple &lt;A href="https://go.documentation.sas.com/doc/en/pgmsascdc/v_044/lepg/p08ywlo51p6ezbn1lde9f0aphq6r.htm#p14y41lr9jsxlwn188y0c4p3dcbv" target="_self"&gt;name prefix list&lt;/A&gt;&amp;nbsp;syntax to drop them all:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;/* This statement drops all variables that have a name beginning with '_' */
drop _:;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;It's an old habit that I still find useful.&lt;/P&gt;
&lt;P&gt;May the SAS be with you!&lt;BR /&gt;Mark&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 10 Nov 2023 15:54:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Store-value-in-second-record-of-id-and-use-in-first-record-of-id/m-p/902535#M356685</guid>
      <dc:creator>SASJedi</dc:creator>
      <dc:date>2023-11-10T15:54:52Z</dc:date>
    </item>
  </channel>
</rss>

