<?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 SAS 9.2 SQL:  How to copy values from one row to another by matching IDs in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/SAS-9-2-SQL-How-to-copy-values-from-one-row-to-another-by/m-p/207037#M267191</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am wanting to do a step in my program where it will fill in data from one row into another.&amp;nbsp; I can better explain this by showing what I have and what I would like to get to.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Have:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Parent_ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PR_ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Value1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Value2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Value3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Parent_Closure&lt;/P&gt;&lt;P&gt;123&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; 123&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 29&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01JAN2015&lt;/P&gt;&lt;P&gt;123&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; 153&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;&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; 45&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Want:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-size: 13.3333330154419px;"&gt;Parent_ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PR_ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Value1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Value2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Value3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-size: 13.3333330154419px;"&gt;Parent_Closure&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-size: 13.3333330154419px;"&gt;123&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; 123&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 29&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-size: 13.3333330154419px;"&gt;01JAN2015&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-size: 13.3333330154419px;"&gt;123&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; 153&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;&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; 45&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-size: 13.3333330154419px;"&gt;01JAN2015&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-size: 13.3333330154419px;"&gt;&lt;/P&gt;&lt;P style="font-size: 13.3333330154419px;"&gt;Thank you,&lt;/P&gt;&lt;P style="font-size: 13.3333330154419px;"&gt;Jeff S. O.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 25 Aug 2015 19:46:56 GMT</pubDate>
    <dc:creator>Jolly</dc:creator>
    <dc:date>2015-08-25T19:46:56Z</dc:date>
    <item>
      <title>SAS 9.2 SQL:  How to copy values from one row to another by matching IDs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SAS-9-2-SQL-How-to-copy-values-from-one-row-to-another-by/m-p/207037#M267191</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am wanting to do a step in my program where it will fill in data from one row into another.&amp;nbsp; I can better explain this by showing what I have and what I would like to get to.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Have:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Parent_ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PR_ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Value1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Value2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Value3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Parent_Closure&lt;/P&gt;&lt;P&gt;123&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; 123&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 29&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01JAN2015&lt;/P&gt;&lt;P&gt;123&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; 153&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;&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; 45&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Want:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-size: 13.3333330154419px;"&gt;Parent_ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PR_ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Value1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Value2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Value3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-size: 13.3333330154419px;"&gt;Parent_Closure&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-size: 13.3333330154419px;"&gt;123&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; 123&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 29&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-size: 13.3333330154419px;"&gt;01JAN2015&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-size: 13.3333330154419px;"&gt;123&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; 153&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;&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; 45&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-size: 13.3333330154419px;"&gt;01JAN2015&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-size: 13.3333330154419px;"&gt;&lt;/P&gt;&lt;P style="font-size: 13.3333330154419px;"&gt;Thank you,&lt;/P&gt;&lt;P style="font-size: 13.3333330154419px;"&gt;Jeff S. O.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 25 Aug 2015 19:46:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SAS-9-2-SQL-How-to-copy-values-from-one-row-to-another-by/m-p/207037#M267191</guid>
      <dc:creator>Jolly</dc:creator>
      <dc:date>2015-08-25T19:46:56Z</dc:date>
    </item>
    <item>
      <title>Re: SAS 9.2 SQL:  How to copy values from one row to another by matching IDs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SAS-9-2-SQL-How-to-copy-values-from-one-row-to-another-by/m-p/207038#M267192</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Here's a solution for your example.&amp;nbsp; I would test this with your real data to make sure it gets the desired output. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;infile cards dsd;&lt;/P&gt;&lt;P&gt;informat parent_closure date9.;&lt;/P&gt;&lt;P&gt;format parent_closure date9.;&lt;/P&gt;&lt;P&gt;input Parent_ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PR_ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Value1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Value2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Value3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Parent_Closure;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;123,123,12,29,,01JAN2015&lt;/P&gt;&lt;P&gt;123,153,,,45,&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 want;&lt;/P&gt;&lt;P&gt;set have;&lt;/P&gt;&lt;P&gt;by parent_id;&lt;/P&gt;&lt;P&gt;retain date;&lt;/P&gt;&lt;P&gt;if first.parent_id then date = parent_closure;&lt;/P&gt;&lt;P&gt;if missing(parent_closure) then parent_closure = date;&lt;/P&gt;&lt;P&gt;drop date;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 25 Aug 2015 20:19:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SAS-9-2-SQL-How-to-copy-values-from-one-row-to-another-by/m-p/207038#M267192</guid>
      <dc:creator>Steelers_In_DC</dc:creator>
      <dc:date>2015-08-25T20:19:31Z</dc:date>
    </item>
    <item>
      <title>Re: SAS 9.2 SQL:  How to copy values from one row to another by matching IDs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SAS-9-2-SQL-How-to-copy-values-from-one-row-to-another-by/m-p/225435#M267193</link>
      <description>&lt;P&gt;If you have an existing dataset with&amp;nbsp;bunch of missing values for Parent_Closure, and you&amp;nbsp;want&amp;nbsp;to resolve all of them in one fell swoop, you can do&amp;nbsp;something like this. It will attempt to update your entire dataset for which Parent_Closure is missing.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;OPTIONS sqlundopolicy=optional;
PROC SQL;
    UPDATE have AS table1
    SET Parent_Closure = (SELECT MAX(Parent_Closure)
                          FROM have AS table2
                          WHERE table1.Parent_ID = table2.Parent_ID)
    WHERE Parent_Closure IS NULL;
QUIT;
OPTIONS sqlundopolicy=required;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Once you have fixed historical data using the above, and you need to grow your dataset (with new observations), you could handle each new observation with the code below. Alternatively, you could keep re-running the above UPDATE statement to fix newly inserted rows.&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;/* assume you are working with single observation */
DATA one_row_of_new_data;
    Parent_ID = 123;
    PR_ID     = 153;
    Value1    = .;
    Value2    = .;
    Value3    = 45;
    Parent_Closure = .;
RUN; 


PROC SQL noprint;
    /* place the Parent_Closure value in a macro variable */
    SELECT MAX(Parent_Closure) 
    INTO :lookup_parent_closure
    FROM have
    WHERE Parent_ID = (SELECT Parent_ID FROM one_row_of_new_data);

    /* this assumes you are inserting a single observation too */
    INSERT INTO have (Parent_ID, PR_ID, Value1, Value2, Value3, Parent_Closure)
    SELECT            Parent_ID, PR_ID, Value1, Value2, Value3, &amp;amp;lookup_parent_closure
    FROM one_row_of_new_data;
RUN;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 14 Sep 2015 19:21:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SAS-9-2-SQL-How-to-copy-values-from-one-row-to-another-by/m-p/225435#M267193</guid>
      <dc:creator>hbi</dc:creator>
      <dc:date>2015-09-14T19:21:59Z</dc:date>
    </item>
  </channel>
</rss>

