<?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 How to have obs with zero values when the data does not exsit in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/How-to-have-obs-with-zero-values-when-the-data-does-not-exsit/m-p/360195#M84753</link>
    <description>&lt;P&gt;Dear,&lt;/P&gt;
&lt;P&gt;After running the below program the output i got is(Document attached). But I need to have in my outdata inaddition to the output is&lt;/P&gt;
&lt;P&gt;eg;&lt;/P&gt;
&lt;P&gt;for dose='100mg' and term='bleed' and sev='severe' there is only one obs in the output. I need to have obs with zero values for all SEV variable values for all OBS.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Please help in my code. Thank you&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;eg: output needed for a obs:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;term &amp;nbsp; &amp;nbsp;sev &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;50 &amp;nbsp; &amp;nbsp; 100&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;bleed &amp;nbsp; mild &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;/P&gt;
&lt;P&gt;bleed &amp;nbsp; moderate &amp;nbsp;0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;/P&gt;
&lt;P&gt;bleed &amp;nbsp; severe &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;output getting&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;term &amp;nbsp; &amp;nbsp;sev &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;50 &amp;nbsp; &amp;nbsp; 100&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;bleed &amp;nbsp; severe &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;data one;
input id dose $ term $ sev $;
datalines;
1 50mg hache mild
2 50mg naus moderate
3 100mg vomi mild
4 50mg ulce mild
5 100mg bleed severe
6 100mg rash moderate
7 50mg naus moderate
8 50mg naus mild
;
proc sql;
create table two as
select count(distinct ID) as NS,dose,term,sev
from one
group by dose,term,sev;
quit; 
proc sort data=two;
by dose term sev;
run;
proc transpose data=two out=three(drop=_NAME_);
  by dose term sev  ;
  var NS;
  id dose;
run;
data four;
  set three;
  array data  _50mg _100mg;
  do over data;
    if missing(data) then data=0;
  end;
  TOTAL= _50mg + _100mg ;
run;&lt;/PRE&gt;</description>
    <pubDate>Sat, 20 May 2017 14:46:01 GMT</pubDate>
    <dc:creator>knveraraju91</dc:creator>
    <dc:date>2017-05-20T14:46:01Z</dc:date>
    <item>
      <title>How to have obs with zero values when the data does not exsit</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-have-obs-with-zero-values-when-the-data-does-not-exsit/m-p/360195#M84753</link>
      <description>&lt;P&gt;Dear,&lt;/P&gt;
&lt;P&gt;After running the below program the output i got is(Document attached). But I need to have in my outdata inaddition to the output is&lt;/P&gt;
&lt;P&gt;eg;&lt;/P&gt;
&lt;P&gt;for dose='100mg' and term='bleed' and sev='severe' there is only one obs in the output. I need to have obs with zero values for all SEV variable values for all OBS.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Please help in my code. Thank you&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;eg: output needed for a obs:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;term &amp;nbsp; &amp;nbsp;sev &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;50 &amp;nbsp; &amp;nbsp; 100&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;bleed &amp;nbsp; mild &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;/P&gt;
&lt;P&gt;bleed &amp;nbsp; moderate &amp;nbsp;0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;/P&gt;
&lt;P&gt;bleed &amp;nbsp; severe &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;output getting&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;term &amp;nbsp; &amp;nbsp;sev &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;50 &amp;nbsp; &amp;nbsp; 100&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;bleed &amp;nbsp; severe &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;data one;
input id dose $ term $ sev $;
datalines;
1 50mg hache mild
2 50mg naus moderate
3 100mg vomi mild
4 50mg ulce mild
5 100mg bleed severe
6 100mg rash moderate
7 50mg naus moderate
8 50mg naus mild
;
proc sql;
create table two as
select count(distinct ID) as NS,dose,term,sev
from one
group by dose,term,sev;
quit; 
proc sort data=two;
by dose term sev;
run;
proc transpose data=two out=three(drop=_NAME_);
  by dose term sev  ;
  var NS;
  id dose;
run;
data four;
  set three;
  array data  _50mg _100mg;
  do over data;
    if missing(data) then data=0;
  end;
  TOTAL= _50mg + _100mg ;
run;&lt;/PRE&gt;</description>
      <pubDate>Sat, 20 May 2017 14:46:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-have-obs-with-zero-values-when-the-data-does-not-exsit/m-p/360195#M84753</guid>
      <dc:creator>knveraraju91</dc:creator>
      <dc:date>2017-05-20T14:46:01Z</dc:date>
    </item>
    <item>
      <title>Re: How to have obs with zero values when the data does not exsit</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-have-obs-with-zero-values-when-the-data-does-not-exsit/m-p/360198#M84756</link>
      <description>&lt;P&gt;Your current method results in separate lines for each dose, thus the totals do not reflect the 50mg+100mg totals.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;There may be a more efficient way, but I think that the following does what you want:&lt;/P&gt;
&lt;PRE&gt;data one;
  input id dose $ term $ sev $;
  datalines;
1 50mg hache mild
2 50mg naus moderate
3 100mg vomi mild
4 50mg ulce mild
5 100mg bleed severe
6 100mg rash moderate
7 50mg naus moderate
8 50mg naus mild
;

proc sql noprint;
  create table doses as
  select distinct dose
      from one
  ;

  create table terms as
    select distinct term
      from one
  ;
  
  create table sevs as
    select distinct sev
      from one
  ;
  
  create table comb as
    select *, . as NS
      from doses,terms,sevs
        order by term,sev,dose
  ;
  
quit;


proc sql;
  create table two as
    select count(distinct ID) as NS,dose,term,sev
      from one
        group by term,sev,dose
  ;
quit;

data two;
  update two comb;
  by term sev dose;
run;

proc transpose data=two out=three(drop=_NAME_);
  by term sev;
  var NS;
  id dose;
run;

data four;
  set three;
  array data  _50mg _100mg;
  do over data;
    if missing(data) then data=0;
  end;
  TOTAL= _50mg + _100mg ;
run;
&lt;/PRE&gt;
&lt;P&gt;Art, CEO, AnalystFinder.com&lt;/P&gt;</description>
      <pubDate>Sat, 20 May 2017 15:42:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-have-obs-with-zero-values-when-the-data-does-not-exsit/m-p/360198#M84756</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2017-05-20T15:42:43Z</dc:date>
    </item>
    <item>
      <title>Re: How to have obs with zero values when the data does not exsit</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-have-obs-with-zero-values-when-the-data-does-not-exsit/m-p/360266#M84778</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/68272"&gt;@knveraraju91&lt;/a&gt;&lt;/P&gt;
&lt;P&gt;In case you're just after some sort of report then the following could do:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data one;
  input id dose $ term $ sev $;
  datalines;
1 50mg hache mild
2 50mg naus moderate
3 100mg vomi mild
4 50mg ulce mild
5 100mg bleed severe
6 100mg rash moderate
7 50mg naus moderate
8 50mg naus mild
;
run;

proc sql;
  create table combinations as
    select distinct t1.dose, t1.term, t2.sev
    from 
      one as t1, (select distinct sev from one) as t2
    order by t1.dose, t1.term, t2.sev
    ;
quit;

options missing='0';
proc tabulate data=one classdata=combinations;
  class dose term sev;
  table
    dose='Dose'*term='Term'*sev='Severity',
    n='Count'
    ;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;IMG src="https://communities.sas.com/t5/image/serverpage/image-id/8975i35F75C3A1D0BF0A8/image-size/original?v=1.0&amp;amp;px=-1" border="0" alt="Capture.PNG" title="Capture.PNG" /&gt;&lt;/P&gt;</description>
      <pubDate>Sun, 21 May 2017 02:59:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-have-obs-with-zero-values-when-the-data-does-not-exsit/m-p/360266#M84778</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2017-05-21T02:59:23Z</dc:date>
    </item>
    <item>
      <title>Re: How to have obs with zero values when the data does not exsit</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-have-obs-with-zero-values-when-the-data-does-not-exsit/m-p/360747#M84999</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/68272"&gt;@knveraraju91&lt;/a&gt;:&lt;/P&gt;&lt;P&gt;If I understand you correctly, you want to have the output for all possible combinations of DOSE, TERM, and SEV, also those that have no observations.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;One way to do this is to use PROC FREQ with the SPARSE options:&lt;/P&gt;&lt;PRE&gt;proc freq data=one;
  tables dose*term*sev/noprint sparse out=two(drop=percent);
run;&lt;/PRE&gt;&lt;P&gt;which will give you an exploded version of your TWO table, with all possible combinations.&lt;/P&gt;</description>
      <pubDate>Tue, 23 May 2017 14:11:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-have-obs-with-zero-values-when-the-data-does-not-exsit/m-p/360747#M84999</guid>
      <dc:creator>s_lassen</dc:creator>
      <dc:date>2017-05-23T14:11:29Z</dc:date>
    </item>
  </channel>
</rss>

