<?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: Expanding dataset from latest date to end date in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Expanding-dataset-from-latest-date-to-end-date/m-p/723473#M224510</link>
    <description>&lt;P&gt;If you also need to fill gaps, you need a "look-ahead":&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input ID $ Rating $ (Date Enddate) (:yymmn6.);
format Date Enddate yymmn6.;
datalines;
name1 20 201810 202101
name1 30 201811 202101
name1 50 201812 202101
name1 50 201901 202101
name2 40 201901 202101
name2 10 201902 202101
name2 20 201903 202101
name2 30 201905 202101
;

data want;
merge
  have
  have (
    firstobs=2
    keep=id date
    rename=(id=_id date=_date)
  )
;
output;
if id = _id
then do while (date lt intnx('month',_date,-1,'b'));
  date = intnx('month',date,1,'b');
  output;
end;
else do while (date lt enddate);
  date = intnx('month',date,1,'b');
  output;
end;
drop _id _date;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;but if you only need to fill at the end:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
set have;
by id;
output;
if last.id
then do while (date lt enddate);
  date = intnx('month',date,1,'b');
  output;
end;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Thu, 04 Mar 2021 14:32:04 GMT</pubDate>
    <dc:creator>Kurt_Bremser</dc:creator>
    <dc:date>2021-03-04T14:32:04Z</dc:date>
    <item>
      <title>Expanding dataset from latest date to end date</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Expanding-dataset-from-latest-date-to-end-date/m-p/723457#M224500</link>
      <description>&lt;P&gt;Hi everyone,&lt;/P&gt;&lt;P&gt;I really need your help on the following, it's breaking my brain:&lt;/P&gt;&lt;P&gt;I have a dataset looking like this&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;STRONG&gt;ID&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;Rating&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;Date&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;Enddate&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;name1&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;201810&lt;/TD&gt;&lt;TD&gt;202101&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;name1&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;201811&lt;/TD&gt;&lt;TD&gt;202101&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;name1&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;201812&lt;/TD&gt;&lt;TD&gt;202101&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;name1&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;201901&lt;/TD&gt;&lt;TD&gt;202101&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;name2&lt;/TD&gt;&lt;TD&gt;40&lt;/TD&gt;&lt;TD&gt;201901&lt;/TD&gt;&lt;TD&gt;202101&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;name2&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;201902&lt;/TD&gt;&lt;TD&gt;202101&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;name2&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;201903&lt;/TD&gt;&lt;TD&gt;202101&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;Both the date and enddate variables are in sas date format yymmn.&lt;/P&gt;&lt;P&gt;I would like to populate the table for each month using the latest rating up to the enddate (per ID):&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;STRONG&gt;ID&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;Rating&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;Date&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;Enddate&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;name1&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;201810&lt;/TD&gt;&lt;TD&gt;202101&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;name1&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;201811&lt;/TD&gt;&lt;TD&gt;202101&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;name1&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;201812&lt;/TD&gt;&lt;TD&gt;202101&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;name1&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;201901&lt;/TD&gt;&lt;TD&gt;202101&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;name1&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;50&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&lt;FONT color="#FF6600"&gt;201902&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;202101&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;name1&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;50&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;201903&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;202101&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;name1&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;50&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;...&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;202101&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;name1&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;50&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;202101&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;202101&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;name2&lt;/TD&gt;&lt;TD&gt;40&lt;/TD&gt;&lt;TD&gt;201901&lt;/TD&gt;&lt;TD&gt;202101&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;name2&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;201902&lt;/TD&gt;&lt;TD&gt;202101&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;name2&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;201903&lt;/TD&gt;&lt;TD&gt;202101&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;name2&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;20&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;201904&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;202101&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;name2&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;20&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;201905&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;202101&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;name2&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;20&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;...&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;202101&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;name2&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;20&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;202101&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#FF6600"&gt;202101&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 04 Mar 2021 13:53:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Expanding-dataset-from-latest-date-to-end-date/m-p/723457#M224500</guid>
      <dc:creator>Giraffe123</dc:creator>
      <dc:date>2021-03-04T13:53:29Z</dc:date>
    </item>
    <item>
      <title>Re: Expanding dataset from latest date to end date</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Expanding-dataset-from-latest-date-to-end-date/m-p/723462#M224505</link>
      <description>&lt;P&gt;Please provide data in a usable form by following &lt;A href="https://blogs.sas.com/content/sastraining/2016/03/11/jedi-sas-tricks-data-to-data-step-macro/" target="_self"&gt;these instructions&lt;/A&gt; (not a screen capture, not an attached file)&lt;/P&gt;</description>
      <pubDate>Thu, 04 Mar 2021 14:00:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Expanding-dataset-from-latest-date-to-end-date/m-p/723462#M224505</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2021-03-04T14:00:15Z</dc:date>
    </item>
    <item>
      <title>Re: Expanding dataset from latest date to end date</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Expanding-dataset-from-latest-date-to-end-date/m-p/723466#M224506</link>
      <description>&lt;PRE&gt;data HAVE;
   input ID $ Rating $ Date $ Enddate;&lt;BR /&gt;format Date yymmn. Enddate yymmn.;
   datalines;
name1 20 201810 202101&lt;BR /&gt;name1 30 201811 202101&lt;BR /&gt;name1 50 201812 202101&lt;BR /&gt;name1 50 201901 202101&lt;BR /&gt;name2 40 201901 202101&lt;BR /&gt;name2 10 201902 202101&lt;BR /&gt;name2 20 201903 202101
;&lt;/PRE&gt;</description>
      <pubDate>Thu, 04 Mar 2021 14:07:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Expanding-dataset-from-latest-date-to-end-date/m-p/723466#M224506</guid>
      <dc:creator>Giraffe123</dc:creator>
      <dc:date>2021-03-04T14:07:07Z</dc:date>
    </item>
    <item>
      <title>Re: Expanding dataset from latest date to end date</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Expanding-dataset-from-latest-date-to-end-date/m-p/723469#M224508</link>
      <description>&lt;PRE&gt; 73         data HAVE;
 74            input ID $ Rating $ Date $ Enddate;
 75         format Date yymmn. Enddate yymmn.;
                        ______
                        484
 NOTE 484-185: Format $YYMMN was not found or could not be loaded.
&lt;/PRE&gt;
&lt;P&gt;You need to do something about that.&lt;/P&gt;
&lt;LI-SPOILER&gt;Read date and enddate as a SAS date with the yymmn6. informat&lt;/LI-SPOILER&gt;</description>
      <pubDate>Thu, 04 Mar 2021 14:14:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Expanding-dataset-from-latest-date-to-end-date/m-p/723469#M224508</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2021-03-04T14:14:25Z</dc:date>
    </item>
    <item>
      <title>Re: Expanding dataset from latest date to end date</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Expanding-dataset-from-latest-date-to-end-date/m-p/723473#M224510</link>
      <description>&lt;P&gt;If you also need to fill gaps, you need a "look-ahead":&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input ID $ Rating $ (Date Enddate) (:yymmn6.);
format Date Enddate yymmn6.;
datalines;
name1 20 201810 202101
name1 30 201811 202101
name1 50 201812 202101
name1 50 201901 202101
name2 40 201901 202101
name2 10 201902 202101
name2 20 201903 202101
name2 30 201905 202101
;

data want;
merge
  have
  have (
    firstobs=2
    keep=id date
    rename=(id=_id date=_date)
  )
;
output;
if id = _id
then do while (date lt intnx('month',_date,-1,'b'));
  date = intnx('month',date,1,'b');
  output;
end;
else do while (date lt enddate);
  date = intnx('month',date,1,'b');
  output;
end;
drop _id _date;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;but if you only need to fill at the end:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
set have;
by id;
output;
if last.id
then do while (date lt enddate);
  date = intnx('month',date,1,'b');
  output;
end;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 04 Mar 2021 14:32:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Expanding-dataset-from-latest-date-to-end-date/m-p/723473#M224510</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2021-03-04T14:32:04Z</dc:date>
    </item>
    <item>
      <title>Re: Expanding dataset from latest date to end date</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Expanding-dataset-from-latest-date-to-end-date/m-p/723475#M224511</link>
      <description>&lt;P&gt;I don't often use DO loops, so I may be violating some principles. Results weren't as linear as I prefer, but it seems to match what you want. Earlier results may be more comprehensive or streamlined.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have2;
	set have;
	by id;
	if last.id then do;
		do until (date = enddate);
			date = intnx("month", lag(date), 1);
			output;
		end;
	end;
run;

data want;
	set have
		have2 (where = (date ^= .));
proc sort;
by id;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 04 Mar 2021 14:38:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Expanding-dataset-from-latest-date-to-end-date/m-p/723475#M224511</guid>
      <dc:creator>maguiremq</dc:creator>
      <dc:date>2021-03-04T14:38:55Z</dc:date>
    </item>
    <item>
      <title>Re: Expanding dataset from latest date to end date</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Expanding-dataset-from-latest-date-to-end-date/m-p/723479#M224512</link>
      <description>&lt;P&gt;Thank you very much.&lt;/P&gt;&lt;P&gt;I truly appreciate your help&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/11562"&gt;@Kurt_Bremser&lt;/a&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 04 Mar 2021 14:50:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Expanding-dataset-from-latest-date-to-end-date/m-p/723479#M224512</guid>
      <dc:creator>Giraffe123</dc:creator>
      <dc:date>2021-03-04T14:50:55Z</dc:date>
    </item>
  </channel>
</rss>

