<?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 Using Two-Dimentional Arrays to Transpose data in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Using-Two-Dimentional-Arrays-to-Transpose-data/m-p/930276#M366000</link>
    <description>&lt;P&gt;I have a dataset that I am trying to use a multi-dimensional array to transpose the data from 2 variables, however I am having issues because the array not only needs to be dynamic, but also allow me to group certain records together using multiple variables.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is my source table:&lt;/P&gt;
&lt;TABLE width="283"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="22"&gt;id&amp;nbsp;&lt;/TD&gt;
&lt;TD width="83"&gt;action_date&amp;nbsp;&lt;/TD&gt;
&lt;TD width="89"&gt;status&lt;/TD&gt;
&lt;TD width="89"&gt;&amp;nbsp;status_date&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;01/01/2024&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;01/01/2024&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;01/01/2024&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;02/01/2024&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;01/01/2024&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;03/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;01/01/2024&lt;/TD&gt;
&lt;TD&gt;C&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;04/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;01/01/2024&lt;/TD&gt;
&lt;TD&gt;D&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;05/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;01/01/2024&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;01/01/2024&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;01/01/2024&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;02/01/2024&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;01/01/2024&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;03/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;01/01/2024&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;04/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;01/01/2024&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;05/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;25/01/2024&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;25/01/2024&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;25/01/2024&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;26/01/2024&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;25/01/2024&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;27/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;25/01/2024&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;28/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;25/01/2024&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;29/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;55&lt;/TD&gt;
&lt;TD&gt;26/01/2024&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;26/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;55&lt;/TD&gt;
&lt;TD&gt;26/01/2024&lt;/TD&gt;
&lt;TD&gt;D&lt;/TD&gt;
&lt;TD&gt;27/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;55&lt;/TD&gt;
&lt;TD&gt;26/01/2024&lt;/TD&gt;
&lt;TD&gt;D&lt;/TD&gt;
&lt;TD&gt;28/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As you will see:&lt;/P&gt;
&lt;P&gt;ID1 has 10 rows with 2 x different action_dates&lt;/P&gt;
&lt;P&gt;ID2 has 5 rows with 1 x action date&lt;/P&gt;
&lt;P&gt;ID55 only has 3 rows all with the same action date.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;* Note: &lt;STRONG&gt;status&lt;/STRONG&gt; and &lt;STRONG&gt;status_date&lt;/STRONG&gt; are the variables I want to transpose into adjacent columns (i.e. status1, status_date1,&amp;nbsp;status2, status_date2,&amp;nbsp;status3, status_date3 etc.)&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;* Note: The same &lt;STRONG&gt;ID&lt;/STRONG&gt; can appear more than once - I want these to be treated independently, grouping by the &lt;STRONG&gt;action_date&lt;/STRONG&gt; for that &lt;STRONG&gt;ID&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;* Note: Some ID's dont always have 5 rows which is why I need the array to be dynamic to ensure the output is consistent. (As displayed in the example below - if the ID only has 3 rows out of the maximum 5 I want it to populate the first 3 columns and leave the last 2 blank.)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is my desired output:&lt;/P&gt;
&lt;TABLE width="997px"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="40px"&gt;id&amp;nbsp;&lt;/TD&gt;
&lt;TD width="98.1076px"&gt;action_date&amp;nbsp;&lt;/TD&gt;
&lt;TD width="61.875px"&gt;status1&lt;/TD&gt;
&lt;TD width="104.115px"&gt;&amp;nbsp;status_date1&lt;/TD&gt;
&lt;TD width="65.0694px"&gt;status2&lt;/TD&gt;
&lt;TD width="107.465px"&gt;&amp;nbsp;status_date2&lt;/TD&gt;
&lt;TD width="65.2604px"&gt;status3&lt;/TD&gt;
&lt;TD width="107.656px"&gt;&amp;nbsp;status_date3&lt;/TD&gt;
&lt;TD width="66.3715px"&gt;status4&lt;/TD&gt;
&lt;TD width="108.854px"&gt;&amp;nbsp;status_date4&lt;/TD&gt;
&lt;TD width="65.2083px"&gt;status5&lt;/TD&gt;
&lt;TD width="107.604px"&gt;&amp;nbsp;status_date5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px"&gt;1&lt;/TD&gt;
&lt;TD width="98.1076px"&gt;01/01/2024&lt;/TD&gt;
&lt;TD width="61.875px"&gt;A&lt;/TD&gt;
&lt;TD width="104.115px"&gt;&amp;nbsp;01/01/2024&lt;/TD&gt;
&lt;TD width="65.0694px"&gt;A&lt;/TD&gt;
&lt;TD width="107.465px"&gt;&amp;nbsp;02/01/2024&amp;nbsp;&lt;/TD&gt;
&lt;TD width="65.2604px"&gt;B&lt;/TD&gt;
&lt;TD width="107.656px"&gt;&amp;nbsp;03/01/2024&lt;/TD&gt;
&lt;TD width="66.3715px"&gt;C&lt;/TD&gt;
&lt;TD width="108.854px"&gt;04/01/2024&lt;/TD&gt;
&lt;TD width="65.2083px"&gt;D&lt;/TD&gt;
&lt;TD width="107.604px"&gt;05/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px"&gt;2&lt;/TD&gt;
&lt;TD width="98.1076px"&gt;01/01/2024&lt;/TD&gt;
&lt;TD width="61.875px"&gt;A&lt;/TD&gt;
&lt;TD width="104.115px"&gt;&amp;nbsp;01/01/2024&lt;/TD&gt;
&lt;TD width="65.0694px"&gt;A&lt;/TD&gt;
&lt;TD width="107.465px"&gt;&amp;nbsp;02/01/2024&amp;nbsp;&lt;/TD&gt;
&lt;TD width="65.2604px"&gt;A&lt;/TD&gt;
&lt;TD width="107.656px"&gt;&amp;nbsp;03/01/2024&lt;/TD&gt;
&lt;TD width="66.3715px"&gt;A&lt;/TD&gt;
&lt;TD width="108.854px"&gt;04/01/2024&lt;/TD&gt;
&lt;TD width="65.2083px"&gt;A&lt;/TD&gt;
&lt;TD width="107.604px"&gt;05/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px"&gt;1&lt;/TD&gt;
&lt;TD width="98.1076px"&gt;25/01/2024&lt;/TD&gt;
&lt;TD width="61.875px"&gt;A&lt;/TD&gt;
&lt;TD width="104.115px"&gt;25/01/2024&lt;/TD&gt;
&lt;TD width="65.0694px"&gt;A&lt;/TD&gt;
&lt;TD width="107.465px"&gt;26/01/2024&lt;/TD&gt;
&lt;TD width="65.2604px"&gt;A&lt;/TD&gt;
&lt;TD width="107.656px"&gt;27/01/2024&lt;/TD&gt;
&lt;TD width="66.3715px"&gt;A&lt;/TD&gt;
&lt;TD width="108.854px"&gt;28/01/2024&lt;/TD&gt;
&lt;TD width="65.2083px"&gt;A&lt;/TD&gt;
&lt;TD width="107.604px"&gt;28/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px"&gt;55&lt;/TD&gt;
&lt;TD width="98.1076px"&gt;26/01/2024&lt;/TD&gt;
&lt;TD width="61.875px"&gt;A&lt;/TD&gt;
&lt;TD width="104.115px"&gt;26/01/2024&lt;/TD&gt;
&lt;TD width="65.0694px"&gt;D&lt;/TD&gt;
&lt;TD width="107.465px"&gt;27/01/2024&lt;/TD&gt;
&lt;TD width="65.2604px"&gt;D&lt;/TD&gt;
&lt;TD width="107.656px"&gt;28/01/2024&lt;/TD&gt;
&lt;TD width="66.3715px"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="108.854px"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="65.2083px"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="107.604px"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is my starting array code.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data output; 
	set input; 
	array status[5] $2. status_1-status_5; 
	array status_day[5] status_day_1-status_day_5; 
	format status_day_1-status_day_5 date9.;

	do i = 1 to 5; 
		status[i] = status;
		status_day[i] = status_day;
	end; 

run; &lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Thu, 30 May 2024 13:52:31 GMT</pubDate>
    <dc:creator>sasheadache</dc:creator>
    <dc:date>2024-05-30T13:52:31Z</dc:date>
    <item>
      <title>Using Two-Dimentional Arrays to Transpose data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-Two-Dimentional-Arrays-to-Transpose-data/m-p/930276#M366000</link>
      <description>&lt;P&gt;I have a dataset that I am trying to use a multi-dimensional array to transpose the data from 2 variables, however I am having issues because the array not only needs to be dynamic, but also allow me to group certain records together using multiple variables.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is my source table:&lt;/P&gt;
&lt;TABLE width="283"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="22"&gt;id&amp;nbsp;&lt;/TD&gt;
&lt;TD width="83"&gt;action_date&amp;nbsp;&lt;/TD&gt;
&lt;TD width="89"&gt;status&lt;/TD&gt;
&lt;TD width="89"&gt;&amp;nbsp;status_date&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;01/01/2024&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;01/01/2024&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;01/01/2024&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;02/01/2024&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;01/01/2024&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;03/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;01/01/2024&lt;/TD&gt;
&lt;TD&gt;C&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;04/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;01/01/2024&lt;/TD&gt;
&lt;TD&gt;D&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;05/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;01/01/2024&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;01/01/2024&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;01/01/2024&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;02/01/2024&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;01/01/2024&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;03/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;01/01/2024&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;04/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;01/01/2024&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;05/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;25/01/2024&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;25/01/2024&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;25/01/2024&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;26/01/2024&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;25/01/2024&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;27/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;25/01/2024&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;28/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;25/01/2024&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;29/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;55&lt;/TD&gt;
&lt;TD&gt;26/01/2024&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;26/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;55&lt;/TD&gt;
&lt;TD&gt;26/01/2024&lt;/TD&gt;
&lt;TD&gt;D&lt;/TD&gt;
&lt;TD&gt;27/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;55&lt;/TD&gt;
&lt;TD&gt;26/01/2024&lt;/TD&gt;
&lt;TD&gt;D&lt;/TD&gt;
&lt;TD&gt;28/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As you will see:&lt;/P&gt;
&lt;P&gt;ID1 has 10 rows with 2 x different action_dates&lt;/P&gt;
&lt;P&gt;ID2 has 5 rows with 1 x action date&lt;/P&gt;
&lt;P&gt;ID55 only has 3 rows all with the same action date.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;* Note: &lt;STRONG&gt;status&lt;/STRONG&gt; and &lt;STRONG&gt;status_date&lt;/STRONG&gt; are the variables I want to transpose into adjacent columns (i.e. status1, status_date1,&amp;nbsp;status2, status_date2,&amp;nbsp;status3, status_date3 etc.)&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;* Note: The same &lt;STRONG&gt;ID&lt;/STRONG&gt; can appear more than once - I want these to be treated independently, grouping by the &lt;STRONG&gt;action_date&lt;/STRONG&gt; for that &lt;STRONG&gt;ID&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;* Note: Some ID's dont always have 5 rows which is why I need the array to be dynamic to ensure the output is consistent. (As displayed in the example below - if the ID only has 3 rows out of the maximum 5 I want it to populate the first 3 columns and leave the last 2 blank.)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is my desired output:&lt;/P&gt;
&lt;TABLE width="997px"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="40px"&gt;id&amp;nbsp;&lt;/TD&gt;
&lt;TD width="98.1076px"&gt;action_date&amp;nbsp;&lt;/TD&gt;
&lt;TD width="61.875px"&gt;status1&lt;/TD&gt;
&lt;TD width="104.115px"&gt;&amp;nbsp;status_date1&lt;/TD&gt;
&lt;TD width="65.0694px"&gt;status2&lt;/TD&gt;
&lt;TD width="107.465px"&gt;&amp;nbsp;status_date2&lt;/TD&gt;
&lt;TD width="65.2604px"&gt;status3&lt;/TD&gt;
&lt;TD width="107.656px"&gt;&amp;nbsp;status_date3&lt;/TD&gt;
&lt;TD width="66.3715px"&gt;status4&lt;/TD&gt;
&lt;TD width="108.854px"&gt;&amp;nbsp;status_date4&lt;/TD&gt;
&lt;TD width="65.2083px"&gt;status5&lt;/TD&gt;
&lt;TD width="107.604px"&gt;&amp;nbsp;status_date5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px"&gt;1&lt;/TD&gt;
&lt;TD width="98.1076px"&gt;01/01/2024&lt;/TD&gt;
&lt;TD width="61.875px"&gt;A&lt;/TD&gt;
&lt;TD width="104.115px"&gt;&amp;nbsp;01/01/2024&lt;/TD&gt;
&lt;TD width="65.0694px"&gt;A&lt;/TD&gt;
&lt;TD width="107.465px"&gt;&amp;nbsp;02/01/2024&amp;nbsp;&lt;/TD&gt;
&lt;TD width="65.2604px"&gt;B&lt;/TD&gt;
&lt;TD width="107.656px"&gt;&amp;nbsp;03/01/2024&lt;/TD&gt;
&lt;TD width="66.3715px"&gt;C&lt;/TD&gt;
&lt;TD width="108.854px"&gt;04/01/2024&lt;/TD&gt;
&lt;TD width="65.2083px"&gt;D&lt;/TD&gt;
&lt;TD width="107.604px"&gt;05/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px"&gt;2&lt;/TD&gt;
&lt;TD width="98.1076px"&gt;01/01/2024&lt;/TD&gt;
&lt;TD width="61.875px"&gt;A&lt;/TD&gt;
&lt;TD width="104.115px"&gt;&amp;nbsp;01/01/2024&lt;/TD&gt;
&lt;TD width="65.0694px"&gt;A&lt;/TD&gt;
&lt;TD width="107.465px"&gt;&amp;nbsp;02/01/2024&amp;nbsp;&lt;/TD&gt;
&lt;TD width="65.2604px"&gt;A&lt;/TD&gt;
&lt;TD width="107.656px"&gt;&amp;nbsp;03/01/2024&lt;/TD&gt;
&lt;TD width="66.3715px"&gt;A&lt;/TD&gt;
&lt;TD width="108.854px"&gt;04/01/2024&lt;/TD&gt;
&lt;TD width="65.2083px"&gt;A&lt;/TD&gt;
&lt;TD width="107.604px"&gt;05/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px"&gt;1&lt;/TD&gt;
&lt;TD width="98.1076px"&gt;25/01/2024&lt;/TD&gt;
&lt;TD width="61.875px"&gt;A&lt;/TD&gt;
&lt;TD width="104.115px"&gt;25/01/2024&lt;/TD&gt;
&lt;TD width="65.0694px"&gt;A&lt;/TD&gt;
&lt;TD width="107.465px"&gt;26/01/2024&lt;/TD&gt;
&lt;TD width="65.2604px"&gt;A&lt;/TD&gt;
&lt;TD width="107.656px"&gt;27/01/2024&lt;/TD&gt;
&lt;TD width="66.3715px"&gt;A&lt;/TD&gt;
&lt;TD width="108.854px"&gt;28/01/2024&lt;/TD&gt;
&lt;TD width="65.2083px"&gt;A&lt;/TD&gt;
&lt;TD width="107.604px"&gt;28/01/2024&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px"&gt;55&lt;/TD&gt;
&lt;TD width="98.1076px"&gt;26/01/2024&lt;/TD&gt;
&lt;TD width="61.875px"&gt;A&lt;/TD&gt;
&lt;TD width="104.115px"&gt;26/01/2024&lt;/TD&gt;
&lt;TD width="65.0694px"&gt;D&lt;/TD&gt;
&lt;TD width="107.465px"&gt;27/01/2024&lt;/TD&gt;
&lt;TD width="65.2604px"&gt;D&lt;/TD&gt;
&lt;TD width="107.656px"&gt;28/01/2024&lt;/TD&gt;
&lt;TD width="66.3715px"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="108.854px"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="65.2083px"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="107.604px"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is my starting array code.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data output; 
	set input; 
	array status[5] $2. status_1-status_5; 
	array status_day[5] status_day_1-status_day_5; 
	format status_day_1-status_day_5 date9.;

	do i = 1 to 5; 
		status[i] = status;
		status_day[i] = status_day;
	end; 

run; &lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 30 May 2024 13:52:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-Two-Dimentional-Arrays-to-Transpose-data/m-p/930276#M366000</guid>
      <dc:creator>sasheadache</dc:creator>
      <dc:date>2024-05-30T13:52:31Z</dc:date>
    </item>
    <item>
      <title>Re: Using Two-Dimentional Arrays to Transpose data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-Two-Dimentional-Arrays-to-Transpose-data/m-p/930280#M366003</link>
      <description>&lt;P&gt;What is Status_day supposed to represent? You do not show it in your Input data set and then attempt to assign values of Status_day to other variables?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can't have an array named Status as&amp;nbsp; you already have a variable named Status.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;data have;
  input id  	action_date :ddmmyy10. 	status $ 	 status_date :ddmmyy10.;
  format action_date  status_date ddmmyy10. ;
datalines;
1 	01/01/2024 	A 	 01/01/2024 
1 	01/01/2024 	A 	 02/01/2024 
1 	01/01/2024 	B 	 03/01/2024
1 	01/01/2024 	C 	 04/01/2024
1 	01/01/2024 	D 	 05/01/2024
2 	01/01/2024 	A 	 01/01/2024 
2 	01/01/2024 	A 	 02/01/2024 
2 	01/01/2024 	A 	 03/01/2024
2 	01/01/2024 	A 	 04/01/2024
2 	01/01/2024 	A 	 05/01/2024
1 	25/01/2024 	A 	 25/01/2024 
1 	25/01/2024 	A 	 26/01/2024 
1 	25/01/2024 	A 	 27/01/2024
1 	25/01/2024 	A 	 28/01/2024
1 	25/01/2024 	A 	 29/01/2024
55 	26/01/2024 	A 	26/01/2024
55 	26/01/2024 	D 	27/01/2024
55 	26/01/2024 	D 	28/01/2024
;

proc sort data=have;
  by id action_date status_date;
run;

data want; 
	set have; 
   by id action_date;
	array st[5] $2. status_1-status_5; 
	array status_day[5] status_day_1-status_day_5; 
	format status_day_1-status_day_5 date9.;
   retain  status_1-status_5  status_day_1-status_day_5 counter;
   if first.action_date then counter=1;
   else counter+1;
   st[counter]=status;
   status_day[counter]=status_date;
   if last.action_date then do; 
      output;
      call missing(of status_1-status_5, of status_day_1-status_day_5);
   end;
   keep id action_date  status_1-status_5  status_day_1-status_day_5;
run;

&lt;/PRE&gt;
&lt;P&gt;Arrays only exist for a single observation. Since you want to have the same array values across observations then all the values need to be RETAINed so they will persist. Which also means that you have to take responsibility for cleaning up the array values.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I sorted the data so there wasn't any ambiguity about ID Action_date combinations.&lt;/P&gt;
&lt;P&gt;When you use a BY statement in a data step then SAS creates automatic variables, referenced with First.variablename and Last.Variable name that have values 1 (true) and 0 (false) indicating whether the current observation is the first or last of a by group. So those can be used to reset values at a change (the first of an Action_date group in this case for the variable counter used to indicate which row of data in the group is being processed) and to write out the result when the Last.Action_date as well as reset the arrays to missing after writing to the output set.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Now, what can you do with the second data set that you can't do with the first? Since the array had to be "dynamic" , isn't actually as you set the size to 5. Fine if you know that there will never be more than 5 status_date for an action_date but will require recoding everytime that changes.&lt;/P&gt;
&lt;P&gt;More "dynamic"&lt;/P&gt;
&lt;PRE&gt;proc transpose data=have out=transstatus(drop=_name_)
      prefix=Status_;
   by id action_date;
   var status;
run;


proc transpose data=have out=transdate(drop=_name_)
      prefix=Status_day_;
   by id action_date;
   var Status_date;
run;


data dynamicwant;
   merge transstatus  transdate;
   by id action_date;
run;
&lt;/PRE&gt;</description>
      <pubDate>Thu, 30 May 2024 14:32:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-Two-Dimentional-Arrays-to-Transpose-data/m-p/930280#M366003</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2024-05-30T14:32:10Z</dc:date>
    </item>
    <item>
      <title>Re: Using Two-Dimentional Arrays to Transpose data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-Two-Dimentional-Arrays-to-Transpose-data/m-p/930283#M366006</link>
      <description>&lt;P&gt;Long beats wide. &lt;A href="https://communities.sas.com/t5/SAS-Communities-Library/Maxims-of-Maximally-Efficient-SAS-Programmers/ta-p/352068" target="_self"&gt;Maxim 19&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;For most SAS purposes, the long data set is a better layout than the wide data set. Why? Because most SAS data analysis PROCs work better on long data sets, and work poorly or not at all on the wide data set. And because as pointed out above, the result has to be re-programmed if you have a different number of columns.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So what is the benefit of this transpose? Both&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13884"&gt;@ballardw&lt;/a&gt;&amp;nbsp;and I would like to know.&lt;/P&gt;</description>
      <pubDate>Thu, 30 May 2024 14:38:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-Two-Dimentional-Arrays-to-Transpose-data/m-p/930283#M366006</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2024-05-30T14:38:28Z</dc:date>
    </item>
    <item>
      <title>Re: Using Two-Dimentional Arrays to Transpose data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-Two-Dimentional-Arrays-to-Transpose-data/m-p/930364#M366043</link>
      <description>&lt;P&gt;The most safe way (most slow way) is using DOUBLE proc transpose . Of course,I tend to use it if you don't have a big table.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  input id  	action_date :ddmmyy10. 	status $ 	 status_date :ddmmyy10.;
  format action_date  status_date ddmmyy10. ;
datalines;
1 	01/01/2024 	A 	 01/01/2024 
1 	01/01/2024 	A 	 02/01/2024 
1 	01/01/2024 	B 	 03/01/2024
1 	01/01/2024 	C 	 04/01/2024
1 	01/01/2024 	D 	 05/01/2024
2 	01/01/2024 	A 	 01/01/2024 
2 	01/01/2024 	A 	 02/01/2024 
2 	01/01/2024 	A 	 03/01/2024
2 	01/01/2024 	A 	 04/01/2024
2 	01/01/2024 	A 	 05/01/2024
1 	25/01/2024 	A 	 25/01/2024 
1 	25/01/2024 	A 	 26/01/2024 
1 	25/01/2024 	A 	 27/01/2024
1 	25/01/2024 	A 	 28/01/2024
1 	25/01/2024 	A 	 29/01/2024
55 	26/01/2024 	A 	26/01/2024
55 	26/01/2024 	D 	27/01/2024
55 	26/01/2024 	D 	28/01/2024
;
data temp;
 set have;
by id action_date notsorted;
if first.action_date then n=0;
n+1;
run;
proc transpose data=temp out=temp2;
by id action_date n notsorted;
var 	status 	 status_date;
run;
proc transpose data=temp2 out=want(drop=_name_);
by id action_date notsorted;
var col1;
id _name_ n;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 31 May 2024 03:02:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-Two-Dimentional-Arrays-to-Transpose-data/m-p/930364#M366043</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2024-05-31T03:02:56Z</dc:date>
    </item>
    <item>
      <title>Re: Using Two-Dimentional Arrays to Transpose data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-Two-Dimentional-Arrays-to-Transpose-data/m-p/930375#M366049</link>
      <description>Thanks! (Turns out I could have used proc transpose in the way I initially wanted before I ventured into Array's)</description>
      <pubDate>Fri, 31 May 2024 07:24:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-Two-Dimentional-Arrays-to-Transpose-data/m-p/930375#M366049</guid>
      <dc:creator>sasheadache</dc:creator>
      <dc:date>2024-05-31T07:24:10Z</dc:date>
    </item>
  </channel>
</rss>

