<?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: coming two tables with reference table in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/coming-two-tables-with-reference-table/m-p/623314#M183484</link>
    <description>&lt;P&gt;With SQL, use a cross join:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data names;
input med_id med_name :$3.;
datalines;
1 ABC
2 DEF
3 GHI
4 JKL
5 MNO
6 PQR
7 STU
8 VWX
9 YZ
;
data meds;
input patientId   med_name :$3.   medication;
datalines;
123     ABC     1
123     GHI     1
123     JKL     1
123     PQR     1
456     DEF     1
456     GHI     1
;

proc sql;
select 
	a.patientId,
	b.med_name,
	coalesce(c.medication, 0) as medication
from
(select distinct patientId from meds) as a cross join
(select distinct med_name from names) as b left join
meds as c on a.patientId=c.patientId and b.med_name=c.med_name;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Sat, 08 Feb 2020 16:49:13 GMT</pubDate>
    <dc:creator>PGStats</dc:creator>
    <dc:date>2020-02-08T16:49:13Z</dc:date>
    <item>
      <title>coming two tables with reference table</title>
      <link>https://communities.sas.com/t5/SAS-Programming/coming-two-tables-with-reference-table/m-p/623306#M183479</link>
      <description>&lt;P&gt;I have a 1) reference table for medications and 2) patient level data for medications&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Reference table for medications&lt;/P&gt;
&lt;TABLE width="161"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="52"&gt;med_id&lt;/TD&gt;
&lt;TD width="109"&gt;med_name&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;ABC&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;DEF&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;GHI&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;JKL&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;5&lt;/TD&gt;
&lt;TD&gt;MNO&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;6&lt;/TD&gt;
&lt;TD&gt;PQR&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;7&lt;/TD&gt;
&lt;TD&gt;STU&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;8&lt;/TD&gt;
&lt;TD&gt;VWX&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;9&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;YZ&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;2) Patient Level Data&lt;/P&gt;
&lt;TABLE width="214"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="64"&gt;patientId&lt;/TD&gt;
&lt;TD width="75"&gt;med_name&lt;/TD&gt;
&lt;TD width="75"&gt;medication&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;123&lt;/TD&gt;
&lt;TD&gt;ABC&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;123&lt;/TD&gt;
&lt;TD&gt;GHI&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;123&lt;/TD&gt;
&lt;TD&gt;JKL&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;123&lt;/TD&gt;
&lt;TD&gt;PQR&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;456&lt;/TD&gt;
&lt;TD&gt;DEF&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;456&lt;/TD&gt;
&lt;TD&gt;GHI&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;What I want to do is that join both reference med and patient level but indicate the patients that are not on certain medications.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="211"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="61"&gt;patientId&lt;/TD&gt;
&lt;TD width="75"&gt;med_name&lt;/TD&gt;
&lt;TD width="75"&gt;medication&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;123&lt;/TD&gt;
&lt;TD&gt;ABC&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;123&lt;/TD&gt;
&lt;TD&gt;DEF&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;123&lt;/TD&gt;
&lt;TD&gt;GHI&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;123&lt;/TD&gt;
&lt;TD&gt;JKL&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;123&lt;/TD&gt;
&lt;TD&gt;MNO&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;123&lt;/TD&gt;
&lt;TD&gt;PQR&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;123&lt;/TD&gt;
&lt;TD&gt;STU&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;123&lt;/TD&gt;
&lt;TD&gt;VWX&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;123&lt;/TD&gt;
&lt;TD&gt;YZ&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;456&lt;/TD&gt;
&lt;TD&gt;ABC&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;456&lt;/TD&gt;
&lt;TD&gt;DEF&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;456&lt;/TD&gt;
&lt;TD&gt;GHI&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;456&lt;/TD&gt;
&lt;TD&gt;JKL&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;456&lt;/TD&gt;
&lt;TD&gt;MNO&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;456&lt;/TD&gt;
&lt;TD&gt;PQR&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;456&lt;/TD&gt;
&lt;TD&gt;STU&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;456&lt;/TD&gt;
&lt;TD&gt;VWX&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;456&lt;/TD&gt;
&lt;TD&gt;YZ&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;What I did was:&lt;/P&gt;
&lt;P&gt;proc sql;&lt;/P&gt;
&lt;P&gt;select a.*, b.med_name&lt;/P&gt;
&lt;P&gt;from patient left join medtable a on med_name = med_name;quit;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 08 Feb 2020 16:11:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/coming-two-tables-with-reference-table/m-p/623306#M183479</guid>
      <dc:creator>monday89</dc:creator>
      <dc:date>2020-02-08T16:11:29Z</dc:date>
    </item>
    <item>
      <title>Re: coming two tables with reference table</title>
      <link>https://communities.sas.com/t5/SAS-Programming/coming-two-tables-with-reference-table/m-p/623311#M183482</link>
      <description>&lt;P&gt;So you want to expand the number of observations so there is one observation for every medication for each patient?&lt;/P&gt;
&lt;P&gt;Do you want the MEDICATION variable to be copied over, but set to zero on the new observations?&amp;nbsp; Or are you looking for new variable that is 1 when the observation was in the patient table and zero when it wasn't?&lt;/P&gt;
&lt;P&gt;Here is a straight forward way to do this. First make a skeleton of the final dataset that has all of the possible observations. Then merge it with your patient data.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql ;
create table skeleton as
select patientid,med_name
from (select distinct patientid from patient)
   , (select distinct med_name from medtable)
order by patientid,med_name
;
quit;

data want;
  merge skeleton patient(in=in2);
  by patientid med_name;
  want = in2;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;PRE&gt;       patient
Obs      Id       med_name    medication    want

  1      123        ABC            1          1
  2      123        DEF            .          0
  3      123        GHI            1          1
  4      123        JKL            1          1
  5      123        MNO            .          0
  6      123        PQR            1          1
  7      123        STU            .          0
  8      123        VWX            .          0
  9      456        ABC            .          0
 10      456        DEF            1          1
 11      456        GHI            1          1
 12      456        JKL            .          0
 13      456        MNO            .          0
 14      456        PQR            .          0
 15      456        STU            .          0
 16      456        VWX            .          0&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 08 Feb 2020 16:45:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/coming-two-tables-with-reference-table/m-p/623311#M183482</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2020-02-08T16:45:28Z</dc:date>
    </item>
    <item>
      <title>Re: coming two tables with reference table</title>
      <link>https://communities.sas.com/t5/SAS-Programming/coming-two-tables-with-reference-table/m-p/623314#M183484</link>
      <description>&lt;P&gt;With SQL, use a cross join:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data names;
input med_id med_name :$3.;
datalines;
1 ABC
2 DEF
3 GHI
4 JKL
5 MNO
6 PQR
7 STU
8 VWX
9 YZ
;
data meds;
input patientId   med_name :$3.   medication;
datalines;
123     ABC     1
123     GHI     1
123     JKL     1
123     PQR     1
456     DEF     1
456     GHI     1
;

proc sql;
select 
	a.patientId,
	b.med_name,
	coalesce(c.medication, 0) as medication
from
(select distinct patientId from meds) as a cross join
(select distinct med_name from names) as b left join
meds as c on a.patientId=c.patientId and b.med_name=c.med_name;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sat, 08 Feb 2020 16:49:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/coming-two-tables-with-reference-table/m-p/623314#M183484</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2020-02-08T16:49:13Z</dc:date>
    </item>
  </channel>
</rss>

