<?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 subtracting number by previous value by group in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/subtracting-number-by-previous-value-by-group/m-p/715401#M220965</link>
    <description>&lt;P&gt;I have the following table. They are sorted by Group and Year.&lt;/P&gt;&lt;P&gt;What I would like to do is that: for each group, I would like to subtract the previous value from the previous row but keep the first observation value from each group as the same first value.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Group&lt;/TD&gt;&lt;TD&gt;Year&lt;/TD&gt;&lt;TD&gt;Rate&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2019&lt;/TD&gt;&lt;TD&gt;9.090909&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2020&lt;/TD&gt;&lt;TD&gt;27.27273&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2021&lt;/TD&gt;&lt;TD&gt;31.81818&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2018&lt;/TD&gt;&lt;TD&gt;22.72727&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2019&lt;/TD&gt;&lt;TD&gt;72.72727&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2020&lt;/TD&gt;&lt;TD&gt;95.45455&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2021&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;2018&lt;/TD&gt;&lt;TD&gt;31.81818&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;2019&lt;/TD&gt;&lt;TD&gt;54.54545&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;2020&lt;/TD&gt;&lt;TD&gt;68.18182&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;2021&lt;/TD&gt;&lt;TD&gt;68.18182&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Want:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Group&lt;/TD&gt;&lt;TD&gt;Year&lt;/TD&gt;&lt;TD&gt;Rate&lt;/TD&gt;&lt;TD&gt;rate_2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2019&lt;/TD&gt;&lt;TD&gt;9.090909&lt;/TD&gt;&lt;TD&gt;9.090909&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2020&lt;/TD&gt;&lt;TD&gt;27.27273&lt;/TD&gt;&lt;TD&gt;18.181821&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2021&lt;/TD&gt;&lt;TD&gt;31.81818&lt;/TD&gt;&lt;TD&gt;4.54545&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2018&lt;/TD&gt;&lt;TD&gt;22.72727&lt;/TD&gt;&lt;TD&gt;22.72727&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2019&lt;/TD&gt;&lt;TD&gt;72.72727&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2020&lt;/TD&gt;&lt;TD&gt;95.45455&lt;/TD&gt;&lt;TD&gt;22.72728&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2021&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;4.54545&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;2018&lt;/TD&gt;&lt;TD&gt;31.81818&lt;/TD&gt;&lt;TD&gt;31.81818&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;2019&lt;/TD&gt;&lt;TD&gt;54.54545&lt;/TD&gt;&lt;TD&gt;22.72727&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;2020&lt;/TD&gt;&lt;TD&gt;68.18182&lt;/TD&gt;&lt;TD&gt;13.63637&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;2021&lt;/TD&gt;&lt;TD&gt;68.18182&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;I tried the following&lt;/P&gt;&lt;P&gt;data want; set test;&lt;/P&gt;&lt;P&gt;by group;&lt;/P&gt;&lt;P&gt;if first.group then rate_2 = rate;&lt;/P&gt;&lt;P&gt;else if rate_2 ..?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Fri, 29 Jan 2021 18:13:39 GMT</pubDate>
    <dc:creator>pacman94</dc:creator>
    <dc:date>2021-01-29T18:13:39Z</dc:date>
    <item>
      <title>subtracting number by previous value by group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/subtracting-number-by-previous-value-by-group/m-p/715401#M220965</link>
      <description>&lt;P&gt;I have the following table. They are sorted by Group and Year.&lt;/P&gt;&lt;P&gt;What I would like to do is that: for each group, I would like to subtract the previous value from the previous row but keep the first observation value from each group as the same first value.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Group&lt;/TD&gt;&lt;TD&gt;Year&lt;/TD&gt;&lt;TD&gt;Rate&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2019&lt;/TD&gt;&lt;TD&gt;9.090909&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2020&lt;/TD&gt;&lt;TD&gt;27.27273&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2021&lt;/TD&gt;&lt;TD&gt;31.81818&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2018&lt;/TD&gt;&lt;TD&gt;22.72727&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2019&lt;/TD&gt;&lt;TD&gt;72.72727&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2020&lt;/TD&gt;&lt;TD&gt;95.45455&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2021&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;2018&lt;/TD&gt;&lt;TD&gt;31.81818&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;2019&lt;/TD&gt;&lt;TD&gt;54.54545&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;2020&lt;/TD&gt;&lt;TD&gt;68.18182&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;2021&lt;/TD&gt;&lt;TD&gt;68.18182&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Want:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Group&lt;/TD&gt;&lt;TD&gt;Year&lt;/TD&gt;&lt;TD&gt;Rate&lt;/TD&gt;&lt;TD&gt;rate_2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2019&lt;/TD&gt;&lt;TD&gt;9.090909&lt;/TD&gt;&lt;TD&gt;9.090909&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2020&lt;/TD&gt;&lt;TD&gt;27.27273&lt;/TD&gt;&lt;TD&gt;18.181821&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2021&lt;/TD&gt;&lt;TD&gt;31.81818&lt;/TD&gt;&lt;TD&gt;4.54545&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2018&lt;/TD&gt;&lt;TD&gt;22.72727&lt;/TD&gt;&lt;TD&gt;22.72727&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2019&lt;/TD&gt;&lt;TD&gt;72.72727&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2020&lt;/TD&gt;&lt;TD&gt;95.45455&lt;/TD&gt;&lt;TD&gt;22.72728&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2021&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;4.54545&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;2018&lt;/TD&gt;&lt;TD&gt;31.81818&lt;/TD&gt;&lt;TD&gt;31.81818&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;2019&lt;/TD&gt;&lt;TD&gt;54.54545&lt;/TD&gt;&lt;TD&gt;22.72727&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;2020&lt;/TD&gt;&lt;TD&gt;68.18182&lt;/TD&gt;&lt;TD&gt;13.63637&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;2021&lt;/TD&gt;&lt;TD&gt;68.18182&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;I tried the following&lt;/P&gt;&lt;P&gt;data want; set test;&lt;/P&gt;&lt;P&gt;by group;&lt;/P&gt;&lt;P&gt;if first.group then rate_2 = rate;&lt;/P&gt;&lt;P&gt;else if rate_2 ..?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 29 Jan 2021 18:13:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/subtracting-number-by-previous-value-by-group/m-p/715401#M220965</guid>
      <dc:creator>pacman94</dc:creator>
      <dc:date>2021-01-29T18:13:39Z</dc:date>
    </item>
    <item>
      <title>Re: subtracting number by previous value by group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/subtracting-number-by-previous-value-by-group/m-p/715866#M221149</link>
      <description>&lt;P&gt;The LAG function is you friend here, but make sure you &lt;EM&gt;always&lt;/EM&gt;&amp;nbsp;execute the LAG - never put a call to the LAG function in a conditional code block. Try this:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  infile datalines truncover;
  input Group:$1. Year:4. Rate:10.;
datalines;
A	2019	9.090909
A	2020	27.27273
A	2021	31.81818
B	2018	22.72727
B	2019	72.72727
B	2020	95.45455
B	2021	100
C	2018	31.81818
C	2019	54.54545
C	2020	68.18182
C	2021	68.18182
;

data want;
   set have;
   by group;
   /* ALWAYS execute the LAG function - never make it conditional */
   rate_2=sum(Rate,-lag1(rate));
   if first.group then rate_2=rate;
run;

proc print;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 01 Feb 2021 19:06:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/subtracting-number-by-previous-value-by-group/m-p/715866#M221149</guid>
      <dc:creator>SASJedi</dc:creator>
      <dc:date>2021-02-01T19:06:44Z</dc:date>
    </item>
  </channel>
</rss>

