<?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: Summing up values for lagged years in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/281279#M57010</link>
    <description>&lt;P&gt;Thank you very much.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Your code works perfectly for the example I have given. However, when I run it with my actual datasets it gives an error. I have copy pasted the code and the error. Could you show me what I'm doing wrong?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;proc sql ;&lt;BR /&gt;create table ipo_lag3(drop=CUSIP2 Year2) as&lt;BR /&gt;select * from ma.sample_firms left join ma.ipo_tranposed_new (rename=(Year=Year2 CUSIP=CUSIP2))&lt;BR /&gt;on ma.sample_firms.CUSIP=ma.ipo_tranposed_new.CUSIP2 and ma.sample_firms.Year-ma.ipo_tranposed_new.Year2 between 1 and 3;&lt;BR /&gt;quit;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;*ds1 is&amp;nbsp;&lt;SPAN&gt;ma.sample_firms, ds2 is ma.ipo_transposed_new, ds3 is ipo_lag3 and ID is CUSIP;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;I have attached a screenshot of the error I get.&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Thanks!&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;&lt;IMG src="https://communities.sas.com/t5/image/serverpage/image-id/12709i0090462A37F0BCE2/image-size/large?v=1.0&amp;amp;px=600" border="0" alt="error.png" title="error.png" /&gt;</description>
    <pubDate>Wed, 29 Jun 2016 21:11:41 GMT</pubDate>
    <dc:creator>aaou</dc:creator>
    <dc:date>2016-06-29T21:11:41Z</dc:date>
    <item>
      <title>Summing up values for lagged years</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/281152#M56956</link>
      <description>&lt;P&gt;I have a dataset where each oberservation is identified with a unique ID and year (Data Set1). I have another data set also with ID and years and values for several other variables. For each observation in Data Set1, I want to look at Data Set 2 and if that same ID exists then I want to sum up the values for the previous 3 years in Data Set 2.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For example I'm looking at something like this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;Dataset1&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Year&lt;/TD&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2014&lt;/TD&gt;&lt;TD&gt;456&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2014&lt;/TD&gt;&lt;TD&gt;678&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2014&lt;/TD&gt;&lt;TD&gt;709&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2015&lt;/TD&gt;&lt;TD&gt;346&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2015&lt;/TD&gt;&lt;TD&gt;456&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2015&lt;/TD&gt;&lt;TD&gt;567&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2016&lt;/TD&gt;&lt;TD&gt;678&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2016&lt;/TD&gt;&lt;TD&gt;709&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2016&lt;/TD&gt;&lt;TD&gt;891&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Dataset2&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;Year&lt;/TD&gt;&lt;TD&gt;Math&lt;/TD&gt;&lt;TD&gt;Science&lt;/TD&gt;&lt;TD&gt;Music&lt;/TD&gt;&lt;TD&gt;Latin&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;300&lt;/TD&gt;&lt;TD&gt;2011&lt;/TD&gt;&lt;TD&gt;56&lt;/TD&gt;&lt;TD&gt;32&lt;/TD&gt;&lt;TD&gt;54&lt;/TD&gt;&lt;TD&gt;45&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;456&lt;/TD&gt;&lt;TD&gt;2011&lt;/TD&gt;&lt;TD&gt;85&lt;/TD&gt;&lt;TD&gt;87&lt;/TD&gt;&lt;TD&gt;89&lt;/TD&gt;&lt;TD&gt;95&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;678&lt;/TD&gt;&lt;TD&gt;2011&lt;/TD&gt;&lt;TD&gt;76&lt;/TD&gt;&lt;TD&gt;87&lt;/TD&gt;&lt;TD&gt;56&lt;/TD&gt;&lt;TD&gt;76&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;456&lt;/TD&gt;&lt;TD&gt;2012&lt;/TD&gt;&lt;TD&gt;88&lt;/TD&gt;&lt;TD&gt;89&lt;/TD&gt;&lt;TD&gt;90&lt;/TD&gt;&lt;TD&gt;93&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;567&lt;/TD&gt;&lt;TD&gt;2012&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;54&lt;/TD&gt;&lt;TD&gt;56&lt;/TD&gt;&lt;TD&gt;57&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;456&lt;/TD&gt;&lt;TD&gt;2013&lt;/TD&gt;&lt;TD&gt;86&lt;/TD&gt;&lt;TD&gt;87&lt;/TD&gt;&lt;TD&gt;93&lt;/TD&gt;&lt;TD&gt;94&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;300&lt;/TD&gt;&lt;TD&gt;2013&lt;/TD&gt;&lt;TD&gt;13&lt;/TD&gt;&lt;TD&gt;34&lt;/TD&gt;&lt;TD&gt;54&lt;/TD&gt;&lt;TD&gt;35&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;567&lt;/TD&gt;&lt;TD&gt;2013&lt;/TD&gt;&lt;TD&gt;45&lt;/TD&gt;&lt;TD&gt;48&lt;/TD&gt;&lt;TD&gt;56&lt;/TD&gt;&lt;TD&gt;59&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;456&lt;/TD&gt;&lt;TD&gt;2014&lt;/TD&gt;&lt;TD&gt;85&lt;/TD&gt;&lt;TD&gt;87&lt;/TD&gt;&lt;TD&gt;88&lt;/TD&gt;&lt;TD&gt;95&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;200&lt;/TD&gt;&lt;TD&gt;2014&lt;/TD&gt;&lt;TD&gt;56&lt;/TD&gt;&lt;TD&gt;58&lt;/TD&gt;&lt;TD&gt;54&lt;/TD&gt;&lt;TD&gt;56&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;678&lt;/TD&gt;&lt;TD&gt;2014&lt;/TD&gt;&lt;TD&gt;70&lt;/TD&gt;&lt;TD&gt;76&lt;/TD&gt;&lt;TD&gt;75&lt;/TD&gt;&lt;TD&gt;78&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;567&lt;/TD&gt;&lt;TD&gt;2014&lt;/TD&gt;&lt;TD&gt;58&lt;/TD&gt;&lt;TD&gt;58&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;55&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;678&lt;/TD&gt;&lt;TD&gt;2015&lt;/TD&gt;&lt;TD&gt;74&lt;/TD&gt;&lt;TD&gt;76&lt;/TD&gt;&lt;TD&gt;78&lt;/TD&gt;&lt;TD&gt;70&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;300&lt;/TD&gt;&lt;TD&gt;2015&lt;/TD&gt;&lt;TD&gt;34&lt;/TD&gt;&lt;TD&gt;32&lt;/TD&gt;&lt;TD&gt;14&lt;/TD&gt;&lt;TD&gt;26&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The output I'm looking at:&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;Year&lt;/TD&gt;&lt;TD&gt;Math&lt;/TD&gt;&lt;TD&gt;Science&lt;/TD&gt;&lt;TD&gt;Music&lt;/TD&gt;&lt;TD&gt;Latin&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;456&lt;/TD&gt;&lt;TD&gt;2014&lt;/TD&gt;&lt;TD&gt;259&lt;/TD&gt;&lt;TD&gt;263&lt;/TD&gt;&lt;TD&gt;272&lt;/TD&gt;&lt;TD&gt;282&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;678&lt;/TD&gt;&lt;TD&gt;2014&lt;/TD&gt;&lt;TD&gt;76&lt;/TD&gt;&lt;TD&gt;87&lt;/TD&gt;&lt;TD&gt;56&lt;/TD&gt;&lt;TD&gt;76&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;709&lt;/TD&gt;&lt;TD&gt;2014&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;346&lt;/TD&gt;&lt;TD&gt;2015&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;456&lt;/TD&gt;&lt;TD&gt;2015&lt;/TD&gt;&lt;TD&gt;259&lt;/TD&gt;&lt;TD&gt;263&lt;/TD&gt;&lt;TD&gt;271&lt;/TD&gt;&lt;TD&gt;282&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;567&lt;/TD&gt;&lt;TD&gt;2015&lt;/TD&gt;&lt;TD&gt;153&lt;/TD&gt;&lt;TD&gt;160&lt;/TD&gt;&lt;TD&gt;162&lt;/TD&gt;&lt;TD&gt;171&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;678&lt;/TD&gt;&lt;TD&gt;2016&lt;/TD&gt;&lt;TD&gt;144&lt;/TD&gt;&lt;TD&gt;152&lt;/TD&gt;&lt;TD&gt;153&lt;/TD&gt;&lt;TD&gt;148&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;709&lt;/TD&gt;&lt;TD&gt;2016&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;891&lt;/TD&gt;&lt;TD&gt;2016&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;Thank you!&lt;/P&gt;</description>
      <pubDate>Wed, 29 Jun 2016 18:18:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/281152#M56956</guid>
      <dc:creator>aaou</dc:creator>
      <dc:date>2016-06-29T18:18:47Z</dc:date>
    </item>
    <item>
      <title>Re: Summing up values for lagged years</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/281184#M56966</link>
      <description>&lt;P&gt;Hi aaou&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The merge can be done using proc sql&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data ds1;&lt;BR /&gt;input year id;&lt;BR /&gt;cards;&lt;BR /&gt;2014 456&lt;BR /&gt;2014 678&lt;BR /&gt;2014 709&lt;BR /&gt;2015 346&lt;BR /&gt;2015 456&lt;BR /&gt;2015 567&lt;BR /&gt;2016 678&lt;BR /&gt;2016 709&lt;BR /&gt;2016 891&lt;BR /&gt;;&lt;/P&gt;&lt;P&gt;data ds2;&lt;BR /&gt;input id year Math Science Music Latin;&lt;BR /&gt;cards;&lt;BR /&gt;300 2011 56 32 54 45&lt;BR /&gt;456 2011 85 87 89 95&lt;BR /&gt;678 2011 76 87 56 76&lt;BR /&gt;456 2012 88 89 90 93&lt;BR /&gt;567 2012 50 54 56 57&lt;BR /&gt;456 2013 86 87 93 94&lt;BR /&gt;300 2013 13 34 54 35&lt;BR /&gt;567 2013 45 48 56 59&lt;BR /&gt;456 2014 85 87 88 95&lt;BR /&gt;200 2014 56 58 54 56&lt;BR /&gt;678 2014 70 76 75 78&lt;BR /&gt;567 2014 58 58 50 55&lt;BR /&gt;678 2015 74 76 78 70&lt;BR /&gt;300 2015 34 32 14 26&lt;BR /&gt;;&lt;BR /&gt;run;&lt;BR /&gt;&lt;BR /&gt;proc sql ;&lt;BR /&gt;create table ds3 as&lt;BR /&gt;select ds1.year, ds1.id,Math,Science,Music,Latin from ds1 left join ds2&lt;BR /&gt;on ds1.id=ds2.id and ds1.year-ds2.year between 1 and 3;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;proc means data=ds3 noprint ;&lt;BR /&gt;class year id;&lt;BR /&gt;types year*id;&lt;BR /&gt;output out=ds4 sum=;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;year&lt;/TD&gt;&lt;TD&gt;id&lt;/TD&gt;&lt;TD&gt;_TYPE_&lt;/TD&gt;&lt;TD&gt;_FREQ_&lt;/TD&gt;&lt;TD&gt;Math&lt;/TD&gt;&lt;TD&gt;Science&lt;/TD&gt;&lt;TD&gt;Music&lt;/TD&gt;&lt;TD&gt;Latin&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2014&lt;/TD&gt;&lt;TD&gt;456&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;259&lt;/TD&gt;&lt;TD&gt;263&lt;/TD&gt;&lt;TD&gt;272&lt;/TD&gt;&lt;TD&gt;282&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2014&lt;/TD&gt;&lt;TD&gt;678&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;76&lt;/TD&gt;&lt;TD&gt;87&lt;/TD&gt;&lt;TD&gt;56&lt;/TD&gt;&lt;TD&gt;76&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2014&lt;/TD&gt;&lt;TD&gt;709&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&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;2015&lt;/TD&gt;&lt;TD&gt;346&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&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;2015&lt;/TD&gt;&lt;TD&gt;456&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;259&lt;/TD&gt;&lt;TD&gt;263&lt;/TD&gt;&lt;TD&gt;271&lt;/TD&gt;&lt;TD&gt;282&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2015&lt;/TD&gt;&lt;TD&gt;567&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;153&lt;/TD&gt;&lt;TD&gt;160&lt;/TD&gt;&lt;TD&gt;162&lt;/TD&gt;&lt;TD&gt;171&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2016&lt;/TD&gt;&lt;TD&gt;678&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;144&lt;/TD&gt;&lt;TD&gt;152&lt;/TD&gt;&lt;TD&gt;153&lt;/TD&gt;&lt;TD&gt;148&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2016&lt;/TD&gt;&lt;TD&gt;709&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&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;2016&lt;/TD&gt;&lt;TD&gt;891&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&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;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 29 Jun 2016 17:56:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/281184#M56966</guid>
      <dc:creator>JohnHoughton</dc:creator>
      <dc:date>2016-06-29T17:56:33Z</dc:date>
    </item>
    <item>
      <title>Re: Summing up values for lagged years</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/281200#M56975</link>
      <description>&lt;P&gt;Hi John,&lt;/P&gt;&lt;P&gt;Thank you very much! much apreciated.&amp;nbsp;&lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 29 Jun 2016 18:18:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/281200#M56975</guid>
      <dc:creator>aaou</dc:creator>
      <dc:date>2016-06-29T18:18:06Z</dc:date>
    </item>
    <item>
      <title>Re: Summing up values for lagged years</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/281203#M56977</link>
      <description>&lt;P&gt;&lt;SPAN&gt;I'm new to programming,so only if you have the time, would you mind dissecting your code a bit; so that I understand each statement better? Only if you don't mind.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Also in the original dataset I'm dealing with, I have a large number of variables that I need to add up. So instead of listing each variable when I'm creating the table using sql,is there an easier way of referring to all the variables I need to add in this manner?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Thank you!&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 29 Jun 2016 18:24:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/281203#M56977</guid>
      <dc:creator>aaou</dc:creator>
      <dc:date>2016-06-29T18:24:54Z</dc:date>
    </item>
    <item>
      <title>Re: Summing up values for lagged years</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/281265#M57000</link>
      <description>&lt;P&gt;Hi.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For the first question, if you google "SQL Joins" then you'll find a wealth of info (don't include "sas" in your search).&lt;/P&gt;&lt;P&gt;Most simple SQL code can then be used within a SAS Proc SQL procedure step, but it's not exactly the same.&lt;/P&gt;&lt;P&gt;"Left join" (a.k.a left outer join) keeps all of the observations from the first named dataset (ds1) and only those observations from the 2nd datastep that match the join conditions.&lt;/P&gt;&lt;P&gt;The join conditions are defined in the On clause .&lt;/P&gt;&lt;P&gt;Classic SQL wouldn't allow the 'between' comparison to be used ; that is unique to SAS.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;To answer your second question, replace the proc sql step with the one below.&lt;/P&gt;&lt;P&gt;This uses a wildcard (*) in the select clause to keep all variables in both datasets.&lt;/P&gt;&lt;P&gt;But to allow that I had to use sas dataset options to rename the year and id variables in ds2.&lt;/P&gt;&lt;P&gt;This is possible because sql joins do not need the matching colums (in the ON clause) to have the same names.&lt;/P&gt;&lt;P&gt;Compare that to data step merge using By , where the By variables have to have the same name in both datasets.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;proc sql ;&lt;BR /&gt;create table ds3(drop=id2 year2) as&lt;BR /&gt;select * from ds1 left join ds2 (rename=(year=year2 id=id2))&lt;BR /&gt;on ds1.id=ds2.id2 and ds1.year-ds2.year2 between 1 and 3;&lt;BR /&gt;quit;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 29 Jun 2016 20:34:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/281265#M57000</guid>
      <dc:creator>JohnHoughton</dc:creator>
      <dc:date>2016-06-29T20:34:42Z</dc:date>
    </item>
    <item>
      <title>Re: Summing up values for lagged years</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/281279#M57010</link>
      <description>&lt;P&gt;Thank you very much.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Your code works perfectly for the example I have given. However, when I run it with my actual datasets it gives an error. I have copy pasted the code and the error. Could you show me what I'm doing wrong?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;proc sql ;&lt;BR /&gt;create table ipo_lag3(drop=CUSIP2 Year2) as&lt;BR /&gt;select * from ma.sample_firms left join ma.ipo_tranposed_new (rename=(Year=Year2 CUSIP=CUSIP2))&lt;BR /&gt;on ma.sample_firms.CUSIP=ma.ipo_tranposed_new.CUSIP2 and ma.sample_firms.Year-ma.ipo_tranposed_new.Year2 between 1 and 3;&lt;BR /&gt;quit;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;*ds1 is&amp;nbsp;&lt;SPAN&gt;ma.sample_firms, ds2 is ma.ipo_transposed_new, ds3 is ipo_lag3 and ID is CUSIP;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;I have attached a screenshot of the error I get.&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Thanks!&lt;/SPAN&gt;&lt;/P&gt;&lt;BR /&gt;&lt;IMG src="https://communities.sas.com/t5/image/serverpage/image-id/12709i0090462A37F0BCE2/image-size/large?v=1.0&amp;amp;px=600" border="0" alt="error.png" title="error.png" /&gt;</description>
      <pubDate>Wed, 29 Jun 2016 21:11:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/281279#M57010</guid>
      <dc:creator>aaou</dc:creator>
      <dc:date>2016-06-29T21:11:41Z</dc:date>
    </item>
    <item>
      <title>Re: Summing up values for lagged years</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/281297#M57021</link>
      <description>&lt;P&gt;You will have to use a table alias for each of the data tables, using the keyword AS. For an example see example 32.27 at &lt;A href="https://onlinecourses.science.psu.edu/stat482/node/46" target="_self"&gt;https://onlinecourses.science.psu.edu/stat482/node/46&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 29 Jun 2016 22:01:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/281297#M57021</guid>
      <dc:creator>JohnHoughton</dc:creator>
      <dc:date>2016-06-29T22:01:38Z</dc:date>
    </item>
    <item>
      <title>Re: Summing up values for lagged years</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/281302#M57022</link>
      <description>&lt;P&gt;Thanks!&lt;/P&gt;&lt;P&gt;I changed it as follows:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;proc sql ;&lt;BR /&gt;create table ipo_lag3(drop=CUSIP2 Year2) as&lt;BR /&gt;select * from ma.sample_firms as ds1 left join ma.ipo_tranposed_new as ds2(rename=(Year=Year2 CUSIP=CUSIP2))on&lt;BR /&gt;ds1.CUSIP=ds2.CUSIP2 and ds1.Year-ds2.Year2 between 1 and 3;&lt;BR /&gt;quit;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;But I get the attached error.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;BR /&gt;&lt;IMG src="https://communities.sas.com/t5/image/serverpage/image-id/12711i82E2847F4D55BCC3/image-size/large?v=1.0&amp;amp;px=600" border="0" alt="error.png" title="error.png" /&gt;</description>
      <pubDate>Wed, 29 Jun 2016 22:39:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/281302#M57022</guid>
      <dc:creator>aaou</dc:creator>
      <dc:date>2016-06-29T22:39:39Z</dc:date>
    </item>
    <item>
      <title>Re: Summing up values for lagged years</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/281308#M57023</link>
      <description>&lt;P&gt;I expect the dataset option has to be moved to be immediately after the dataset name and not after the alias name.&lt;/P&gt;&lt;P&gt;That is:&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;left join ma.ipo_tranposed_new (rename=(Year=Year2 CUSIP=CUSIP2)) as ds2&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 29 Jun 2016 22:52:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/281308#M57023</guid>
      <dc:creator>JohnHoughton</dc:creator>
      <dc:date>2016-06-29T22:52:07Z</dc:date>
    </item>
    <item>
      <title>Re: Summing up values for lagged years</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/281311#M57024</link>
      <description>&lt;P&gt;Thanks! Sorry to keep on troubling you,&lt;/P&gt;&lt;P&gt;Then I get the attached error. The variables in ds2 that I want to add up are numerical. And the year and ID are character. I double checked. So I'm not sure why I'm getting this error.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm assuming it's reffering to this portion of the code&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;ds1.Year-ds2.Year2 between 1 and 3;&lt;/P&gt;&lt;BR /&gt;&lt;IMG src="https://communities.sas.com/t5/image/serverpage/image-id/12712i8D40F212002C013C/image-size/large?v=1.0&amp;amp;px=600" border="0" alt="error.png" title="error.png" /&gt;</description>
      <pubDate>Wed, 29 Jun 2016 23:34:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/281311#M57024</guid>
      <dc:creator>aaou</dc:creator>
      <dc:date>2016-06-29T23:34:57Z</dc:date>
    </item>
    <item>
      <title>Re: Summing up values for lagged years</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/281344#M57039</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data ds1;
input year id;
cards;
2014 456
2014 678
2014 709
2015 346
2015 456
2015 567
2016 678
2016 709
2016 891
;
data ds2;
input id year Math Science Music Latin;
cards;
300 2011 56 32 54 45
456 2011 85 87 89 95
678 2011 76 87 56 76
456 2012 88 89 90 93
567 2012 50 54 56 57
456 2013 86 87 93 94
300 2013 13 34 54 35
567 2013 45 48 56 59
456 2014 85 87 88 95
200 2014 56 58 54 56
678 2014 70 76 75 78
567 2014 58 58 50 55
678 2015 74 76 78 70
300 2015 34 32 14 26
;
run;
proc sql;
create table want as
 select *,
  coalesce((select sum(Math) from ds2 where id=a.id and year between a.year-3 and a.year-1),0) as Math,
  coalesce((select sum(Science) from ds2 where id=a.id and year between a.year-3 and a.year-1),0) as Science,
  coalesce((select sum(Music) from ds2 where id=a.id and year between a.year-3 and a.year)-1,0) as Music,
  coalesce((select sum(Latin) from ds2 where id=a.id and year between a.year-3 and a.year)-1,0) as Latin
   from ds1 as a;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 30 Jun 2016 06:06:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/281344#M57039</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2016-06-30T06:06:44Z</dc:date>
    </item>
    <item>
      <title>Re: Summing up values for lagged years</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/281376#M57054</link>
      <description>&lt;P class="p1"&gt;&lt;STRONG&gt;You're right. You can't do an arithmetic expression on a character variable. &lt;/STRONG&gt;&lt;/P&gt;&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p1"&gt;&lt;STRONG&gt;In certain cases, like in a DATA step, SAS will recognise this. It will do automatic data conversion and write a comment to the log "Character values have been converted to numeric values at the places given by: (Line) : (Column)." &lt;/STRONG&gt;&lt;/P&gt;&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p1"&gt;&lt;STRONG&gt;Proc SQL doesn't do this automatic data conversion.&lt;/STRONG&gt;&lt;/P&gt;&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p1"&gt;&lt;STRONG&gt;See &lt;/STRONG&gt;&lt;A href="http://support.sas.com/kb/24/590.html" target="_blank"&gt;&lt;STRONG&gt;http://support.sas.com/kb/24/590.html&lt;/STRONG&gt;&lt;/A&gt;&lt;STRONG&gt; on using input function to convert character to numeric ( and vice-versa using the put function).&lt;/STRONG&gt;&lt;/P&gt;&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p1"&gt;&lt;STRONG&gt;You could make the change at an earlier step , or you can do it in the Proc SQL step as below. &lt;/STRONG&gt;&lt;/P&gt;&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p1"&gt;&lt;STRONG&gt;&lt;FONT face="courier new,courier"&gt;proc sql ;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P class="p1"&gt;&lt;STRONG&gt;&lt;FONT face="courier new,courier"&gt;create table ds3(drop=id2 year2) as&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P class="p1"&gt;&lt;STRONG&gt;&lt;FONT face="courier new,courier"&gt;select * from ds1 left join ds2 (rename=(year=year2 id=id2))&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P class="p1"&gt;&lt;STRONG&gt;&lt;FONT face="courier new,courier"&gt;on ds1.id=ds2.id2 and input(ds1.year,4.)-input(ds2.year2,4.) between 1 and 3;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P class="p1"&gt;&lt;STRONG&gt;&lt;FONT face="courier new,courier"&gt;quit;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 30 Jun 2016 08:40:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/281376#M57054</guid>
      <dc:creator>JohnHoughton</dc:creator>
      <dc:date>2016-06-30T08:40:27Z</dc:date>
    </item>
    <item>
      <title>Re: Summing up values for lagged years</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/289005#M59657</link>
      <description>&lt;P&gt;Hi thanks for your response. Suppose instead of Math, Science, Music and Latin I had a large number of other variables...then how would you alter the code...to have it in a way that I don't have to type each and every variable?&lt;/P&gt;</description>
      <pubDate>Tue, 02 Aug 2016 19:52:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/289005#M59657</guid>
      <dc:creator>aaou</dc:creator>
      <dc:date>2016-08-02T19:52:50Z</dc:date>
    </item>
    <item>
      <title>Re: Summing up values for lagged years</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/289087#M59689</link>
      <description>&lt;PRE&gt;
OK. you can make a macro variable to hold it or use call execute():

data ds1;
input year id;
cards;
2014 456
2014 678
2014 709
2015 346
2015 456
2015 567
2016 678
2016 709
2016 891
;
data ds2;
input id year Math Science Music Latin;
cards;
300 2011 56 32 54 45
456 2011 85 87 89 95
678 2011 76 87 56 76
456 2012 88 89 90 93
567 2012 50 54 56 57
456 2013 86 87 93 94
300 2013 13 34 54 35
567 2013 45 48 56 59
456 2014 85 87 88 95
200 2014 56 58 54 56
678 2014 70 76 75 78
567 2014 58 58 50 55
678 2015 74 76 78 70
300 2015 34 32 14 26
;
run;
proc transpose data=ds2(obs=0) out=temp(where=(upcase(_name_) not in ('ID' 'YEAR')));
 var _all_;
run;
data _null_;
 set temp end=last;
 if _n_=1 then call execute('proc sql;create table want as select *');
 call execute(cat(',coalesce((select sum(',_name_,') from ds2 where id=a.id and year between a.year-3 and a.year-1),0) as ',_name_));
 if last then call execute('from ds1 as a;quit;');
run;


&lt;/PRE&gt;</description>
      <pubDate>Wed, 03 Aug 2016 02:56:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Summing-up-values-for-lagged-years/m-p/289087#M59689</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2016-08-03T02:56:52Z</dc:date>
    </item>
  </channel>
</rss>

