<?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: Row calculations in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Row-calculations/m-p/616866#M180680</link>
    <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/154786"&gt;@PetePatel&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can try this, using the LAG() function:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;- if date = a character variable:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
	set have;
	_lag = lag(value);
	if substr(Date,1,3) in ("Feb","Mar") then New_value = _lag * 0.5;
	else New_Value = Value;
	drop _lag;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;- if date = a SAS date:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
	set have;
	_lag = lag(value);
	if MONTH(Date) in (2,3) then New_value = _lag * 0.5;
	else New_Value = Value;
	drop _lag;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Best,&lt;/P&gt;</description>
    <pubDate>Mon, 13 Jan 2020 11:45:22 GMT</pubDate>
    <dc:creator>ed_sas_member</dc:creator>
    <dc:date>2020-01-13T11:45:22Z</dc:date>
    <item>
      <title>Row calculations</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Row-calculations/m-p/616864#M180678</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have a long dataset (&amp;gt;10,000 ID's over 8 year period) with multiple dates and need to perform some calculations by 'ID'.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I already have ID, date and value but need to create 'New_value'' such that for the month of February and March the value is modified at ID level.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So New_Value:&amp;nbsp; February is 0.5*Jan Value and March is 0.5*Feb Value. Otherwise New_Value=Value.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;My date format is YYMMDD10.;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Example:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;Date&lt;/TD&gt;&lt;TD&gt;Value&lt;/TD&gt;&lt;TD&gt;New_Value&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Jan-15&lt;/TD&gt;&lt;TD&gt;0.50&lt;/TD&gt;&lt;TD&gt;0.50&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Feb-15&lt;/TD&gt;&lt;TD&gt;1.00&lt;/TD&gt;&lt;TD&gt;0.25&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Mar-15&lt;/TD&gt;&lt;TD&gt;0.44&lt;/TD&gt;&lt;TD&gt;0.50&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Apr-15&lt;/TD&gt;&lt;TD&gt;0.06&lt;/TD&gt;&lt;TD&gt;0.06&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;May-15&lt;/TD&gt;&lt;TD&gt;0.42&lt;/TD&gt;&lt;TD&gt;0.42&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Jun-15&lt;/TD&gt;&lt;TD&gt;0.75&lt;/TD&gt;&lt;TD&gt;0.75&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Jul-15&lt;/TD&gt;&lt;TD&gt;0.33&lt;/TD&gt;&lt;TD&gt;0.33&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Aug-15&lt;/TD&gt;&lt;TD&gt;0.11&lt;/TD&gt;&lt;TD&gt;0.11&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Sep-15&lt;/TD&gt;&lt;TD&gt;0.42&lt;/TD&gt;&lt;TD&gt;0.42&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Oct-15&lt;/TD&gt;&lt;TD&gt;0.03&lt;/TD&gt;&lt;TD&gt;0.03&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Nov-15&lt;/TD&gt;&lt;TD&gt;0.58&lt;/TD&gt;&lt;TD&gt;0.58&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Dec-15&lt;/TD&gt;&lt;TD&gt;0.45&lt;/TD&gt;&lt;TD&gt;0.45&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Jan-16&lt;/TD&gt;&lt;TD&gt;2.00&lt;/TD&gt;&lt;TD&gt;2.00&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Feb-16&lt;/TD&gt;&lt;TD&gt;3.00&lt;/TD&gt;&lt;TD&gt;1.00&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Mar-16&lt;/TD&gt;&lt;TD&gt;0.55&lt;/TD&gt;&lt;TD&gt;1.50&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Any support would be much appreciated.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;</description>
      <pubDate>Mon, 13 Jan 2020 10:32:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Row-calculations/m-p/616864#M180678</guid>
      <dc:creator>PetePatel</dc:creator>
      <dc:date>2020-01-13T10:32:35Z</dc:date>
    </item>
    <item>
      <title>Re: Row calculations</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Row-calculations/m-p/616866#M180680</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/154786"&gt;@PetePatel&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can try this, using the LAG() function:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;- if date = a character variable:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
	set have;
	_lag = lag(value);
	if substr(Date,1,3) in ("Feb","Mar") then New_value = _lag * 0.5;
	else New_Value = Value;
	drop _lag;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;- if date = a SAS date:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
	set have;
	_lag = lag(value);
	if MONTH(Date) in (2,3) then New_value = _lag * 0.5;
	else New_Value = Value;
	drop _lag;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Best,&lt;/P&gt;</description>
      <pubDate>Mon, 13 Jan 2020 11:45:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Row-calculations/m-p/616866#M180680</guid>
      <dc:creator>ed_sas_member</dc:creator>
      <dc:date>2020-01-13T11:45:22Z</dc:date>
    </item>
    <item>
      <title>Re: Row calculations</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Row-calculations/m-p/616916#M180704</link>
      <description>&lt;P&gt;Do any of your ID's start in the month of Feb or Mar?&amp;nbsp;&amp;nbsp; If so, then the preceding month data would arise from the prior ID.&amp;nbsp; You would need to protect against that, as in:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
  set have;
  by id;
  new_value=ifn(month(date) in (2,3) and first.id^=1,.5*lag(value),value);
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;If no ID's start in Feb or Mar, then you&amp;nbsp; can drop the BY&amp;nbsp; statement and simplify the new_value= assignment:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
  set have;
  new_value=ifn(month(date) in (2,3),.5*lag(value),value);
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Why do I use the IFN statement, instead of an &lt;EM&gt;&lt;STRONG&gt;IF month(date)=&lt;/STRONG&gt;&lt;/EM&gt; then ..., followed by &lt;EM&gt;&lt;STRONG&gt;ELSE ....&lt;/STRONG&gt;&lt;/EM&gt;?&amp;nbsp;&amp;nbsp; Because the LAG function is really an "update queue" function - it's not a "look back" like in Excel.&amp;nbsp; You need the queue to always be updated, even if you don't assign the results of the update in NEW_VALUE.&amp;nbsp;&amp;nbsp; The intrinsic property of IFN is that it evaluates both of the outcome fields (the 2nd and 3rd arguments), reqardless of the results of the conditional field (argument 1).&amp;nbsp; So the LAG function underlying queue is always being updated and you are master of your destiny.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 13 Jan 2020 14:13:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Row-calculations/m-p/616916#M180704</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2020-01-13T14:13:42Z</dc:date>
    </item>
    <item>
      <title>Re: Row calculations</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Row-calculations/m-p/616938#M180714</link>
      <description>&lt;P&gt;Thank you for your reply.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Please see ifn statement in latest reply that would help with ID's starting in Feb.&lt;/P&gt;</description>
      <pubDate>Mon, 13 Jan 2020 15:09:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Row-calculations/m-p/616938#M180714</guid>
      <dc:creator>PetePatel</dc:creator>
      <dc:date>2020-01-13T15:09:18Z</dc:date>
    </item>
    <item>
      <title>Re: Row calculations</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Row-calculations/m-p/616939#M180715</link>
      <description>&lt;P&gt;Thank you mkeintz.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I really like how the code protects against any ID's starting in Feb or Mar.&lt;/P&gt;</description>
      <pubDate>Mon, 13 Jan 2020 15:10:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Row-calculations/m-p/616939#M180715</guid>
      <dc:creator>PetePatel</dc:creator>
      <dc:date>2020-01-13T15:10:17Z</dc:date>
    </item>
  </channel>
</rss>

