<?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: sql in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/sql/m-p/103188#M28916</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Why SQL?&lt;/P&gt;&lt;P&gt;Why not use a MERGE or UPDATE statement?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 10 Jul 2012 03:08:14 GMT</pubDate>
    <dc:creator>Tom</dc:creator>
    <dc:date>2012-07-10T03:08:14Z</dc:date>
    <item>
      <title>sql</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/sql/m-p/103185#M28913</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I have millions of records in table and always appending the new records into the table.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE border="0" cellpadding="0" cellspacing="0" style="width: 192px;"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD class="xl63" height="20" width="64"&gt;id&lt;/TD&gt;&lt;TD class="xl63" style="border-left: medium none;" width="64"&gt;col1&lt;/TD&gt;&lt;TD class="xl63" style="border-left: medium none;" width="64"&gt;col2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD align="right" class="xl63" height="20" style="border-top: medium none;"&gt;1&lt;/TD&gt;&lt;TD class="xl63" style="border-top: medium none; border-left: medium none;"&gt;id1&lt;/TD&gt;&lt;TD class="xl63" style="border-top: medium none; border-left: medium none;"&gt;desc1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD align="right" class="xl63" height="20" style="border-top: medium none;"&gt;5&lt;/TD&gt;&lt;TD class="xl63" style="border-top: medium none; border-left: medium none;"&gt;id2&lt;/TD&gt;&lt;TD class="xl63" style="border-top: medium none; border-left: medium none;"&gt;desc3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD align="right" class="xl63" height="20" style="border-top: medium none;"&gt;3&lt;/TD&gt;&lt;TD class="xl63" style="border-top: medium none; border-left: medium none;"&gt;id1&lt;/TD&gt;&lt;TD class="xl63" style="border-top: medium none; border-left: medium none;"&gt;desc2&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;in above case, first two records are old and 3rd record is appended to existing table. I want to change old desc1 column with new desc2 for same col1 value.&lt;/P&gt;&lt;P&gt;i want my output as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;TABLE border="0" cellpadding="0" cellspacing="0" style="width: 192px;"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD class="xl65" height="20" width="64"&gt;id&lt;/TD&gt;&lt;TD class="xl65" style="border-left: medium none;" width="64"&gt;col1&lt;/TD&gt;&lt;TD class="xl65" style="border-left: medium none;" width="64"&gt;col2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD align="right" class="xl65" height="20" style="border-top: medium none;"&gt;1&lt;/TD&gt;&lt;TD class="xl65" style="border-top: medium none; border-left: medium none;"&gt;id1&lt;/TD&gt;&lt;TD class="xl65" style="border-top: medium none; border-left: medium none;"&gt;desc2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD align="right" class="xl65" height="20" style="border-top: medium none;"&gt;5&lt;/TD&gt;&lt;TD class="xl65" style="border-top: medium none; border-left: medium none;"&gt;id2&lt;/TD&gt;&lt;TD class="xl65" style="border-top: medium none; border-left: medium none;"&gt;desc3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD align="right" class="xl65" height="20" style="border-top: medium none;"&gt;3&lt;/TD&gt;&lt;TD class="xl65" style="border-top: medium none; border-left: medium none;"&gt;id1&lt;/TD&gt;&lt;TD class="xl65" style="border-top: medium none; border-left: medium none;"&gt;desc2&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Any efficient way to do this&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 09 Jul 2012 22:42:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/sql/m-p/103185#M28913</guid>
      <dc:creator>sunilreddy</dc:creator>
      <dc:date>2012-07-09T22:42:14Z</dc:date>
    </item>
    <item>
      <title>Re: sql</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/sql/m-p/103186#M28914</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;From your description it appears you want to do both updating of an existing record if already present, and appending of new records if not present.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It would help if you could change your example to showing three things: the original rows, the rows to be added by updating or appending, and the expected final rows.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Doing both updating and appending requires more resources than just appending, so clarification of your requirements would be helpful first.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 10 Jul 2012 00:43:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/sql/m-p/103186#M28914</guid>
      <dc:creator>SASKiwi</dc:creator>
      <dc:date>2012-07-10T00:43:37Z</dc:date>
    </item>
    <item>
      <title>Re: sql</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/sql/m-p/103187#M28915</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;There would be many ways to do it, depending on your terms and conditions. One assumption for the following solutions is that you still have access to a separate data set containing new data.&lt;/P&gt;&lt;P&gt;1. if you don't care about the records order, traditional data step is sufficient to do the job:&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;input (id&amp;nbsp;&amp;nbsp;&amp;nbsp; col1&amp;nbsp;&amp;nbsp;&amp;nbsp; col2) ($);&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp; id1&amp;nbsp;&amp;nbsp;&amp;nbsp; desc1&lt;/P&gt;&lt;P&gt;5&amp;nbsp;&amp;nbsp;&amp;nbsp; id2&amp;nbsp;&amp;nbsp;&amp;nbsp; desc3&lt;/P&gt;&lt;P&gt;3&amp;nbsp;&amp;nbsp;&amp;nbsp; id1&amp;nbsp;&amp;nbsp;&amp;nbsp; desc2&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data new;&lt;/P&gt;&lt;P&gt;input (id&amp;nbsp;&amp;nbsp;&amp;nbsp; col1&amp;nbsp;&amp;nbsp;&amp;nbsp; col2) ($);&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;3&amp;nbsp;&amp;nbsp;&amp;nbsp; id1&amp;nbsp;&amp;nbsp;&amp;nbsp; desc2&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sort data=have;&lt;/P&gt;&lt;P&gt;by col1;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;merge have(in=a) new(drop=id rename=col2=col3);&lt;/P&gt;&lt;P&gt;by col1;&lt;/P&gt;&lt;P&gt;col2=coalescec(col3,col2);&lt;/P&gt;&lt;P&gt;drop col3;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;2. if you do need to keep the order in 'have', then hash() can be handy:&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;if _n_=1 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; set new(obs=1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; dcl hash h(dataset:'new', ordered:'a',duplicate:'r');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; h.definekey('col1');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; h.definedata('col2');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; h.definedone();&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;set have;&lt;/P&gt;&lt;P&gt;rc=h.find();&lt;/P&gt;&lt;P&gt;drop rc;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Haikuo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 10 Jul 2012 00:56:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/sql/m-p/103187#M28915</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2012-07-10T00:56:49Z</dc:date>
    </item>
    <item>
      <title>Re: sql</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/sql/m-p/103188#M28916</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Why SQL?&lt;/P&gt;&lt;P&gt;Why not use a MERGE or UPDATE statement?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 10 Jul 2012 03:08:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/sql/m-p/103188#M28916</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2012-07-10T03:08:14Z</dc:date>
    </item>
    <item>
      <title>Re: sql</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/sql/m-p/103189#M28917</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;PRE&gt;data old;
input (id&amp;nbsp;&amp;nbsp;&amp;nbsp; col1&amp;nbsp;&amp;nbsp;&amp;nbsp; col2) ($);
cards;
1&amp;nbsp;&amp;nbsp;&amp;nbsp; id1&amp;nbsp;&amp;nbsp;&amp;nbsp; desc1
5&amp;nbsp;&amp;nbsp;&amp;nbsp; id2&amp;nbsp;&amp;nbsp;&amp;nbsp; desc3
;
run;
 

data new;
input (id&amp;nbsp;&amp;nbsp;&amp;nbsp; col1&amp;nbsp;&amp;nbsp;&amp;nbsp; col2) ($);
cards;
3&amp;nbsp;&amp;nbsp;&amp;nbsp; id1&amp;nbsp;&amp;nbsp;&amp;nbsp; desc2
;
run;
proc sql;
update old 
 set col2=(select col2 from new where new.col1=old.col1)
&amp;nbsp; where exists(select col1 from new where new.col1=old.col1)
&amp;nbsp; ;
quit;
proc append base=old data=new force;run;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Ksharp&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 10 Jul 2012 03:36:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/sql/m-p/103189#M28917</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2012-07-10T03:36:12Z</dc:date>
    </item>
    <item>
      <title>Re: sql</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/sql/m-p/103190#M28918</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;You can try this..&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;input (id&amp;nbsp;&amp;nbsp;&amp;nbsp; col1&amp;nbsp;&amp;nbsp;&amp;nbsp; col2) ($);&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp; id1&amp;nbsp;&amp;nbsp;&amp;nbsp; desc1&lt;/P&gt;&lt;P&gt;5&amp;nbsp;&amp;nbsp;&amp;nbsp; id2&amp;nbsp;&amp;nbsp;&amp;nbsp; desc3&lt;/P&gt;&lt;P&gt;3&amp;nbsp;&amp;nbsp;&amp;nbsp; id1&amp;nbsp;&amp;nbsp;&amp;nbsp; desc1&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data new;&lt;/P&gt;&lt;P&gt;input (id&amp;nbsp;&amp;nbsp;&amp;nbsp; col1&amp;nbsp;&amp;nbsp;&amp;nbsp; col2) ($);&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;3&amp;nbsp;&amp;nbsp;&amp;nbsp; id1&amp;nbsp;&amp;nbsp;&amp;nbsp; desc2&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;proc sort data=have;&lt;/P&gt;&lt;P&gt;by id&amp;nbsp; col1;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;data have ; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; update have(in=a) new(in=b) ; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; by id col1; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if a ; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; run ; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;or&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql ; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; update have m &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; set col2 = (select col2 from new r &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;&amp;nbsp; where m.id = r.id &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;&amp;nbsp; and m.col1=r.col1) &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; where m.id in (select id from new) ; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; quit ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Shiva&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 10 Jul 2012 04:10:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/sql/m-p/103190#M28918</guid>
      <dc:creator>shivas</dc:creator>
      <dc:date>2012-07-10T04:10:17Z</dc:date>
    </item>
    <item>
      <title>Re: sql</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/sql/m-p/103191#M28919</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;If you are updating / appending a small number of records in your large dataset then using MODIFY may be the most efficient technique. And if you haven't done so already, I would recommend creating an index on COL1 in your master dataset.&amp;nbsp; Below are 2 examples of updating the master dataset (indexed) using MODIFY, the 2nd example is likely to be fastest if your transaction dataset is small.&amp;nbsp; There's a good paper on using MODIFY at &lt;A href="http://www2.sas.com/proceedings/sugi31/264-31.pdf"&gt;http://www2.sas.com/proceedings/sugi31/264-31.pdf&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have (index=(col1));&lt;/P&gt;&lt;P&gt;input (id col1 col2) ($);&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;5 id2 desc3&lt;/P&gt;&lt;P&gt;1 id1 desc1&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data new;&lt;/P&gt;&lt;P&gt;input (id col1 col2) ($);&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;4 id3 desc4&lt;/P&gt;&lt;P&gt;3 id1 desc2&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* example 1 */&lt;/P&gt;&lt;P&gt;data have ;&lt;/P&gt;&lt;P&gt;modify have new (rename=(id=id_new col2=col2_new));&lt;/P&gt;&lt;P&gt;by col1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; select (_iorc_);&lt;/P&gt;&lt;P&gt;&amp;nbsp; when (%sysrc(_sok)) do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; col2=col2_new;&lt;/P&gt;&lt;P&gt;&amp;nbsp; replace;&lt;/P&gt;&lt;P&gt;&amp;nbsp; id=id_new;&lt;/P&gt;&lt;P&gt;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; when (%sysrc(_dsenmr)) do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; id=id_new;&lt;/P&gt;&lt;P&gt;&amp;nbsp; col2=col2_new;&lt;/P&gt;&lt;P&gt;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp; _error_=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;otherwise end;&lt;/P&gt;&lt;P&gt;run ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* example 2 */&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;set new (rename=(id=id_new col2=col2_new));&lt;/P&gt;&lt;P&gt;modify have key=col1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; select (_iorc_);&lt;/P&gt;&lt;P&gt;&amp;nbsp; when (%sysrc(_sok)) do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; col2=col2_new;&lt;/P&gt;&lt;P&gt;&amp;nbsp; replace;&lt;/P&gt;&lt;P&gt;&amp;nbsp; id=id_new;&lt;/P&gt;&lt;P&gt;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; when (%sysrc(_dsenom)) do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; id=id_new;&lt;/P&gt;&lt;P&gt;&amp;nbsp; col2=col2_new;&lt;/P&gt;&lt;P&gt;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp; _error_=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;otherwise end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Message was edited by: Keith Timms Sorry, just realised that this method only works properly where the values for COL1 are unique in the master dataset.&amp;nbsp; I'll have a look to see if I can get it working where duplicate values exist.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 10 Jul 2012 09:08:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/sql/m-p/103191#M28919</guid>
      <dc:creator>Keith</dc:creator>
      <dc:date>2012-07-10T09:08:49Z</dc:date>
    </item>
  </channel>
</rss>

