<?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: proc sql command in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/proc-sql-command/m-p/611693#M178324</link>
    <description>&lt;P&gt;If you want SQL, use an update statement:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data t1;
input name $	status $;
datalines;
Yellow no
Blue no
Orange no
Red no
Green no
;
 
data t2;
input name $	status $;
datalines;
Yellow yes
Orange yes
;

proc sql;
update t1
set status = (select status from t2 where name=t1.name)
where name in (select name from t2);
select * from t1;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Fri, 13 Dec 2019 18:52:43 GMT</pubDate>
    <dc:creator>PGStats</dc:creator>
    <dc:date>2019-12-13T18:52:43Z</dc:date>
    <item>
      <title>proc sql command</title>
      <link>https://communities.sas.com/t5/SAS-Programming/proc-sql-command/m-p/611660#M178303</link>
      <description>&lt;P&gt;I have two tables&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Table 1&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;name&lt;/TD&gt;&lt;TD&gt;status&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Yellow&lt;/TD&gt;&lt;TD&gt;no&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Blue&lt;/TD&gt;&lt;TD&gt;no&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Orange&lt;/TD&gt;&lt;TD&gt;no&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Red&lt;/TD&gt;&lt;TD&gt;no&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Green&lt;/TD&gt;&lt;TD&gt;no&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Table 2&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;name&lt;/TD&gt;&lt;TD&gt;status&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Yellow&lt;/TD&gt;&lt;TD&gt;yes&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Orange&lt;/TD&gt;&lt;TD&gt;yes&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Want FINAL:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;name&lt;/TD&gt;&lt;TD&gt;status&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Yellow&lt;/TD&gt;&lt;TD&gt;yes&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Blue&lt;/TD&gt;&lt;TD&gt;no&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Orange&lt;/TD&gt;&lt;TD&gt;yes&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Red&lt;/TD&gt;&lt;TD&gt;no&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Green&lt;/TD&gt;&lt;TD&gt;no&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I used the following sql command but i don't want to create additional dataset&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;create table final as&lt;/P&gt;&lt;P&gt;select a.name, a.status, b.name, b.status&lt;/P&gt;&lt;P&gt;from table1 a left join table2 b on a.name = b.name;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This is the output i see:&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;name&lt;/TD&gt;&lt;TD&gt;status&lt;/TD&gt;&lt;TD&gt;name&lt;/TD&gt;&lt;TD&gt;status&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Yellow&lt;/TD&gt;&lt;TD&gt;no&lt;/TD&gt;&lt;TD&gt;Yellow&lt;/TD&gt;&lt;TD&gt;yes&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Blue&lt;/TD&gt;&lt;TD&gt;no&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;yes&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Orange&lt;/TD&gt;&lt;TD&gt;no&lt;/TD&gt;&lt;TD&gt;Orange&lt;/TD&gt;&lt;TD&gt;yes&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Red&lt;/TD&gt;&lt;TD&gt;no&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;yes&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Green&lt;/TD&gt;&lt;TD&gt;no&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;yes&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;</description>
      <pubDate>Fri, 13 Dec 2019 17:31:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/proc-sql-command/m-p/611660#M178303</guid>
      <dc:creator>radhikaa4</dc:creator>
      <dc:date>2019-12-13T17:31:29Z</dc:date>
    </item>
    <item>
      <title>Re: proc sql command</title>
      <link>https://communities.sas.com/t5/SAS-Programming/proc-sql-command/m-p/611673#M178311</link>
      <description>Why not try MODIFY instead then?&lt;BR /&gt;&lt;BR /&gt;data want;&lt;BR /&gt;update t1 t2;&lt;BR /&gt;by name;&lt;BR /&gt;run;&lt;BR /&gt;&lt;BR /&gt;&lt;A href="https://documentation.sas.com/?docsetId=lestmtsref&amp;amp;docsetTarget=p18w3br45er2qun1r8sfmm4grjyr.htm&amp;amp;docsetVersion=3.1&amp;amp;locale=en" target="_blank"&gt;https://documentation.sas.com/?docsetId=lestmtsref&amp;amp;docsetTarget=p18w3br45er2qun1r8sfmm4grjyr.htm&amp;amp;docsetVersion=3.1&amp;amp;locale=en&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;FYI - you'll always be creating a new data set here regardless, SAS may do it implicit and you may have the same name but I'm fairly certain you're recreating the table each time regardless of approach.</description>
      <pubDate>Fri, 13 Dec 2019 18:08:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/proc-sql-command/m-p/611673#M178311</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2019-12-13T18:08:52Z</dc:date>
    </item>
    <item>
      <title>Re: proc sql command</title>
      <link>https://communities.sas.com/t5/SAS-Programming/proc-sql-command/m-p/611693#M178324</link>
      <description>&lt;P&gt;If you want SQL, use an update statement:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data t1;
input name $	status $;
datalines;
Yellow no
Blue no
Orange no
Red no
Green no
;
 
data t2;
input name $	status $;
datalines;
Yellow yes
Orange yes
;

proc sql;
update t1
set status = (select status from t2 where name=t1.name)
where name in (select name from t2);
select * from t1;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 13 Dec 2019 18:52:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/proc-sql-command/m-p/611693#M178324</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2019-12-13T18:52:43Z</dc:date>
    </item>
    <item>
      <title>Re: proc sql command</title>
      <link>https://communities.sas.com/t5/SAS-Programming/proc-sql-command/m-p/611794#M178400</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data t1;
input name $	status $;
datalines;
Yellow no
Blue no
Orange no
Red no
Green no
;
 
data t2;
input name $	status $;
datalines;
Yellow yes
Orange yes
;

proc sql;
create table final as
select a.name,coalescec(b.status,a.status) as status
from t1 a left join t2 b on a.name = b.name;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sat, 14 Dec 2019 12:12:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/proc-sql-command/m-p/611794#M178400</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2019-12-14T12:12:01Z</dc:date>
    </item>
    <item>
      <title>Re: proc sql command</title>
      <link>https://communities.sas.com/t5/SAS-Programming/proc-sql-command/m-p/611805#M178408</link>
      <description>&lt;P&gt;That cannot be the dataset you get.&amp;nbsp; It might be what SQL produces when you remove the CREATE TABLE part of the statement and just run the select statement.&amp;nbsp; But when you are creating a table it cannot have two variables with the same name.&amp;nbsp; If your list of variables includes two or more with the same name then PROC SQL will only save the first one. So your result is just a copy of the TABLE1.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Normally in SAS you would just make a new table.&amp;nbsp; If you create the new table with the same name as an old one SAS will remove the old one when the step finishes without errors. The only reason to worry about updating a table in place is if the table is really large (or possibly you are doing this update hundreds of thousands of times).&amp;nbsp; In which case why are you using SAS to manage it instead of using some database system?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The data step UPDATE statement will allow to apply transactions to a dataset that has a unique key (note the key could require multiple variables. The datasets need to be sorted by the key variable(s). This will also allow insertions.&amp;nbsp; So if we consider table1 as your source dataset and table2 as your transaction dataset the syntax would be:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
  update table1 table2;
  by name;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;To replace table1 just use table1 instead of want in the data statement.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To truly update in place you can use the MODIFY statement instead of the UPDATE statement.&amp;nbsp; That process is more complex but gives you more options for what types of actions to take.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In SQL&amp;nbsp;to make a new table you will need to explicitly state how your want the new variables created.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;create table want as 
  select a.NAME, coalesce(b.STATUS,a.STATUS)
  from table1 a left join table2 b
    on a.name = b.name
;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Again replace want with table1 if you want to replace your existing table1.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Or&amp;nbsp;you could us the UPDATE statement of PROC SQL to modify in place. So perhaps something like this.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;update table1 a
  set status = (select b.status from table2 b where a.name=b.name)
  where name in (select name from table2)
;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Also make sure that TABLE2 does not have multiple observations per NAME.&amp;nbsp; The data step UPDATE will work as it will just apply the transactions in order, but the SQL codes would not work.&amp;nbsp; The SQL join would produce multiple observations and the SQL UPDATE will fail since you cannot store more than one values of status into a single observation.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 14 Dec 2019 18:43:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/proc-sql-command/m-p/611805#M178408</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2019-12-14T18:43:16Z</dc:date>
    </item>
  </channel>
</rss>

