<?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: How to filter and count number of subjects by a variable vales in proc sql in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/How-to-filter-and-count-number-of-subjects-by-a-variable-vales/m-p/327350#M73011</link>
    <description>&lt;P&gt;My take looks like this:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input id term$ sev $ dos;
datalines;
1 vo mild 100
1 na moderate 200
1 ga moderate 100
1 pa moderate 200
2 fe severe 200
2 it mild 200
3 vo mild 100
3 na mild 100
4 ds moderate 200
4 ma severe 200
5 hg moderate 100
5 ty mild 200
6 fd mild 200
;
run;

proc sort data=have;
by id dos sev;
run;

data want;
set have;
by id dos;
retain mild moderate severe;
if first.dos
then do;
  mild = 0;
  moderate = 0;
  severe = 0;
end;
select (sev);
  when ('mild') mild = 1;
  when ('moderate') do;
    mild = 0;
    moderate = 1;
  end;
  when ('severe') severe = 1;
end;
if last.dos then output;
keep id dos mild moderate severe;
run;

proc summary data=want sum print;
class dos;
var mild moderate severe;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;but I get different numbers for dos=200:&lt;/P&gt;
&lt;PRE&gt;              The SUMMARY Procedure

                   N
          dos    Obs    Variable             Sum
 -----------------------------------------------
          100      3    mild           1.0000000
                        moderate       2.0000000
                        severe                 0

          200      5    mild           3.0000000
                        moderate       2.0000000
                        severe         2.0000000
 -----------------------------------------------
&lt;/PRE&gt;
&lt;P&gt;Please check your rules against your data.&lt;/P&gt;
&lt;P&gt;For dos=200, I see three ID's with mild without moderate (2, 5, 6), two ID's with moderate (1, 4) and two with severe (2, 4)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Or did you want that 'severe' overrides both 'mild' and 'moderate'?&lt;/P&gt;</description>
    <pubDate>Wed, 25 Jan 2017 12:20:39 GMT</pubDate>
    <dc:creator>Kurt_Bremser</dc:creator>
    <dc:date>2017-01-25T12:20:39Z</dc:date>
    <item>
      <title>How to filter and count number of subjects by a variable vales in proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-filter-and-count-number-of-subjects-by-a-variable-vales/m-p/327253#M72989</link>
      <description>&lt;P&gt;Dear,&lt;/P&gt;&lt;P&gt;The following data values present. I have to calculate number of distinct subjects by variables (dos,sev)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;data one;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;input id term$ sev $ dos;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;datalines;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;1 vo mild 100&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;1 na moderate 200&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;1 ga moderate 100&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;1 pa moderate 200&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2 fe severe 200&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2 it mild 200&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;3 vo mild 100 &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;3 na mild 100&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;4 ds moderate 200&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;4 ma severe 200&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;5 hg moderate 100&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;5 ty mild 200&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;6 fd mild 200&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;if a subject has sev=mild and sev=moderate for a dos, then that subject should be counted under sev=moderate for that dos.&lt;/P&gt;&lt;P&gt;Please help in my code2 as the output numbers are not that I need.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;code1;&lt;/P&gt;&lt;P&gt;proc sql;&lt;BR /&gt;create table three as&lt;BR /&gt;select count(distinct id) as ns,dos&lt;BR /&gt;from one&lt;BR /&gt;group by dos;&lt;BR /&gt;quit;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;code1 output;&lt;/P&gt;&lt;P&gt;dos &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ns&lt;/P&gt;&lt;P&gt;100 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3&lt;/P&gt;&lt;P&gt;200 &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;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Code2: &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; &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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;proc sql;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;create table two as&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;select count(distinct id) as ns,dos,sev&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;from one&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;group by dos,sev;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;quit;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Code2 output:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;dos &amp;nbsp; &amp;nbsp; &amp;nbsp;sev &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ns&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;100 &amp;nbsp; &amp;nbsp; mild &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;100 &amp;nbsp; &amp;nbsp; &amp;nbsp;moderate &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;200 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;mild &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;200 &amp;nbsp; &amp;nbsp; &amp;nbsp;moderate &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;200 &amp;nbsp; &amp;nbsp; &amp;nbsp; severe &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Output needed; I am just dispalying the numbers in a tabular form to better expalin&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; dos(variable)&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;100 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 200&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;ns=3 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ns=5&lt;/P&gt;&lt;P&gt;sev(variable)&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/P&gt;&lt;P&gt;mild &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1 &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;moderate &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2 &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;severe &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;2&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 25 Jan 2017 06:03:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-filter-and-count-number-of-subjects-by-a-variable-vales/m-p/327253#M72989</guid>
      <dc:creator>knveraraju91</dc:creator>
      <dc:date>2017-01-25T06:03:38Z</dc:date>
    </item>
    <item>
      <title>Re: How to filter and count number of subjects by a variable vales in proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-filter-and-count-number-of-subjects-by-a-variable-vales/m-p/327302#M73005</link>
      <description>&lt;P&gt;You can try this proc freq&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc freq data=one;
table sev*dos / norow nocol nopct ;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 25 Jan 2017 09:39:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-filter-and-count-number-of-subjects-by-a-variable-vales/m-p/327302#M73005</guid>
      <dc:creator>RahulG</dc:creator>
      <dc:date>2017-01-25T09:39:47Z</dc:date>
    </item>
    <item>
      <title>Re: How to filter and count number of subjects by a variable vales in proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-filter-and-count-number-of-subjects-by-a-variable-vales/m-p/327350#M73011</link>
      <description>&lt;P&gt;My take looks like this:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input id term$ sev $ dos;
datalines;
1 vo mild 100
1 na moderate 200
1 ga moderate 100
1 pa moderate 200
2 fe severe 200
2 it mild 200
3 vo mild 100
3 na mild 100
4 ds moderate 200
4 ma severe 200
5 hg moderate 100
5 ty mild 200
6 fd mild 200
;
run;

proc sort data=have;
by id dos sev;
run;

data want;
set have;
by id dos;
retain mild moderate severe;
if first.dos
then do;
  mild = 0;
  moderate = 0;
  severe = 0;
end;
select (sev);
  when ('mild') mild = 1;
  when ('moderate') do;
    mild = 0;
    moderate = 1;
  end;
  when ('severe') severe = 1;
end;
if last.dos then output;
keep id dos mild moderate severe;
run;

proc summary data=want sum print;
class dos;
var mild moderate severe;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;but I get different numbers for dos=200:&lt;/P&gt;
&lt;PRE&gt;              The SUMMARY Procedure

                   N
          dos    Obs    Variable             Sum
 -----------------------------------------------
          100      3    mild           1.0000000
                        moderate       2.0000000
                        severe                 0

          200      5    mild           3.0000000
                        moderate       2.0000000
                        severe         2.0000000
 -----------------------------------------------
&lt;/PRE&gt;
&lt;P&gt;Please check your rules against your data.&lt;/P&gt;
&lt;P&gt;For dos=200, I see three ID's with mild without moderate (2, 5, 6), two ID's with moderate (1, 4) and two with severe (2, 4)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Or did you want that 'severe' overrides both 'mild' and 'moderate'?&lt;/P&gt;</description>
      <pubDate>Wed, 25 Jan 2017 12:20:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-filter-and-count-number-of-subjects-by-a-variable-vales/m-p/327350#M73011</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2017-01-25T12:20:39Z</dc:date>
    </item>
    <item>
      <title>Re: How to filter and count number of subjects by a variable vales in proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-filter-and-count-number-of-subjects-by-a-variable-vales/m-p/327376#M73021</link>
      <description>&lt;P&gt;First find max severity for each ID DOS.&amp;nbsp; Then count those for each SEV DOS.&amp;nbsp; You can use your SEV values directly to find the MAX(SEV) using PROC SUMMARY IDGROUP.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data ae;
   input id term$ sev $ dos;
   datalines;
1 vo mild 100
1 na moderate 200
1 ga moderate 100
1 pa moderate 200
2 fe severe 200
2 it mild 200
3 vo mild 100 
3 na mild 100
4 ds moderate 200
4 ma severe 200
5 hg moderate 100
5 ty mild 200
6 fd mild 200
;;;;
   run;
proc print;
   run;
proc summary data=ae nway;
   class id dos;
   output out=ae1 idgroup(max(sev) out(sev)=);
   run;
proc print;
   run;
proc summary data=ae1 nway completetypes;
   class sev dos;
   output out=ae2(drop=_type_);
   run;
proc print;
   run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;IMG title="Capture.PNG" alt="Capture.PNG" src="https://communities.sas.com/t5/image/serverpage/image-id/6878i5DD57050E435F5BD/image-size/original?v=1.0&amp;amp;px=-1" border="0" /&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 25 Jan 2017 13:45:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-filter-and-count-number-of-subjects-by-a-variable-vales/m-p/327376#M73021</guid>
      <dc:creator>data_null__</dc:creator>
      <dc:date>2017-01-25T13:45:17Z</dc:date>
    </item>
  </channel>
</rss>

