<?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: Help with a proc sql process in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/Help-with-a-proc-sql-process/m-p/181797#M46307</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You probably need to pre.process your data, to find the latest 3 returns.This could include order your data by month, counting observations (months) and select max 3 observations. Then go to the SQL summary step.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 01 Sep 2014 09:48:27 GMT</pubDate>
    <dc:creator>LinusH</dc:creator>
    <dc:date>2014-09-01T09:48:27Z</dc:date>
    <item>
      <title>Help with a proc sql process</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Help-with-a-proc-sql-process/m-p/181795#M46305</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I have a data set "have". In the data set, there are three variables, permno(firm), mon(month) and ret(return). What I want to calculate is that for each firm each month, I would like to calculate a new variable (sumret3), which is the sum of the past three returns. I wrote the following codes.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;&amp;nbsp; create table want as&lt;/P&gt;&lt;P&gt;&amp;nbsp; select distinct a.*, sum(b.ret) as sumret3&lt;/P&gt;&lt;P&gt;&amp;nbsp; from have as a left join have as b&lt;/P&gt;&lt;P&gt;&amp;nbsp; on a.permno=b.permno and (a.mon-3&amp;lt;=b.mon&amp;lt;a.mon)&lt;/P&gt;&lt;P&gt;&amp;nbsp; group by a.permno, a.mon;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /*having count(*) =3;*/&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Now the problem I have is that for each firm, some months may not have full three months' returns. Using the code above will give a new value for sumret3 even there is only one past return (Now the sum will be only one value). If there is only two previous returns for that permno, it will give the sum of two returns. I only want to get values for sumret3 if there are three previous returns present. If less than three returns, then give sumret3 a missing value.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I used a contraint&amp;nbsp; /*having count(*) =3;*/. This works, but this will give less observations. For example, the final data set "want" should have 1 million observations. Without using the contraint, "want" has 1 million observations. With the constraint, "want" only has 600,000 observations. I believe this is due to using distinct option in the third line, which will only keep the first observation with missing data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;How to deal with this problem? Also, is there any other efficient methods to implement my idea?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 01 Sep 2014 09:32:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Help-with-a-proc-sql-process/m-p/181795#M46305</guid>
      <dc:creator>SeanZ</dc:creator>
      <dc:date>2014-09-01T09:32:47Z</dc:date>
    </item>
    <item>
      <title>Re: Help with a proc sql process</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Help-with-a-proc-sql-process/m-p/181796#M46306</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Can you not just left join the data per above back to the original data to get full observations?&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;&amp;nbsp; create table want as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ORIGINAL_DATA.*,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ADD_DATA.*&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INITIAL_DATA ORGINAL DATA&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; left join&amp;nbsp;&amp;nbsp;&amp;nbsp; (select distinct a.*, sum(b.ret) as sumret3&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from have as a left join have as b&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; on a.permno=b.permno and (a.mon-3&amp;lt;=b.mon&amp;lt;a.mon)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; group by a.permno, a.mon;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; having count(*) =3)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; on&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It may not be the best way to do it though.&amp;nbsp; You could also try 3 left joins to the main table:&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create table WANT as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BASE.PERMNO,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BASE.MON,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A.RET + B.RET + C.RET as SUMRET&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ORIGINAL_DATA BASE&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; left join&amp;nbsp;&amp;nbsp; ORIGINAL_DATA A&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; on&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BASE.PERMNO=A.PERMNO&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A.MON=BASE.MON-1&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; left join&amp;nbsp;&amp;nbsp; ORIGINAL_DATA B&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; on&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BASE.PERMNO=A.PERMNO &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A.MON=BASE.MON-2&lt;/P&gt;&lt;P&gt;...&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Or maybe even datastep:&lt;/P&gt;&lt;P&gt;proc transpose data=original_data out=inter prefix=mon;&lt;/P&gt;&lt;P&gt;&amp;nbsp; by permno;&lt;/P&gt;&lt;P&gt;&amp;nbsp; var ret;&lt;/P&gt;&lt;P&gt;&amp;nbsp; id mon;&amp;nbsp;&amp;nbsp; /* Assuming month is numeric */&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;&amp;nbsp; select&amp;nbsp; count(*)-1&lt;/P&gt;&lt;P&gt;&amp;nbsp; into&amp;nbsp;&amp;nbsp;&amp;nbsp; :NUM_OBS&lt;/P&gt;&lt;P&gt;&amp;nbsp; from&amp;nbsp;&amp;nbsp;&amp;nbsp; SASHELP.VCOLUMNS&lt;/P&gt;&lt;P&gt;&amp;nbsp; where&amp;nbsp;&amp;nbsp; LIBNAME="WORK" &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; and&amp;nbsp;&amp;nbsp; MEMNAME="INTER";&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set inter;&lt;/P&gt;&lt;P&gt;&amp;nbsp; array mon{&amp;amp;NUM_OBS.};&lt;/P&gt;&lt;P&gt;&amp;nbsp; array sumrets{&amp;amp;NUM_OBS.-2};&lt;/P&gt;&lt;P&gt;&amp;nbsp; do i=3 to &amp;amp;NUM_OBS.;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sumrets{i-}=sum(mon{i-2},mon{i-1},mon{i});&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Many ways to approach the problem, just a matter of testing them and seeing which is quicker/fits into your coding easier.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 01 Sep 2014 09:46:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Help-with-a-proc-sql-process/m-p/181796#M46306</guid>
      <dc:creator>RW9</dc:creator>
      <dc:date>2014-09-01T09:46:15Z</dc:date>
    </item>
    <item>
      <title>Re: Help with a proc sql process</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Help-with-a-proc-sql-process/m-p/181797#M46307</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You probably need to pre.process your data, to find the latest 3 returns.This could include order your data by month, counting observations (months) and select max 3 observations. Then go to the SQL summary step.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 01 Sep 2014 09:48:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Help-with-a-proc-sql-process/m-p/181797#M46307</guid>
      <dc:creator>LinusH</dc:creator>
      <dc:date>2014-09-01T09:48:27Z</dc:date>
    </item>
    <item>
      <title>Re: Help with a proc sql process</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Help-with-a-proc-sql-process/m-p/181798#M46308</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Review what you want to show with those figures.&lt;/P&gt;&lt;P&gt;Absolute returns on quarterly results? Then what you have noticed is a remark for information consumers.&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;A relative performance comparable to others?&amp;nbsp; Use a mean. Decide on complete/incomplete month's quarters as a note.&lt;BR /&gt;A relative growth evolving in time to overall results. impute the overall mean as missing. You can manipulate the figures and pictures to achieve things as being liked by the targeted goals.&lt;BR /&gt;&amp;nbsp; &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 01 Sep 2014 11:34:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Help-with-a-proc-sql-process/m-p/181798#M46308</guid>
      <dc:creator>jakarman</dc:creator>
      <dc:date>2014-09-01T11:34:08Z</dc:date>
    </item>
    <item>
      <title>Re: Help with a proc sql process</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Help-with-a-proc-sql-process/m-p/181799#M46309</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You'd better post some sample data . No data to test.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;proc sql;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp; create table want as&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; select distinct a.*,(select&amp;nbsp; sum(ret) from have where&amp;nbsp; &lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;a.permno=permno and (a.mon-3&amp;lt;=mon&amp;lt;a.mon)&lt;/SPAN&gt; ) as sumret3&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt; from have as a&amp;nbsp; ;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;quit;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;Xia Keshan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 01 Sep 2014 12:02:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Help-with-a-proc-sql-process/m-p/181799#M46309</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2014-09-01T12:02:33Z</dc:date>
    </item>
    <item>
      <title>Re: Help with a proc sql process</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Help-with-a-proc-sql-process/m-p/181800#M46310</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for the help. Here is some data&lt;/P&gt;&lt;P&gt;permno&amp;nbsp;&amp;nbsp; date&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mon&lt;/P&gt;&lt;TABLE cellpadding="5" cellspacing="0" class="table" frame="box" rules="all" summary="Procedure Print: Data Set WORK.MSF2"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD class="r data"&gt;15560&lt;/TD&gt;&lt;TD class="r data"&gt;19251231&lt;/TD&gt;&lt;TD class="r data"&gt;.&lt;/TD&gt;&lt;TD class="r data"&gt;23112&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;15560&lt;/TD&gt;&lt;TD class="r data"&gt;19260130&lt;/TD&gt;&lt;TD class="r data" nowrap="nowrap"&gt;-0.009009&lt;/TD&gt;&lt;TD class="r data"&gt;23113&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;15560&lt;/TD&gt;&lt;TD class="r data"&gt;19260227&lt;/TD&gt;&lt;TD class="r data" nowrap="nowrap"&gt;-0.054545&lt;/TD&gt;&lt;TD class="r data"&gt;23114&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;15560&lt;/TD&gt;&lt;TD class="r data"&gt;19260331&lt;/TD&gt;&lt;TD class="r data" nowrap="nowrap"&gt;-0.298077&lt;/TD&gt;&lt;TD class="r data"&gt;23115&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;15560&lt;/TD&gt;&lt;TD class="r data"&gt;19260430&lt;/TD&gt;&lt;TD class="r data"&gt;0.068493&lt;/TD&gt;&lt;TD class="r data"&gt;23116&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;15560&lt;/TD&gt;&lt;TD class="r data"&gt;19260528&lt;/TD&gt;&lt;TD class="r data"&gt;0.000000&lt;/TD&gt;&lt;TD class="r data"&gt;23117&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;15560&lt;/TD&gt;&lt;TD class="r data"&gt;19260630&lt;/TD&gt;&lt;TD class="r data" nowrap="nowrap"&gt;-0.089744&lt;/TD&gt;&lt;TD class="r data"&gt;23118&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;15560&lt;/TD&gt;&lt;TD class="r data"&gt;19260731&lt;/TD&gt;&lt;TD class="r data" nowrap="nowrap"&gt;-0.070423&lt;/TD&gt;&lt;TD class="r data"&gt;23119&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;15560&lt;/TD&gt;&lt;TD class="r data"&gt;19260831&lt;/TD&gt;&lt;TD class="r data"&gt;0.075758&lt;/TD&gt;&lt;TD class="r data"&gt;23120&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;15560&lt;/TD&gt;&lt;TD class="r data"&gt;19260930&lt;/TD&gt;&lt;TD class="r data" nowrap="nowrap"&gt;-0.070423&lt;/TD&gt;&lt;TD class="r data"&gt;23121&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;15560&lt;/TD&gt;&lt;TD class="r data"&gt;19261030&lt;/TD&gt;&lt;TD class="r data" nowrap="nowrap"&gt;-0.075758&lt;/TD&gt;&lt;TD class="r data"&gt;23122&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;15560&lt;/TD&gt;&lt;TD class="r data"&gt;19261130&lt;/TD&gt;&lt;TD class="r data"&gt;0.114754&lt;/TD&gt;&lt;TD class="r data"&gt;23123&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;15560&lt;/TD&gt;&lt;TD class="r data"&gt;19261231&lt;/TD&gt;&lt;TD class="r data"&gt;0.000000&lt;/TD&gt;&lt;TD class="r data"&gt;23124&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;15560&lt;/TD&gt;&lt;TD class="r data"&gt;19270131&lt;/TD&gt;&lt;TD class="r data"&gt;0.058824&lt;/TD&gt;&lt;TD class="r data"&gt;23125&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;15560&lt;/TD&gt;&lt;TD class="r data"&gt;19270228&lt;/TD&gt;&lt;TD class="r data" nowrap="nowrap"&gt;-0.027778&lt;/TD&gt;&lt;TD class="r data"&gt;23126&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;15560&lt;/TD&gt;&lt;TD class="r data"&gt;19270331&lt;/TD&gt;&lt;TD class="r data"&gt;0.014286&lt;/TD&gt;&lt;TD class="r data"&gt;23127&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;15560&lt;/TD&gt;&lt;TD class="r data"&gt;19270430&lt;/TD&gt;&lt;TD class="r data" nowrap="nowrap"&gt;-0.140845&lt;/TD&gt;&lt;TD class="r data"&gt;23128&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;15560&lt;/TD&gt;&lt;TD class="r data"&gt;19270531&lt;/TD&gt;&lt;TD class="r data"&gt;0.295082&lt;/TD&gt;&lt;TD class="r data"&gt;23129&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;15560&lt;/TD&gt;&lt;TD class="r data"&gt;19270630&lt;/TD&gt;&lt;TD class="r data" nowrap="nowrap"&gt;-0.012658&lt;/TD&gt;&lt;TD class="r data"&gt;23130&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;15560&lt;/TD&gt;&lt;TD class="r data"&gt;19270730&lt;/TD&gt;&lt;TD class="r data" nowrap="nowrap"&gt;-0.025641&lt;/TD&gt;&lt;TD class="r data"&gt;23131&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;I only use 20 observations for one firm(permno) as an example. Here I standardized mon as a number, it will not affect the use of it. Since I want to calculate the sum of ret ONLY IF three observations are available, sum(ret) should have values start from the 4th column. You code didn't show the desired results. Moreover, I am not sure why your code took incredibly long time to execute. Thanks for the help.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 10 Sep 2014 10:33:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Help-with-a-proc-sql-process/m-p/181800#M46310</guid>
      <dc:creator>SeanZ</dc:creator>
      <dc:date>2014-09-10T10:33:35Z</dc:date>
    </item>
    <item>
      <title>Re: Help with a proc sql process</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Help-with-a-proc-sql-process/m-p/181801#M46311</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;"&lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt; I am not sure why your code took incredibly long time to execute.&lt;/SPAN&gt;"&lt;/P&gt;&lt;P&gt;That is because I am using sub-query of SQL.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;OK. Since you posted some data to make the question more clear.&lt;/P&gt;&lt;P&gt;Assuming these month are consecutive . i.e. no missing month between two row .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;data have;
input permno&amp;nbsp;&amp;nbsp; date&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mon&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;
cards;
15560&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;19251231&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23112
15560&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;19260130&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-0.009009&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23113
15560&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;19260227&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-0.054545&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23114
15560&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;19260331&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-0.298077&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23115
15560&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;19260430&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0.068493&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23116
15560&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;19260528&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0.000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23117
15560&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;19260630&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-0.089744&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23118
15560&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;19260731&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-0.070423&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23119
15560&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;19260831&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0.075758&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23120
15560&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;19260930&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-0.070423&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23121
15560&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;19261030&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-0.075758&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23122
15560&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;19261130&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0.114754&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23123
15560&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;19261231&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0.000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23124
15560&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;19270131&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0.058824&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23125
15560&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;19270228&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-0.027778&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23126
15560&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;19270331&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0.014286&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23127
15560&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;19270430&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-0.140845&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23128
15560&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;19270531&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0.295082&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23129
15560&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;19270630&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-0.012658&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23130
15560&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;19270730&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-0.025641&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23131
15561&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;19270430&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-0.140845&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23128
15561&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;19270531&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0.295082&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23129
15561&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;19270630&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-0.012658&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23130
15561&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;19270730&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-0.025641&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;23131
;
run;
proc sort data=have ;by&amp;nbsp; permno mon;run;
data want; 
 set have;
 by permno;
 if first.permno then n=0;
 n+1;
 sumret3=sum(lag(ret),lag2(ret),lag3(ret));
 if n lt 4 then&amp;nbsp; sumret3=.;
run;



&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Xia Keshan&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Message was edited by: xia keshan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 10 Sep 2014 12:22:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Help-with-a-proc-sql-process/m-p/181801#M46311</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2014-09-10T12:22:07Z</dc:date>
    </item>
  </channel>
</rss>

