<?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 How to turn data from vertical to horizontal using an array in SAS Data Management</title>
    <link>https://communities.sas.com/t5/SAS-Data-Management/How-to-turn-data-from-vertical-to-horizontal-using-an-array/m-p/723076#M19821</link>
    <description>&lt;P&gt;I am trying to take the following dataset:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Parent ID&amp;nbsp; DOB&amp;nbsp; Zip Country&lt;/P&gt;&lt;P&gt;123&amp;nbsp; 201303&amp;nbsp; 93490&amp;nbsp; US&lt;/P&gt;&lt;P&gt;123&amp;nbsp; 201107&amp;nbsp; 93940&amp;nbsp; US&lt;/P&gt;&lt;P&gt;123&amp;nbsp; 200912&amp;nbsp; 93940&amp;nbsp; US&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;and turn it into&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;123&amp;nbsp; 201303 93490 US 201107 93940 US 200912 93940 US&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I tried this:&lt;/P&gt;&lt;P&gt;ARRAY ZIP {*} $ ZIP1-ZIP4;&lt;BR /&gt;ARRAY CNTRY {*} $ CNTRY1-CNTRY4;&lt;BR /&gt;ARRAY DOB_ {*} $ DOB1-DOB4;&lt;BR /&gt;IF FIRST.ID &amp;amp; LAST.ID THEN DO;&lt;BR /&gt;ZIP1 = ADD_ZIP; CNTRY1 = ADD_CNTRY;&lt;BR /&gt;DOB1 = DOB;&lt;BR /&gt;END;&lt;BR /&gt;ELSE DO UNTIL (LAST.ID);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;DO X = 1 TO DIM(ZIP);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ZIP{X} = ADD_ZIP; DOB_{X} = DOB; CNTRY{X}=ADD_CNTRY;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;END;&lt;BR /&gt;END;&lt;BR /&gt;IF LAST.ID THEN OUTPUT;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This does not work - I ID had two distinct records and it returned ZIP1-ZIP4, DOB1-DOB4, CNTRY1-CNTRY4 instead of just 1st block and 2nd block with data and blocks 3 and 4 empty.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I know that somehow I need to advance ID to next line as X increases, but I am lost.&amp;nbsp; Help, please ?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Scott, from Calif.&lt;/P&gt;</description>
    <pubDate>Wed, 03 Mar 2021 04:03:45 GMT</pubDate>
    <dc:creator>SSeg</dc:creator>
    <dc:date>2021-03-03T04:03:45Z</dc:date>
    <item>
      <title>How to turn data from vertical to horizontal using an array</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/How-to-turn-data-from-vertical-to-horizontal-using-an-array/m-p/723076#M19821</link>
      <description>&lt;P&gt;I am trying to take the following dataset:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Parent ID&amp;nbsp; DOB&amp;nbsp; Zip Country&lt;/P&gt;&lt;P&gt;123&amp;nbsp; 201303&amp;nbsp; 93490&amp;nbsp; US&lt;/P&gt;&lt;P&gt;123&amp;nbsp; 201107&amp;nbsp; 93940&amp;nbsp; US&lt;/P&gt;&lt;P&gt;123&amp;nbsp; 200912&amp;nbsp; 93940&amp;nbsp; US&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;and turn it into&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;123&amp;nbsp; 201303 93490 US 201107 93940 US 200912 93940 US&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I tried this:&lt;/P&gt;&lt;P&gt;ARRAY ZIP {*} $ ZIP1-ZIP4;&lt;BR /&gt;ARRAY CNTRY {*} $ CNTRY1-CNTRY4;&lt;BR /&gt;ARRAY DOB_ {*} $ DOB1-DOB4;&lt;BR /&gt;IF FIRST.ID &amp;amp; LAST.ID THEN DO;&lt;BR /&gt;ZIP1 = ADD_ZIP; CNTRY1 = ADD_CNTRY;&lt;BR /&gt;DOB1 = DOB;&lt;BR /&gt;END;&lt;BR /&gt;ELSE DO UNTIL (LAST.ID);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;DO X = 1 TO DIM(ZIP);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ZIP{X} = ADD_ZIP; DOB_{X} = DOB; CNTRY{X}=ADD_CNTRY;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;END;&lt;BR /&gt;END;&lt;BR /&gt;IF LAST.ID THEN OUTPUT;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This does not work - I ID had two distinct records and it returned ZIP1-ZIP4, DOB1-DOB4, CNTRY1-CNTRY4 instead of just 1st block and 2nd block with data and blocks 3 and 4 empty.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I know that somehow I need to advance ID to next line as X increases, but I am lost.&amp;nbsp; Help, please ?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Scott, from Calif.&lt;/P&gt;</description>
      <pubDate>Wed, 03 Mar 2021 04:03:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/How-to-turn-data-from-vertical-to-horizontal-using-an-array/m-p/723076#M19821</guid>
      <dc:creator>SSeg</dc:creator>
      <dc:date>2021-03-03T04:03:45Z</dc:date>
    </item>
    <item>
      <title>Re: How to turn data from vertical to horizontal using an array</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/How-to-turn-data-from-vertical-to-horizontal-using-an-array/m-p/723084#M19822</link>
      <description>&lt;P&gt;I have adapted your code to fix it:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want(drop=i dob add_zip add_cntry);
 set have;
    retain i zip1-zip4 CNTRY1-CNTRY4 DOB1-DOB4;
	ARRAY ZIP {*} $ ZIP1-ZIP4;
	ARRAY CNTRY {*} $ CNTRY1-CNTRY4;
	ARRAY DOB_ {*} $ DOB1-DOB4;
	
	if first.ID then do; 
	   i=1;
	   call missing(of zip(*));
	   call missing(of cntry(*));
	   call missing(of dob_(*));
	end;
	ZIP(i) = ADD_ZIP; 
	CNTRY(i) = ADD_CNTRY;
	DOB_(i) = DOB;
	IF LAST.ID THEN OUTPUT;&lt;BR /&gt;    i+1;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 03 Mar 2021 07:23:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/How-to-turn-data-from-vertical-to-horizontal-using-an-array/m-p/723084#M19822</guid>
      <dc:creator>Shmuel</dc:creator>
      <dc:date>2021-03-03T07:23:09Z</dc:date>
    </item>
  </channel>
</rss>

