<?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 translate sas data step to proc sql in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/translate-sas-data-step-to-proc-sql/m-p/54630#M15158</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Well, there are something in your code I don't quite undertand.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;if a and not b then&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DIAS_ATRASO_ATUAL = DIAS_ATRASO_0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RISCO_TOTAL_ATUAL = RISCO_TOT_ATUAL;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DIAS_ATRASO_0 and RISCO_TOT_ATUAL only exists in 'have2(in= b)', when you 'if a and not b', DIAS_ATRASO_0 and RISCO_TOT_ATUAL will always be missing. So is this a typo? Same thing happens to the code downstairs as well.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Any way, what you were asking is quite doable using a combination of joins and unions in SQL. I have attached a sample code using sashelp.class to show the basic ideas, and hopefully can help you tackle your real life data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data first15 last15;&lt;/P&gt;&lt;P&gt;set sashelp.class nobs=nobs;&lt;/P&gt;&lt;P&gt;if _n_&amp;lt;=15 then output first15;&lt;/P&gt;&lt;P&gt;if _n_&amp;gt;=nobs-14 then output last15;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;create table want as&lt;/P&gt;&lt;P&gt;select distinct * from&lt;/P&gt;&lt;P&gt;(select a.*, (a.age+b.age) as n_age from first15 a, last15 b where a.name=b.name)&lt;/P&gt;&lt;P&gt;union&lt;/P&gt;&lt;P&gt;(select a.*, (a.age*10) as n_age from first15 a where a.name not in&lt;/P&gt;&lt;P&gt; (select name from last15))&lt;/P&gt;&lt;P&gt; union&lt;/P&gt;&lt;P&gt; (select b.*, (b.age/10) as n_age from last15 b&amp;nbsp; where b.name not in&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; (select name from first15))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; ;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Haikuo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Feb 2012 18:20:30 GMT</pubDate>
    <dc:creator>Haikuo</dc:creator>
    <dc:date>2012-02-15T18:20:30Z</dc:date>
    <item>
      <title>translate sas data step to proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/translate-sas-data-step-to-proc-sql/m-p/54629#M15157</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Guys,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I need to translate this merge data step code to proc sql, is there anyone to help me with it, please?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;for table have1 I have this structure:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CLIENTE&lt;/P&gt;&lt;P&gt;COD_GRUPO_ATUAL&lt;/P&gt;&lt;P&gt;COD_SEG_ATUAL &lt;/P&gt;&lt;P&gt;CPFCNPJ&lt;/P&gt;&lt;P&gt;DIAS_ATRASO_1&lt;/P&gt;&lt;P&gt;GRUPO_ATUAL 2&lt;/P&gt;&lt;P&gt;RISCO_MOROSO_ATUAL&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;for table have2 I have this structure&lt;/P&gt;&lt;P&gt;CLIENTE&lt;/P&gt;&lt;P&gt;COD_GRUPO_ATUAL&lt;/P&gt;&lt;P&gt;COD_SEG_ATUAL&lt;/P&gt;&lt;P&gt;CPFCNPJ&lt;/P&gt;&lt;P&gt;DIAS_ATRASO_0&lt;/P&gt;&lt;P&gt;GRUPO_ATUAL 2&lt;/P&gt;&lt;P&gt;RISCO_TOT_ATUAL&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want (compress = yes&amp;nbsp; &lt;/P&gt;&lt;P&gt;keep = CPFCNPJ CLIENTE COD_GRUPO_ATUAL GRUPO_ATUAL &lt;/P&gt;&lt;P&gt;COD_SEG_ATUAL RISCO_TOTAL_ATUAL DIAS_ATRASO_ATUAL RISCO_MOROSO_ATUAL);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;merge have1 (in = a)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; have2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (in = b);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; by CPFCNPJ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if a and b then&lt;BR /&gt;&amp;nbsp;&amp;nbsp; do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DIAS_ATRASO_ATUAL = DIAS_ATRASO_1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RISCO_TOTAL_ATUAL = RISCO_TOT_ATUAL + RISCO_MOROSO_ATUAL;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; else&lt;BR /&gt;&amp;nbsp;&amp;nbsp; do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if a and not b then&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DIAS_ATRASO_ATUAL = DIAS_ATRASO_0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RISCO_TOTAL_ATUAL = RISCO_TOT_ATUAL;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not a and b then&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DIAS_ATRASO_ATUAL = DIAS_ATRASO_1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RISCO_TOTAL_ATUAL = RISCO_MOROSO_ATUAL;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Feb 2012 17:00:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/translate-sas-data-step-to-proc-sql/m-p/54629#M15157</guid>
      <dc:creator>Augusto</dc:creator>
      <dc:date>2012-02-15T17:00:24Z</dc:date>
    </item>
    <item>
      <title>translate sas data step to proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/translate-sas-data-step-to-proc-sql/m-p/54630#M15158</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Well, there are something in your code I don't quite undertand.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;if a and not b then&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DIAS_ATRASO_ATUAL = DIAS_ATRASO_0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RISCO_TOTAL_ATUAL = RISCO_TOT_ATUAL;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DIAS_ATRASO_0 and RISCO_TOT_ATUAL only exists in 'have2(in= b)', when you 'if a and not b', DIAS_ATRASO_0 and RISCO_TOT_ATUAL will always be missing. So is this a typo? Same thing happens to the code downstairs as well.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Any way, what you were asking is quite doable using a combination of joins and unions in SQL. I have attached a sample code using sashelp.class to show the basic ideas, and hopefully can help you tackle your real life data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data first15 last15;&lt;/P&gt;&lt;P&gt;set sashelp.class nobs=nobs;&lt;/P&gt;&lt;P&gt;if _n_&amp;lt;=15 then output first15;&lt;/P&gt;&lt;P&gt;if _n_&amp;gt;=nobs-14 then output last15;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;create table want as&lt;/P&gt;&lt;P&gt;select distinct * from&lt;/P&gt;&lt;P&gt;(select a.*, (a.age+b.age) as n_age from first15 a, last15 b where a.name=b.name)&lt;/P&gt;&lt;P&gt;union&lt;/P&gt;&lt;P&gt;(select a.*, (a.age*10) as n_age from first15 a where a.name not in&lt;/P&gt;&lt;P&gt; (select name from last15))&lt;/P&gt;&lt;P&gt; union&lt;/P&gt;&lt;P&gt; (select b.*, (b.age/10) as n_age from last15 b&amp;nbsp; where b.name not in&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; (select name from first15))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; ;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Haikuo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Feb 2012 18:20:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/translate-sas-data-step-to-proc-sql/m-p/54630#M15158</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2012-02-15T18:20:30Z</dc:date>
    </item>
    <item>
      <title>translate sas data step to proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/translate-sas-data-step-to-proc-sql/m-p/54631#M15159</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Something like such : &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;create table want as&lt;/P&gt;&lt;P&gt;select &lt;/P&gt;&lt;P&gt; coalesce(a.CPFCNPJ, b.CPFCNPJ) as CPFCNPJ, &lt;/P&gt;&lt;P&gt; coalesce(a.CLIENTE, b.CLIENTE) as CLIENTE, &lt;/P&gt;&lt;P&gt; coalesce(a.COD_GRUPO_ATUAL, b.COD_GRUPO_ATUAL) as COD_GRUPO_ATUAL,&lt;/P&gt;&lt;P&gt; coalesce(a.COD_SEG_ATUAL, b.COD_SEG_ATUAL) as COD_SEG_ATUAL, &lt;/P&gt;&lt;P&gt; coalesce(RISCO_TOT_ATUAL, 0) + coalesce(RISCO_MOROSO_ATUAL, 0) as RISCO_TOTAL_ATUAL, &lt;/P&gt;&lt;P&gt; coalesce(DIAS_ATRASO_1, DIAS_ATRASO_0) as DIAS_ATRASO_ATUAL,&lt;/P&gt;&lt;P&gt; RISCO_MOROSO_ATUAL&lt;/P&gt;&lt;P&gt;from have1 as a full join have2 as b on a.CPFCNPJ=b.CPFCNPJ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;should do the job.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PG&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Feb 2012 20:33:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/translate-sas-data-step-to-proc-sql/m-p/54631#M15159</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2012-02-15T20:33:26Z</dc:date>
    </item>
    <item>
      <title>translate sas data step to proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/translate-sas-data-step-to-proc-sql/m-p/54632#M15160</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Or simpler yet, a rare opportunity to use a &lt;STRONG&gt;natural full join &lt;/STRONG&gt;:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;create table want as&lt;/P&gt;&lt;P&gt;select CPFCNPJ, CLIENTE, COD_GRUPO_ATUAL, COD_SEG_ATUAL, &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sum(RISCO_TOT_ATUAL, RISCO_MOROSO_ATUAL) as RISCO_TOTAL_ATUAL, &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; coalesce(DIAS_ATRASO_1, DIAS_ATRASO_0) as DIAS_ATRASO_ATUAL,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RISCO_MOROSO_ATUAL&lt;/P&gt;&lt;P&gt;from have1 natural full join have2;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PG&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Feb 2012 21:03:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/translate-sas-data-step-to-proc-sql/m-p/54632#M15160</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2012-02-16T21:03:23Z</dc:date>
    </item>
    <item>
      <title>translate sas data step to proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/translate-sas-data-step-to-proc-sql/m-p/54633#M15161</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt; tks PGStats&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 24 Feb 2012 13:18:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/translate-sas-data-step-to-proc-sql/m-p/54633#M15161</guid>
      <dc:creator>Augusto</dc:creator>
      <dc:date>2012-02-24T13:18:46Z</dc:date>
    </item>
  </channel>
</rss>

