<?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: countif till present row calculation in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/countif-till-present-row-calculation/m-p/316845#M313237</link>
    <description>&lt;P&gt;Usually, SAS would use separate counters for each STATUS.&amp;nbsp; Matching to your example:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;CountX&amp;nbsp;&amp;nbsp; CountY&lt;/P&gt;
&lt;P&gt;0&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; 1&lt;/P&gt;
&lt;P&gt;0&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; 2&lt;/P&gt;
&lt;P&gt;0&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; 3&lt;/P&gt;
&lt;P&gt;1&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; 3&lt;/P&gt;
&lt;P&gt;1&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; 4&lt;/P&gt;
&lt;P&gt;2&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; 4&lt;/P&gt;
&lt;P&gt;2&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; 5&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You could construct COUNTIF at the same time, but it's much easier to talk about if you were to give a SAS example instead of an Excel example.&lt;/P&gt;</description>
    <pubDate>Mon, 05 Dec 2016 20:48:53 GMT</pubDate>
    <dc:creator>Astounding</dc:creator>
    <dc:date>2016-12-05T20:48:53Z</dc:date>
    <item>
      <title>countif till present row calculation</title>
      <link>https://communities.sas.com/t5/SAS-Programming/countif-till-present-row-calculation/m-p/316820#M313235</link>
      <description>&lt;P&gt;Hi everyone,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I wanted to know whether there is a simple way to calculate the count of occurance of a particular value in a particular field from row 1 till the row getting processed? &amp;nbsp;Following is an example of what I need:&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Status&lt;/TD&gt;&lt;TD&gt;Countif&lt;/TD&gt;&lt;TD&gt;Formula&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;=COUNTIF($A$2:$A2,A2)&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;=COUNTIF($A$2:$A3,A3)&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;=COUNTIF($A$2:$A4,A4)&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;X&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;=COUNTIF($A$2:$A5,A5)&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;=COUNTIF($A$2:$A6,A6)&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;X&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;=COUNTIF($A$2:$A7,A7)&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;=COUNTIF($A$2:$A8,A8)&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Mon, 05 Dec 2016 19:45:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/countif-till-present-row-calculation/m-p/316820#M313235</guid>
      <dc:creator>saurabhannadate</dc:creator>
      <dc:date>2016-12-05T19:45:58Z</dc:date>
    </item>
    <item>
      <title>Re: countif till present row calculation</title>
      <link>https://communities.sas.com/t5/SAS-Programming/countif-till-present-row-calculation/m-p/316844#M313236</link>
      <description>&lt;P&gt;Since $A$2 and such don't have much actual meaning in the form of the example data provided (you don't provide a column or row indicator for anything) the question is incomplete.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Generally a "line by line" transform of a spreadsheet process will not work in SAS as most things are row oriented. The main exception is Proc IML to handle matrix data.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 05 Dec 2016 20:48:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/countif-till-present-row-calculation/m-p/316844#M313236</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2016-12-05T20:48:08Z</dc:date>
    </item>
    <item>
      <title>Re: countif till present row calculation</title>
      <link>https://communities.sas.com/t5/SAS-Programming/countif-till-present-row-calculation/m-p/316845#M313237</link>
      <description>&lt;P&gt;Usually, SAS would use separate counters for each STATUS.&amp;nbsp; Matching to your example:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;CountX&amp;nbsp;&amp;nbsp; CountY&lt;/P&gt;
&lt;P&gt;0&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; 1&lt;/P&gt;
&lt;P&gt;0&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; 2&lt;/P&gt;
&lt;P&gt;0&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; 3&lt;/P&gt;
&lt;P&gt;1&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; 3&lt;/P&gt;
&lt;P&gt;1&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; 4&lt;/P&gt;
&lt;P&gt;2&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; 4&lt;/P&gt;
&lt;P&gt;2&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; 5&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You could construct COUNTIF at the same time, but it's much easier to talk about if you were to give a SAS example instead of an Excel example.&lt;/P&gt;</description>
      <pubDate>Mon, 05 Dec 2016 20:48:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/countif-till-present-row-calculation/m-p/316845#M313237</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2016-12-05T20:48:53Z</dc:date>
    </item>
    <item>
      <title>Re: countif till present row calculation</title>
      <link>https://communities.sas.com/t5/SAS-Programming/countif-till-present-row-calculation/m-p/316929#M313238</link>
      <description>&lt;P&gt;You want cumulative frequency, from record 1 through current record, of the current value of&amp;nbsp; status.&amp;nbsp; So let's assume you create dataset HAVE with&amp;nbsp;the series of status values.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you know in advance all the possible values of status, then this is short and simple.&amp;nbsp; It keeps an array of counts with one element per expected value of status.&amp;nbsp; Arrays with the _TEMPORARY_ description will have their values persist from record to record, but&amp;nbsp; will not be stored in the data set - a perfect place to keep running counts. The FIND function return the posiition in the first argument where the second argument is found.:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  input status :$1. @@;
datalines;
Y Y Y X Y X Y
run;

data want;
  array counts {2} _temporary_ (2*0);
  set have;
  index=find('XY',status);
  counts{index}+1;
  countif=counts{index};
  drop index;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you don't know in advance all the status values in have, then the thing to do is create a hash object, keyed on STATUS and storing the running countif value for each status, as below.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;The least intuitive thing about the hash object in this program is that it is declared only once overall (not once per observations).&amp;nbsp; That's why you see object COUNTS declared and defined in the "if _n_=1 then do" group.&amp;nbsp; "_N_=1" in this program is true only when the first observation is current.&lt;/LI&gt;
&lt;LI&gt;The FIND() method retrieves the current value of COUNTIF based on the status value.&amp;nbsp; If the status value&amp;nbsp;is not already in the object, then FiND() fails, and yields a non-zero return code (RC).&amp;nbsp; Hence set countif to zero.&lt;/LI&gt;
&lt;LI&gt;After incrementing COUNTIF, update the hash object with the new countif value.&lt;/LI&gt;
&lt;/OL&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;data want;
  set have;
  if _n_=1 then do;
    declare hash counts();
      counts.definekey('status');
      counts.definedata('countif');
      counts.definedone();
  end;
  rc=counts.find();
  if rc^=0 then countif=0;
  countif=countif+1;
  counts.replace();
  drop rc;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;xxx&lt;/P&gt;</description>
      <pubDate>Tue, 06 Dec 2016 05:05:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/countif-till-present-row-calculation/m-p/316929#M313238</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2016-12-06T05:05:38Z</dc:date>
    </item>
  </channel>
</rss>

