<?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: First. and Last. Group by Processing Syntax in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/First-and-Last-Group-by-Processing-Syntax/m-p/230816#M41923</link>
    <description>&lt;P&gt;Try this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sort data= Campaigns_all; 
by type Campaign_Name week_of; 
run;

data test (keep=type Campaign_Name start_dc end_dc  first_week_rev last_week_rev );
retain first_week_rev last_week_rev;
set Campaigns_all;
by type Campaign_Name ;
if first.Campaign_Name then first_week_rev = Revenue;
if last.Campaign_Name then do;
   last_week_rev = Revenue;
   output ;
end;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;CatCol&lt;/P&gt;</description>
    <pubDate>Tue, 20 Oct 2015 19:51:58 GMT</pubDate>
    <dc:creator>CatCol</dc:creator>
    <dc:date>2015-10-20T19:51:58Z</dc:date>
    <item>
      <title>First. and Last. Group by Processing Syntax</title>
      <link>https://communities.sas.com/t5/SAS-Programming/First-and-Last-Group-by-Processing-Syntax/m-p/230812#M41920</link>
      <description>&lt;P&gt;Hi. &amp;nbsp;I’m having trouble geting&amp;nbsp;some group by processing syntax correct.&lt;/P&gt;
&lt;P&gt;I’m trying to calculate two variables one for &lt;STRONG&gt;first week revenue&lt;/STRONG&gt; and one for &lt;STRONG&gt;Last week revenue.&lt;/STRONG&gt; I'm not getting the correct looking output. &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is what I have for my program.&amp;nbsp;&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;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sort data= Campaigns_all; 
by type Campaign_Name week_of; 
run;

data test (keep=type Campaign_Name start_dc end_dc  first_week_rev last_week_rev );
set Campaigns_all;
by type Campaign_Name ;
if first.Campaign_Name then first_week_rev = Revenue;
if last.Campaign_Name then last_week_rev = Revenue;
output ;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;I start out with a data set &amp;nbsp;which looks like this.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="660"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="100"&gt;&lt;STRONG&gt;Type&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="102"&gt;&lt;STRONG&gt;campaign_name&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="66"&gt;&lt;STRONG&gt;start_dc&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="66"&gt;&lt;STRONG&gt;end_dc&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="66"&gt;&lt;STRONG&gt;week_of&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="68"&gt;&lt;STRONG&gt;Revenue&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="64"&gt;&lt;STRONG&gt;visits&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="64"&gt;&lt;STRONG&gt;Orders&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="64"&gt;&lt;STRONG&gt;Units&lt;/STRONG&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100"&gt;Desktop&lt;/TD&gt;
&lt;TD width="102"&gt;1 Piece&lt;/TD&gt;
&lt;TD width="66"&gt;15-Sep-15&lt;/TD&gt;
&lt;TD width="66"&gt;19-Oct-15&lt;/TD&gt;
&lt;TD width="66"&gt;6-Oct-15&lt;/TD&gt;
&lt;TD width="68"&gt;$5,461.38&lt;/TD&gt;
&lt;TD width="64"&gt;662&lt;/TD&gt;
&lt;TD width="64"&gt;33&lt;/TD&gt;
&lt;TD width="64"&gt;197&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100"&gt;Desktop&lt;/TD&gt;
&lt;TD width="102"&gt;1 Piece&amp;nbsp;&lt;/TD&gt;
&lt;TD width="66"&gt;15-Sep-15&lt;/TD&gt;
&lt;TD width="66"&gt;19-Oct-15&lt;/TD&gt;
&lt;TD width="66"&gt;13-Oct-15&lt;/TD&gt;
&lt;TD width="68"&gt;$3,712.08&lt;/TD&gt;
&lt;TD width="64"&gt;293&lt;/TD&gt;
&lt;TD width="64"&gt;10&lt;/TD&gt;
&lt;TD width="64"&gt;101&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100"&gt;Desktop&lt;/TD&gt;
&lt;TD width="102"&gt;&amp;nbsp;Get Dressed Up&lt;/TD&gt;
&lt;TD width="66"&gt;4-Aug-15&lt;/TD&gt;
&lt;TD width="66"&gt;19-Oct-15&lt;/TD&gt;
&lt;TD width="66"&gt;6-Oct-15&lt;/TD&gt;
&lt;TD width="68"&gt;$1,481.36&lt;/TD&gt;
&lt;TD width="64"&gt;346&lt;/TD&gt;
&lt;TD width="64"&gt;12&lt;/TD&gt;
&lt;TD width="64"&gt;44&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100"&gt;Desktop&lt;/TD&gt;
&lt;TD width="102"&gt;&amp;nbsp;Get Dressed Up&lt;/TD&gt;
&lt;TD width="66"&gt;4-Aug-15&lt;/TD&gt;
&lt;TD width="66"&gt;19-Oct-15&lt;/TD&gt;
&lt;TD width="66"&gt;13-Oct-15&lt;/TD&gt;
&lt;TD width="68"&gt;$1,898.78&lt;/TD&gt;
&lt;TD width="64"&gt;149&lt;/TD&gt;
&lt;TD width="64"&gt;15&lt;/TD&gt;
&lt;TD width="64"&gt;85&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;After I run my I get this. Notice the null values in &amp;nbsp;First. last&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="510"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="55"&gt;&lt;STRONG&gt;Type&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="130"&gt;&lt;STRONG&gt;campaign_name&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="66"&gt;&lt;STRONG&gt;start_dc&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="66"&gt;&lt;STRONG&gt;end_dc&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="98"&gt;&lt;STRONG&gt;first_week_rev&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="95"&gt;&lt;STRONG&gt;last_week_rev&lt;/STRONG&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="55"&gt;Desktop&lt;/TD&gt;
&lt;TD&gt;1 Piece&lt;/TD&gt;
&lt;TD width="66"&gt;15-Sep-15&lt;/TD&gt;
&lt;TD width="66"&gt;19-Oct-15&lt;/TD&gt;
&lt;TD width="98"&gt;5461.38&lt;/TD&gt;
&lt;TD width="95"&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="55"&gt;Desktop&lt;/TD&gt;
&lt;TD width="130"&gt;1 Piece&lt;/TD&gt;
&lt;TD width="66"&gt;15-Sep-15&lt;/TD&gt;
&lt;TD width="66"&gt;19-Oct-15&lt;/TD&gt;
&lt;TD width="98"&gt;.&lt;/TD&gt;
&lt;TD width="95"&gt;3712.08&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="55"&gt;Desktop&lt;/TD&gt;
&lt;TD width="130"&gt;Get Dressed Up&lt;/TD&gt;
&lt;TD width="66"&gt;4-Aug-15&lt;/TD&gt;
&lt;TD width="66"&gt;19-Oct-15&lt;/TD&gt;
&lt;TD width="98"&gt;1481.36&lt;/TD&gt;
&lt;TD width="95"&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="55"&gt;Desktop&lt;/TD&gt;
&lt;TD width="130"&gt;&amp;nbsp;Get Dressed Up&lt;/TD&gt;
&lt;TD width="66"&gt;4-Aug-15&lt;/TD&gt;
&lt;TD width="66"&gt;19-Oct-15&lt;/TD&gt;
&lt;TD width="98"&gt;.&lt;/TD&gt;
&lt;TD width="95"&gt;1898.78&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;What I want one row for each campain.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="510"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="55"&gt;&lt;STRONG&gt;Type&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="130"&gt;&lt;STRONG&gt;campaign_name&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="66"&gt;&lt;STRONG&gt;start_dc&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="66"&gt;&lt;STRONG&gt;end_dc&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="98"&gt;&lt;STRONG&gt;first_week_rev&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="95"&gt;&lt;STRONG&gt;last_week_rev&lt;/STRONG&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="55"&gt;Desktop&lt;/TD&gt;
&lt;TD&gt;1 Piece&lt;/TD&gt;
&lt;TD width="66"&gt;15-Sep-15&lt;/TD&gt;
&lt;TD width="66"&gt;19-Oct-15&lt;/TD&gt;
&lt;TD width="98"&gt;5461.38&lt;/TD&gt;
&lt;TD width="95"&gt;3712.08&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="55"&gt;Desktop&lt;/TD&gt;
&lt;TD width="130"&gt;Get Dressed Up&lt;/TD&gt;
&lt;TD width="66"&gt;4-Aug-15&lt;/TD&gt;
&lt;TD width="66"&gt;19-Oct-15&lt;/TD&gt;
&lt;TD width="98"&gt;1481.36&lt;/TD&gt;
&lt;TD width="95"&gt;1898.78&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;</description>
      <pubDate>Tue, 20 Oct 2015 19:41:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/First-and-Last-Group-by-Processing-Syntax/m-p/230812#M41920</guid>
      <dc:creator>cara_catus</dc:creator>
      <dc:date>2015-10-20T19:41:50Z</dc:date>
    </item>
    <item>
      <title>Re: First. and Last. Group by Processing Syntax</title>
      <link>https://communities.sas.com/t5/SAS-Programming/First-and-Last-Group-by-Processing-Syntax/m-p/230815#M41922</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can get the results using PROC SQL or PROC SUMMARY (and probably other procedures as well)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc summary nway data=whatever;
    var first_week_rev last_week_rev;
    class type campaign_name start_dc end_dc;
    output out=_final_ sum=;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 20 Oct 2015 19:48:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/First-and-Last-Group-by-Processing-Syntax/m-p/230815#M41922</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2015-10-20T19:48:57Z</dc:date>
    </item>
    <item>
      <title>Re: First. and Last. Group by Processing Syntax</title>
      <link>https://communities.sas.com/t5/SAS-Programming/First-and-Last-Group-by-Processing-Syntax/m-p/230816#M41923</link>
      <description>&lt;P&gt;Try this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sort data= Campaigns_all; 
by type Campaign_Name week_of; 
run;

data test (keep=type Campaign_Name start_dc end_dc  first_week_rev last_week_rev );
retain first_week_rev last_week_rev;
set Campaigns_all;
by type Campaign_Name ;
if first.Campaign_Name then first_week_rev = Revenue;
if last.Campaign_Name then do;
   last_week_rev = Revenue;
   output ;
end;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;CatCol&lt;/P&gt;</description>
      <pubDate>Tue, 20 Oct 2015 19:51:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/First-and-Last-Group-by-Processing-Syntax/m-p/230816#M41923</guid>
      <dc:creator>CatCol</dc:creator>
      <dc:date>2015-10-20T19:51:58Z</dc:date>
    </item>
    <item>
      <title>Re: First. and Last. Group by Processing Syntax</title>
      <link>https://communities.sas.com/t5/SAS-Programming/First-and-Last-Group-by-Processing-Syntax/m-p/230821#M41925</link>
      <description>&lt;P&gt;You'll want to retain the value of first_week_rev throughout each by group. You'll also only want to output when at the end of the Campaign_Name by group. Something like below.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;data test (keep=type Campaign_Name start_dc end_dc  first_week_rev last_week_rev );
set Campaigns_all;
by type Campaign_Name ;
retain first_week_rev;
if first.Campaign_Name then first_week_rev = Revenue;
if last.Campaign_Name then do;
  last_week_rev = Revenue;
  output;
end;
run;&lt;/PRE&gt;
&lt;P&gt;Similarly, you could dynamically create the start_dc and end_dc columns in this same data step (assuming the week_of variable determines those values)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;data test (keep=type Campaign_Name start_dc end_dc  first_week_rev last_week_rev );
set Campaigns_all(drop=start_dc end_dc);
by type Campaign_Name ;
retain first_week_rev start_dc;
if first.Campaign_Name then do;
  first_week_rev = Revenue;
  start_dc = week_of
end;
if last.Campaign_Name then do;
  last_week_rev = Revenue;
  end_dc = week_of
  output;
end;
format start_dc end_dc mmddyyd&lt;STRONG&gt;8&lt;/STRONG&gt;.;
run;&lt;/PRE&gt;</description>
      <pubDate>Tue, 20 Oct 2015 20:26:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/First-and-Last-Group-by-Processing-Syntax/m-p/230821#M41925</guid>
      <dc:creator>JoshB</dc:creator>
      <dc:date>2015-10-20T20:26:15Z</dc:date>
    </item>
  </channel>
</rss>

