<?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: conditional count in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/conditional-count/m-p/728857#M226800</link>
    <description>&lt;P&gt;It will be easier if you transpose the data.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  input (Item Q21_01 Q20_10 Q20_07 Q20_04 Q20_01 Q19_01) ($) ;
cards;
abc up up up  up up up
zyx up up down down up up
hmk up down up  up down down
opq down down down up up up
;

proc transpose data=have out=tall(rename=(col1=status)) name=period  ;
  by item notsorted;
  var q: ;
run;

data want;
 do count=1 by 1 until(last.status);
   set tall;
   by item status notsorted;
 end;
 drop period;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;PRE&gt;Obs    count    Item    status

  1      6      abc      up
  2      2      zyx      up
  3      2      zyx      down
  4      2      zyx      up
  5      1      hmk      up
  6      1      hmk      down
  7      2      hmk      up
  8      2      hmk      down
  9      3      opq      down
 10      3      opq      up
&lt;/PRE&gt;</description>
    <pubDate>Wed, 24 Mar 2021 19:06:24 GMT</pubDate>
    <dc:creator>Tom</dc:creator>
    <dc:date>2021-03-24T19:06:24Z</dc:date>
    <item>
      <title>conditional count</title>
      <link>https://communities.sas.com/t5/SAS-Programming/conditional-count/m-p/728854#M226798</link>
      <description>&lt;P&gt;Hello,&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have to do conditional count for my dataset.&amp;nbsp;&lt;/P&gt;&lt;P&gt;My sample dataset is listed below:&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Item&lt;/TD&gt;&lt;TD&gt;Q21_01&lt;/TD&gt;&lt;TD&gt;Q20_10&lt;/TD&gt;&lt;TD&gt;Q20_07&lt;/TD&gt;&lt;TD&gt;Q20_04&lt;/TD&gt;&lt;TD&gt;Q20_01&lt;/TD&gt;&lt;TD&gt;Q19_01&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;abc&lt;/TD&gt;&lt;TD&gt;up&lt;/TD&gt;&lt;TD&gt;up&lt;/TD&gt;&lt;TD&gt;up&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;up&lt;/TD&gt;&lt;TD&gt;up&lt;/TD&gt;&lt;TD&gt;up&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;zyx&lt;/TD&gt;&lt;TD&gt;up&lt;/TD&gt;&lt;TD&gt;up&lt;/TD&gt;&lt;TD&gt;down&lt;/TD&gt;&lt;TD&gt;down&lt;/TD&gt;&lt;TD&gt;up&lt;/TD&gt;&lt;TD&gt;up&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;hmk&lt;/TD&gt;&lt;TD&gt;up&lt;/TD&gt;&lt;TD&gt;down&lt;/TD&gt;&lt;TD&gt;up&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;up&lt;/TD&gt;&lt;TD&gt;down&lt;/TD&gt;&lt;TD&gt;down&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;opq&lt;/TD&gt;&lt;TD&gt;down&lt;/TD&gt;&lt;TD&gt;down&lt;/TD&gt;&lt;TD&gt;down&lt;/TD&gt;&lt;TD&gt;up&lt;/TD&gt;&lt;TD&gt;up&lt;/TD&gt;&lt;TD&gt;up&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Based on this dataset, I need to count movement type by item. At the end I am expecting to get result similar to below:&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Item&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;abc&lt;/TD&gt;&lt;TD&gt;up&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;zyx&lt;/TD&gt;&lt;TD&gt;up&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;down&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;up&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;hmk&lt;/TD&gt;&lt;TD&gt;up&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;down&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;up&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;down&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;opq&lt;/TD&gt;&lt;TD&gt;down&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;up&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Note: My final result can take blank value.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Any help would be appreciated.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 24 Mar 2021 18:37:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/conditional-count/m-p/728854#M226798</guid>
      <dc:creator>dht115</dc:creator>
      <dc:date>2021-03-24T18:37:15Z</dc:date>
    </item>
    <item>
      <title>Re: conditional count</title>
      <link>https://communities.sas.com/t5/SAS-Programming/conditional-count/m-p/728857#M226800</link>
      <description>&lt;P&gt;It will be easier if you transpose the data.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  input (Item Q21_01 Q20_10 Q20_07 Q20_04 Q20_01 Q19_01) ($) ;
cards;
abc up up up  up up up
zyx up up down down up up
hmk up down up  up down down
opq down down down up up up
;

proc transpose data=have out=tall(rename=(col1=status)) name=period  ;
  by item notsorted;
  var q: ;
run;

data want;
 do count=1 by 1 until(last.status);
   set tall;
   by item status notsorted;
 end;
 drop period;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;PRE&gt;Obs    count    Item    status

  1      6      abc      up
  2      2      zyx      up
  3      2      zyx      down
  4      2      zyx      up
  5      1      hmk      up
  6      1      hmk      down
  7      2      hmk      up
  8      2      hmk      down
  9      3      opq      down
 10      3      opq      up
&lt;/PRE&gt;</description>
      <pubDate>Wed, 24 Mar 2021 19:06:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/conditional-count/m-p/728857#M226800</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2021-03-24T19:06:24Z</dc:date>
    </item>
    <item>
      <title>Re: conditional count</title>
      <link>https://communities.sas.com/t5/SAS-Programming/conditional-count/m-p/728888#M226811</link>
      <description>&lt;P&gt;Thank you for information. It works.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Can we convert it back to thin dataset (transpose again) ?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE class="language-sas"&gt;&lt;CODE&gt;data have;
  input (Item Q21_01 Q20_10 Q20_07 Q20_04 Q20_01 Q19_01) ($) ;
cards;
abc up up up  up up up
zyx up up down down up up
hmk up down up  up down down
opq down down down up up up
;

proc transpose data=have out=tall(rename=(col1=status)) name=period  ;
  by item notsorted;
  var q: ;
run;

data want;
 do count=1 by 1 until(last.status);
   set tall;
   by item status notsorted;
 end;
 drop period;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;PRE&gt;Obs    count    Item    status

  1      6      abc      up
  2      2      zyx      up
  3      2      zyx      down
  4      2      zyx      up
  5      1      hmk      up
  6      1      hmk      down
  7      2      hmk      up
  8      2      hmk      down
  9      3      opq      down
 10      3      opq      up&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 24 Mar 2021 20:56:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/conditional-count/m-p/728888#M226811</guid>
      <dc:creator>dht115</dc:creator>
      <dc:date>2021-03-24T20:56:46Z</dc:date>
    </item>
    <item>
      <title>Re: conditional count</title>
      <link>https://communities.sas.com/t5/SAS-Programming/conditional-count/m-p/728895#M226814</link>
      <description>&lt;P&gt;It is a little harder to transpose 2 variables.&amp;nbsp; You could call proc transpose twice and then merge the results.&lt;/P&gt;
&lt;P&gt;Or just use ARRAYs to collapse.&amp;nbsp; In that case you either need to pick some upper bound for the size of the array or use an extra step to count how many variables you will need.&lt;/P&gt;
&lt;P&gt;For example you could just set 5 as the maximum number:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
   do index=1 by 1 until(last.item);
   do count=1 by 1 until(last.status);
     set tall;
     by item status notsorted;
   end;
   array counts [5];
   array direction [5] $8 ;
   counts[index]=count;
   direction[index]=status;
 end;
 drop period status index count;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;PRE&gt;Obs   Item   counts1   counts2   counts3   counts4   counts5   direction1   direction2   direction3   direction4   direction5

 1    abc       6         .         .         .         .         up
 2    zyx       2         2         2         .         .         up           down          up
 3    hmk       1         1         2         2         .         up           down          up          down
 4    opq       3         3         .         .         .         down         up
&lt;/PRE&gt;</description>
      <pubDate>Wed, 24 Mar 2021 21:30:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/conditional-count/m-p/728895#M226814</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2021-03-24T21:30:18Z</dc:date>
    </item>
  </channel>
</rss>

