<?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: re: calculating number of days between successive dates in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/re-calculating-number-of-days-between-successive-dates/m-p/299414#M63140</link>
    <description>&lt;P&gt;First, The point of BY groups is to not have to check for the same ID - that's what it does.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Replace&amp;nbsp;&lt;/P&gt;
&lt;P&gt;if id=lag(Id)&amp;nbsp;&lt;/P&gt;
&lt;P&gt;with only an Else.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Second - Lag doesn't work the way you think it does, and using it in an IF condition creates issues.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Calculate your lag value every iteration. So after BY&lt;/P&gt;
&lt;P&gt;lag_claim= lag(claim_date); add any conversions necessary here as well.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;And in in your if first.id set lag_claim to . &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Replace lag in functions with lag_claim.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;There red are papers galore on how the LAG functions work so I would recommend researching and reading one. Or remember - don't use it conditionally.&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Tue, 20 Sep 2016 00:09:10 GMT</pubDate>
    <dc:creator>Reeza</dc:creator>
    <dc:date>2016-09-20T00:09:10Z</dc:date>
    <item>
      <title>re: calculating number of days between successive dates</title>
      <link>https://communities.sas.com/t5/SAS-Programming/re-calculating-number-of-days-between-successive-dates/m-p/299413#M63139</link>
      <description>&lt;P&gt;Hi...I am trying to calculate the number of days, weeks, months and years between successive claims for each ID. I am getting some unusual results. This is the code I am using:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;proc sort&lt;/STRONG&gt; data=Summary;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by ID Claim_Date;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;run&lt;/STRONG&gt;;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;data&lt;/STRONG&gt; pc1;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set Summary;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by ID;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if first.ID then do;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Number_Days = &lt;STRONG&gt;.&lt;/STRONG&gt;;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Number_Weeks = &lt;STRONG&gt;.&lt;/STRONG&gt;;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Number_Months = &lt;STRONG&gt;.&lt;/STRONG&gt;;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Number_Years = &lt;STRONG&gt;.&lt;/STRONG&gt;;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if ID = lag(ID) then do;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Number_Days = (intck('Day', lag(input(put(Claim_Date,&lt;STRONG&gt;8.&lt;/STRONG&gt;),yymmdd8.)), input(put(Claim_Date,&lt;STRONG&gt;8.&lt;/STRONG&gt;),yymmdd8.),'c'));&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Number_Weeks = (intck('Week', lag(input(put(Claim_Date,&lt;STRONG&gt;8.&lt;/STRONG&gt;),yymmdd8.)), input(put(Claim_Date,&lt;STRONG&gt;8.&lt;/STRONG&gt;),yymmdd8.),'c'));&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Number_Months = (intck('Month', lag(input(put(Claim_Date,&lt;STRONG&gt;8.&lt;/STRONG&gt;),yymmdd8.)), input(put(Claim_Date,&lt;STRONG&gt;8.&lt;/STRONG&gt;),yymmdd8.),'c'));&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Number_Years = (intck('Year', lag(input(put(Claim_Date,&lt;STRONG&gt;8.&lt;/STRONG&gt;),yymmdd8.)), input(put(Claim_Date,&lt;STRONG&gt;8.&lt;/STRONG&gt;),yymmdd8.),'c'));&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;run&lt;/STRONG&gt;;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is what I get:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="563"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="78"&gt;Claim_Date&lt;/TD&gt;
&lt;TD width="70"&gt;ID&lt;/TD&gt;
&lt;TD width="95"&gt;Number_Days&lt;/TD&gt;
&lt;TD width="108"&gt;Number_Weeks&lt;/TD&gt;
&lt;TD width="113"&gt;Number_Months&lt;/TD&gt;
&lt;TD width="99"&gt;Number_Years&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;20141003&lt;/TD&gt;
&lt;TD&gt;100001945&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;20090902&lt;/TD&gt;
&lt;TD&gt;100002160&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;20090902&lt;/TD&gt;
&lt;TD&gt;100002160&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;20090902&lt;/TD&gt;
&lt;TD&gt;100002160&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;20090903&lt;/TD&gt;
&lt;TD&gt;100002160&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;20111124&lt;/TD&gt;
&lt;TD&gt;100002727&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;20111124&lt;/TD&gt;
&lt;TD&gt;100002727&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;20111124&lt;/TD&gt;
&lt;TD&gt;100002727&lt;/TD&gt;
&lt;TD&gt;812&lt;/TD&gt;
&lt;TD&gt;116&lt;/TD&gt;
&lt;TD&gt;26&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is what I want:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="563"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="78"&gt;Claim_Date&lt;/TD&gt;
&lt;TD width="70"&gt;ID&lt;/TD&gt;
&lt;TD width="95"&gt;Number_Days&lt;/TD&gt;
&lt;TD width="108"&gt;Number_Weeks&lt;/TD&gt;
&lt;TD width="113"&gt;Number_Months&lt;/TD&gt;
&lt;TD width="99"&gt;Number_Years&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;20141003&lt;/TD&gt;
&lt;TD&gt;100001945&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;20090902&lt;/TD&gt;
&lt;TD&gt;100002160&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;20090902&lt;/TD&gt;
&lt;TD&gt;100002160&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;20090902&lt;/TD&gt;
&lt;TD&gt;100002160&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;20090903&lt;/TD&gt;
&lt;TD&gt;100002160&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;20111124&lt;/TD&gt;
&lt;TD&gt;100002727&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;20111124&lt;/TD&gt;
&lt;TD&gt;100002727&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;20111124&lt;/TD&gt;
&lt;TD&gt;100002727&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks.&lt;/P&gt;</description>
      <pubDate>Mon, 19 Sep 2016 23:43:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/re-calculating-number-of-days-between-successive-dates/m-p/299413#M63139</guid>
      <dc:creator>twildone</dc:creator>
      <dc:date>2016-09-19T23:43:26Z</dc:date>
    </item>
    <item>
      <title>Re: re: calculating number of days between successive dates</title>
      <link>https://communities.sas.com/t5/SAS-Programming/re-calculating-number-of-days-between-successive-dates/m-p/299414#M63140</link>
      <description>&lt;P&gt;First, The point of BY groups is to not have to check for the same ID - that's what it does.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Replace&amp;nbsp;&lt;/P&gt;
&lt;P&gt;if id=lag(Id)&amp;nbsp;&lt;/P&gt;
&lt;P&gt;with only an Else.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Second - Lag doesn't work the way you think it does, and using it in an IF condition creates issues.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Calculate your lag value every iteration. So after BY&lt;/P&gt;
&lt;P&gt;lag_claim= lag(claim_date); add any conversions necessary here as well.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;And in in your if first.id set lag_claim to . &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Replace lag in functions with lag_claim.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;There red are papers galore on how the LAG functions work so I would recommend researching and reading one. Or remember - don't use it conditionally.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 20 Sep 2016 00:09:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/re-calculating-number-of-days-between-successive-dates/m-p/299414#M63140</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2016-09-20T00:09:10Z</dc:date>
    </item>
  </channel>
</rss>

