<?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: Adding zero catches when calculating Catch per unit of effort in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Adding-zero-catches-when-calculating-Catch-per-unit-of-effort/m-p/670831#M201419</link>
    <description>&lt;P&gt;You could expand your data to include zero catches this way:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input BarcodeID $ Date :mmddyy. Minutes Species :$20. Length;
format date yymmdd10.;
datalines;  
A1234             5/15/2020         15.00          Walleye        180
A1234             5/15/2020         15.00          Walleye        350
A1234             5/15/2020         15.00          Sauger         175
B1234             5/15/2020         15.00          Walleye        400
B1234             5/15/2020         15.00          Walleye        500
C1234             5/15/2020         15.00          NoFish           .   
;

proc sql;
select 
    a.barCodeId,
    a.date,
    a.minutes,
    b.Species,
    c.length,
    not missing(c.length) as number
from 
    (select unique barcodeId, date, minutes from have) as a cross join
    (select unique species from have where species ne "NoFish") as b left join
    have as c on a.barcodeId=c.barcodeId and b.species=c.species
order by barcodeId, date, species, length;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;TABLE border="1" width="99.9137187230371%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH class="b header" scope="col" width="18.2916307161346%"&gt;BarcodeID&lt;/TH&gt;
&lt;TH class="r b header" scope="col" width="24.67644521138913%"&gt;Date&lt;/TH&gt;
&lt;TH class="r b header" scope="col" width="13.546160483175152%"&gt;Minutes&lt;/TH&gt;
&lt;TH class="b header" scope="col" width="17.860224331320104%"&gt;Species&lt;/TH&gt;
&lt;TH class="r b header" scope="col" width="11.993097497842967%"&gt;Length&lt;/TH&gt;
&lt;TH class="r b header" scope="col" width="13.546160483175152%"&gt;number&lt;/TH&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="18.2916307161346%" class="data"&gt;A1234&lt;/TD&gt;
&lt;TD width="24.67644521138913%" class="r data"&gt;2020-05-15&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;15&lt;/TD&gt;
&lt;TD width="17.860224331320104%" class="data"&gt;Sauger&lt;/TD&gt;
&lt;TD width="11.993097497842967%" class="r data"&gt;175&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="18.2916307161346%" class="data"&gt;A1234&lt;/TD&gt;
&lt;TD width="24.67644521138913%" class="r data"&gt;2020-05-15&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;15&lt;/TD&gt;
&lt;TD width="17.860224331320104%" class="data"&gt;Walleye&lt;/TD&gt;
&lt;TD width="11.993097497842967%" class="r data"&gt;180&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="18.2916307161346%" class="data"&gt;A1234&lt;/TD&gt;
&lt;TD width="24.67644521138913%" class="r data"&gt;2020-05-15&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;15&lt;/TD&gt;
&lt;TD width="17.860224331320104%" class="data"&gt;Walleye&lt;/TD&gt;
&lt;TD width="11.993097497842967%" class="r data"&gt;350&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="18.2916307161346%" class="data"&gt;B1234&lt;/TD&gt;
&lt;TD width="24.67644521138913%" class="r data"&gt;2020-05-15&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;15&lt;/TD&gt;
&lt;TD width="17.860224331320104%" class="data"&gt;Sauger&lt;/TD&gt;
&lt;TD width="11.993097497842967%" class="r data"&gt;.&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="18.2916307161346%" class="data"&gt;B1234&lt;/TD&gt;
&lt;TD width="24.67644521138913%" class="r data"&gt;2020-05-15&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;15&lt;/TD&gt;
&lt;TD width="17.860224331320104%" class="data"&gt;Walleye&lt;/TD&gt;
&lt;TD width="11.993097497842967%" class="r data"&gt;400&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="18.2916307161346%" class="data"&gt;B1234&lt;/TD&gt;
&lt;TD width="24.67644521138913%" class="r data"&gt;2020-05-15&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;15&lt;/TD&gt;
&lt;TD width="17.860224331320104%" class="data"&gt;Walleye&lt;/TD&gt;
&lt;TD width="11.993097497842967%" class="r data"&gt;500&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="18.2916307161346%" class="data"&gt;C1234&lt;/TD&gt;
&lt;TD width="24.67644521138913%" class="r data"&gt;2020-05-15&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;15&lt;/TD&gt;
&lt;TD width="17.860224331320104%" class="data"&gt;Sauger&lt;/TD&gt;
&lt;TD width="11.993097497842967%" class="r data"&gt;.&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="18.2916307161346%" class="data"&gt;C1234&lt;/TD&gt;
&lt;TD width="24.67644521138913%" class="r data"&gt;2020-05-15&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;15&lt;/TD&gt;
&lt;TD width="17.860224331320104%" class="data"&gt;Walleye&lt;/TD&gt;
&lt;TD width="11.993097497842967%" class="r data"&gt;.&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;</description>
    <pubDate>Mon, 20 Jul 2020 22:35:16 GMT</pubDate>
    <dc:creator>PGStats</dc:creator>
    <dc:date>2020-07-20T22:35:16Z</dc:date>
    <item>
      <title>Adding zero catches when calculating Catch per unit of effort</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Adding-zero-catches-when-calculating-Catch-per-unit-of-effort/m-p/670739#M201391</link>
      <description>&lt;P&gt;I am a fisheries biologist and am new to programming and SAS but would like to become more proficient at this.&amp;nbsp; One analysis that we use often is Catch Per Unit of Effort (CPUE) for each species for numerous different efforts (time).&amp;nbsp; I am having trouble figuring out how to add zero catches.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;As you can see it is pretty simple calculation CPUE= # fish caught in each species / minutes.&lt;/P&gt;&lt;P&gt;However, as you can see below in effort(barcodeID) A1234 a sauger was caught, but in B1234 and C1234 one was not caught.&amp;nbsp; So when we calculate a mean CPUE of all the runs together the zero catches need to be included into the analysis. I need some help with developing code to include a catch of zero for each effort(barcodeID) and species when it is not present in the data.&amp;nbsp; I would also like to calculate CPUE based on different sized fish as well.&amp;nbsp; So CPUE of Walleye and Sauger &amp;lt;200 and CPUE of Walleye and Sauger &amp;gt;200.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Hopefully that is clear enough.&lt;/P&gt;&lt;P&gt;Thanks in advance!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here is how my data is set up:&lt;/P&gt;&lt;P&gt;BarcodeID&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Date&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Minutes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Species&amp;nbsp; &amp;nbsp; &amp;nbsp; Length&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;A1234&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5/15/2020&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;15.00&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Walleye&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 180&lt;/P&gt;&lt;P&gt;A1234&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5/15/2020&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;15.00&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;Walleye&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 350&lt;/P&gt;&lt;P&gt;A1234&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5/15/2020&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;15.00&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sauger&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;175&lt;/P&gt;&lt;P&gt;B1234&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5/15/2020&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;15.00&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;Walleye&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 400&lt;/P&gt;&lt;P&gt;B1234&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5/15/2020&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;15.00&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;Walleye&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 500&lt;/P&gt;&lt;P&gt;C1234&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5/15/2020&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;15.00&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; NoFish&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 20 Jul 2020 18:09:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Adding-zero-catches-when-calculating-Catch-per-unit-of-effort/m-p/670739#M201391</guid>
      <dc:creator>ryanhupfeld</dc:creator>
      <dc:date>2020-07-20T18:09:11Z</dc:date>
    </item>
    <item>
      <title>Re: Adding zero catches when calculating Catch per unit of effort</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Adding-zero-catches-when-calculating-Catch-per-unit-of-effort/m-p/670831#M201419</link>
      <description>&lt;P&gt;You could expand your data to include zero catches this way:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input BarcodeID $ Date :mmddyy. Minutes Species :$20. Length;
format date yymmdd10.;
datalines;  
A1234             5/15/2020         15.00          Walleye        180
A1234             5/15/2020         15.00          Walleye        350
A1234             5/15/2020         15.00          Sauger         175
B1234             5/15/2020         15.00          Walleye        400
B1234             5/15/2020         15.00          Walleye        500
C1234             5/15/2020         15.00          NoFish           .   
;

proc sql;
select 
    a.barCodeId,
    a.date,
    a.minutes,
    b.Species,
    c.length,
    not missing(c.length) as number
from 
    (select unique barcodeId, date, minutes from have) as a cross join
    (select unique species from have where species ne "NoFish") as b left join
    have as c on a.barcodeId=c.barcodeId and b.species=c.species
order by barcodeId, date, species, length;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;TABLE border="1" width="99.9137187230371%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH class="b header" scope="col" width="18.2916307161346%"&gt;BarcodeID&lt;/TH&gt;
&lt;TH class="r b header" scope="col" width="24.67644521138913%"&gt;Date&lt;/TH&gt;
&lt;TH class="r b header" scope="col" width="13.546160483175152%"&gt;Minutes&lt;/TH&gt;
&lt;TH class="b header" scope="col" width="17.860224331320104%"&gt;Species&lt;/TH&gt;
&lt;TH class="r b header" scope="col" width="11.993097497842967%"&gt;Length&lt;/TH&gt;
&lt;TH class="r b header" scope="col" width="13.546160483175152%"&gt;number&lt;/TH&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="18.2916307161346%" class="data"&gt;A1234&lt;/TD&gt;
&lt;TD width="24.67644521138913%" class="r data"&gt;2020-05-15&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;15&lt;/TD&gt;
&lt;TD width="17.860224331320104%" class="data"&gt;Sauger&lt;/TD&gt;
&lt;TD width="11.993097497842967%" class="r data"&gt;175&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="18.2916307161346%" class="data"&gt;A1234&lt;/TD&gt;
&lt;TD width="24.67644521138913%" class="r data"&gt;2020-05-15&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;15&lt;/TD&gt;
&lt;TD width="17.860224331320104%" class="data"&gt;Walleye&lt;/TD&gt;
&lt;TD width="11.993097497842967%" class="r data"&gt;180&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="18.2916307161346%" class="data"&gt;A1234&lt;/TD&gt;
&lt;TD width="24.67644521138913%" class="r data"&gt;2020-05-15&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;15&lt;/TD&gt;
&lt;TD width="17.860224331320104%" class="data"&gt;Walleye&lt;/TD&gt;
&lt;TD width="11.993097497842967%" class="r data"&gt;350&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="18.2916307161346%" class="data"&gt;B1234&lt;/TD&gt;
&lt;TD width="24.67644521138913%" class="r data"&gt;2020-05-15&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;15&lt;/TD&gt;
&lt;TD width="17.860224331320104%" class="data"&gt;Sauger&lt;/TD&gt;
&lt;TD width="11.993097497842967%" class="r data"&gt;.&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="18.2916307161346%" class="data"&gt;B1234&lt;/TD&gt;
&lt;TD width="24.67644521138913%" class="r data"&gt;2020-05-15&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;15&lt;/TD&gt;
&lt;TD width="17.860224331320104%" class="data"&gt;Walleye&lt;/TD&gt;
&lt;TD width="11.993097497842967%" class="r data"&gt;400&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="18.2916307161346%" class="data"&gt;B1234&lt;/TD&gt;
&lt;TD width="24.67644521138913%" class="r data"&gt;2020-05-15&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;15&lt;/TD&gt;
&lt;TD width="17.860224331320104%" class="data"&gt;Walleye&lt;/TD&gt;
&lt;TD width="11.993097497842967%" class="r data"&gt;500&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="18.2916307161346%" class="data"&gt;C1234&lt;/TD&gt;
&lt;TD width="24.67644521138913%" class="r data"&gt;2020-05-15&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;15&lt;/TD&gt;
&lt;TD width="17.860224331320104%" class="data"&gt;Sauger&lt;/TD&gt;
&lt;TD width="11.993097497842967%" class="r data"&gt;.&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="18.2916307161346%" class="data"&gt;C1234&lt;/TD&gt;
&lt;TD width="24.67644521138913%" class="r data"&gt;2020-05-15&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;15&lt;/TD&gt;
&lt;TD width="17.860224331320104%" class="data"&gt;Walleye&lt;/TD&gt;
&lt;TD width="11.993097497842967%" class="r data"&gt;.&lt;/TD&gt;
&lt;TD width="13.546160483175152%" class="r data"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;</description>
      <pubDate>Mon, 20 Jul 2020 22:35:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Adding-zero-catches-when-calculating-Catch-per-unit-of-effort/m-p/670831#M201419</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2020-07-20T22:35:16Z</dc:date>
    </item>
    <item>
      <title>Re: Adding zero catches when calculating Catch per unit of effort</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Adding-zero-catches-when-calculating-Catch-per-unit-of-effort/m-p/670863#M201426</link>
      <description>&lt;P&gt;If the data are sorted by barcodeid, then this data step will also work:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  input BarcodeID :$5.   Date :mmddyy10.  Minutes Species :$7.   Length  ;
datalines;
A1234             5/15/2020         15.00          Walleye        180
A1234             5/15/2020         15.00          Walleye        350
A1234             5/15/2020         15.00          Sauger         175
B1234             5/15/2020         15.00          Walleye        400
B1234             5/15/2020         15.00          Walleye        500
C1234             5/15/2020         15.00          NoFish           .
run;

data want (drop=_:);
  array species_array {2} $7 _temporary_ ("Walleye", "Sauger");
  _species_list=catx(' ',of species_array{*});

  /* Read and output catches, and pare down _species_list accordingly*/
  do until (last.barcodeid);
    set have;
    by barcodeid;
    _species_list=left(tranwrd(_species_list,trim(species),' '));
	count=1;
    if species^='NoFish' then output;
  end;

  /* At end of barcodeid, use _species_list to output needed dummy records */
  count=0;
  do while (_species_list^=' ');
    length=.;
	species=scan(_species_list,1,' ');
	output;
	_species_list=left(tranwrd(_species_list,trim(species),' '));
  end;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 21 Jul 2020 03:28:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Adding-zero-catches-when-calculating-Catch-per-unit-of-effort/m-p/670863#M201426</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2020-07-21T03:28:53Z</dc:date>
    </item>
  </channel>
</rss>

