<?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: Transpose in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124549#M25505</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;A __default_attr="392339" __jive_macro_name="user" class="jive_macro jive_macro_user" data-objecttype="3" href="https://communities.sas.com/"&gt;&lt;/A&gt;: Didn't work.&amp;nbsp; I included the call missing to ensure that the array was clear in the event that a record has some missing data.&amp;nbsp; Using a DOW loop, without the call, didn't appear to clear the array after each ID.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 18 Jan 2013 04:03:26 GMT</pubDate>
    <dc:creator>art297</dc:creator>
    <dc:date>2013-01-18T04:03:26Z</dc:date>
    <item>
      <title>Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124524#M25480</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;There are 700 million records. The columns are to transformed to this way:&lt;BR /&gt;id&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; date&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; ind1&amp;nbsp;&amp;nbsp; ind2&amp;nbsp;&amp;nbsp; ind3&amp;nbsp;&amp;nbsp; ind4&lt;BR /&gt;18010&amp;nbsp;&amp;nbsp;&amp;nbsp; Sep&amp;nbsp; 1 2011&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; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;18010&amp;nbsp;&amp;nbsp; Oct&amp;nbsp; 1 2011&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; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 &lt;BR /&gt;18010&amp;nbsp;&amp;nbsp; Nov&amp;nbsp; 1 2011&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; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;18010&amp;nbsp;&amp;nbsp; Dec&amp;nbsp; 1 2011&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; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;id&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; ind1_sep2011&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ind1_oct2011&amp;nbsp;&amp;nbsp; ind1_nov2011&amp;nbsp;&amp;nbsp; ind1_dec2011&amp;nbsp;&amp;nbsp; &lt;BR /&gt;18010&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&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; 0&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; 0&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; 1&lt;/P&gt;&lt;P&gt;For display purposes I just showed only ind1.What is the most efficient way to achive this format?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 14 Jan 2013 03:31:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124524#M25480</guid>
      <dc:creator>SASPhile</dc:creator>
      <dc:date>2013-01-14T03:31:01Z</dc:date>
    </item>
    <item>
      <title>Re: Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124525#M25481</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Are you sure that is what you want?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I would think that you would want something like:&lt;/P&gt;&lt;P&gt;id&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ind1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ind2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ind3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ind4&lt;/P&gt;&lt;P&gt;18010 1Dec2011&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; .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If not, aren't you also interested in the other three INDs and are the dates shown the only ones in your data?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 14 Jan 2013 04:43:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124525#M25481</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2013-01-14T04:43:27Z</dc:date>
    </item>
    <item>
      <title>Re: Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124526#M25482</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;There are fout indicators ind1--ind4 and there are 12 months.Sep2011--sep2012.All the dat columns have to be transposed thus making 48 columns plus id. Ind1 for sep2011 will be Ind_sep2011 ,ind1 for oct2011 will be ind1_oct2011 ...ind4_sep2012.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 14 Jan 2013 05:00:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124526#M25482</guid>
      <dc:creator>SASPhile</dc:creator>
      <dc:date>2013-01-14T05:00:35Z</dc:date>
    </item>
    <item>
      <title>Re: Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124527#M25483</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Double transpose would seem the easiest way.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; input id date ind1-ind4 ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; informat date date9.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; format date yymon7.;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;18010 01SEP2011 1 2 3 4&lt;/P&gt;&lt;P&gt;18010 01OCT2011 5 6 7 8&lt;/P&gt;&lt;P&gt;18010 01NOV2011 9 1 2 3&lt;/P&gt;&lt;P&gt;18010 01DEC2011 4 5 6 7&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;proc transpose data=have out=tall ;&lt;/P&gt;&lt;P&gt;by id date;&lt;/P&gt;&lt;P&gt;var ind1-ind4;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;proc transpose data=tall out=want delimiter=_;&lt;/P&gt;&lt;P&gt;by id;&lt;/P&gt;&lt;P&gt;id _name_ date;&lt;/P&gt;&lt;P&gt;var col1;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;data _null_; set;&lt;/P&gt;&lt;P&gt;put (_ALL_) (=/);&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;id=18010&lt;/P&gt;&lt;P&gt;_NAME_=COL1&lt;/P&gt;&lt;P&gt;ind1_2011SEP=1&lt;/P&gt;&lt;P&gt;ind2_2011SEP=2&lt;/P&gt;&lt;P&gt;ind3_2011SEP=3&lt;/P&gt;&lt;P&gt;ind4_2011SEP=4&lt;/P&gt;&lt;P&gt;ind1_2011OCT=5&lt;/P&gt;&lt;P&gt;ind2_2011OCT=6&lt;/P&gt;&lt;P&gt;ind3_2011OCT=7&lt;/P&gt;&lt;P&gt;ind4_2011OCT=8&lt;/P&gt;&lt;P&gt;ind1_2011NOV=9&lt;/P&gt;&lt;P&gt;ind2_2011NOV=1&lt;/P&gt;&lt;P&gt;ind3_2011NOV=2&lt;/P&gt;&lt;P&gt;ind4_2011NOV=3&lt;/P&gt;&lt;P&gt;ind1_2011DEC=4&lt;/P&gt;&lt;P&gt;ind2_2011DEC=5&lt;/P&gt;&lt;P&gt;ind3_2011DEC=6&lt;/P&gt;&lt;P&gt;ind4_2011DEC=7&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 14 Jan 2013 13:38:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124527#M25483</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2013-01-14T13:38:48Z</dc:date>
    </item>
    <item>
      <title>Re: Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124528#M25484</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;A __default_attr="504807" __jive_macro_name="user" class="jive_macro jive_macro_user" data-objecttype="3" href="https://communities.sas.com/"&gt;&lt;/A&gt;: Given the size of your file, I thought this might be a good time to introduce (and, hopefully, get some feedback regarding) a concept that KSharp came up with and he and I are formulating for a future conference paper, namely using a data step to accomplish such transpose tasks.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here is an example using a file like yours, although I've only tested it with 1.2 million and 12 million records.&amp;nbsp; With 1.2 million records the data step method runs more than 10 times faster than using proc transpose.&amp;nbsp; With 12 million records, the difference amplified to 15 times faster and I presume that will continue to increase with even larger files like yours. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Since both this and &lt;A __default_attr="2431" __jive_macro_name="user" class="jive_macro jive_macro_user" data-objecttype="3" href="https://communities.sas.com/"&gt;&lt;/A&gt;'s proposed code require that the data be sorted, I didn't include those times in the comparison.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; length id 8.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; input date ind1-ind4 ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; informat date date9.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; format date yymon7.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do id=1 to 100000;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;01jan2011 1 2 3 4&lt;/P&gt;&lt;P&gt;01feb2011 5 6 7 8&lt;/P&gt;&lt;P&gt;01mar2011 9 1 2 3&lt;/P&gt;&lt;P&gt;01apr2011 4 5 6 7&lt;/P&gt;&lt;P&gt;01may2011 1 2 3 4&lt;/P&gt;&lt;P&gt;01jun2011 5 6 7 8&lt;/P&gt;&lt;P&gt;01jul2011 9 1 2 3&lt;/P&gt;&lt;P&gt;01aug2011 4 5 6 7&lt;/P&gt;&lt;P&gt;01SEP2011 1 2 3 4&lt;/P&gt;&lt;P&gt;01OCT2011 5 6 7 8&lt;/P&gt;&lt;P&gt;01NOV2011 9 1 2 3&lt;/P&gt;&lt;P&gt;01DEC2011 4 5 6 7&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;&amp;nbsp; by id date;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*transpose long to wide using data step*/&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;&amp;nbsp; create table temp as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select distinct date from have&lt;/P&gt;&lt;P&gt;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data _null_;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set temp end=last;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if _n_ eq 1 then call execute('data want; merge ');&lt;/P&gt;&lt;P&gt;&amp;nbsp; call execute(catt('have(where=(date=',date,')',&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' rename=( ind1=ind1_',left(put(date,yymon7.)),&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; ' ind2=ind2_',left(put(date,yymon7.)),&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; ' ind3=ind3_',left(put(date,yymon7.)),&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; ' ind4=ind4_',left(put(date,yymon7.)),'))'));&lt;/P&gt;&lt;P&gt;&amp;nbsp; if last then call execute('; by id; drop date; run;');&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*compare with transpose using proc transpose*/&lt;/P&gt;&lt;P&gt;proc transpose data=have out=tall ;&lt;/P&gt;&lt;P&gt;by id date;&lt;/P&gt;&lt;P&gt;var ind1-ind4;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc transpose data=tall out=want delimiter=_;&lt;/P&gt;&lt;P&gt;by id;&lt;/P&gt;&lt;P&gt;id _name_ date;&lt;/P&gt;&lt;P&gt;var col1;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 14 Jan 2013 15:57:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124528#M25484</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2013-01-14T15:57:47Z</dc:date>
    </item>
    <item>
      <title>Re: Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124529#M25485</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Arthur,&lt;/P&gt;&lt;P&gt; I used your data step for 50 Mil records and it completed way faster than expected. I could not keep the old Log as I had overwriiten with other process.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 14 Jan 2013 18:38:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124529#M25485</guid>
      <dc:creator>SASPhile</dc:creator>
      <dc:date>2013-01-14T18:38:16Z</dc:date>
    </item>
    <item>
      <title>Re: Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124530#M25486</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Have you tested when you have lots more dates?&amp;nbsp; Is there a limit to the number of data sets that can be merged. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Or course you could probabley use multiple data steps and still be faster than proc transpose.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 14 Jan 2013 19:06:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124530#M25486</guid>
      <dc:creator>data_null__</dc:creator>
      <dc:date>2013-01-14T19:06:09Z</dc:date>
    </item>
    <item>
      <title>Re: Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124531#M25487</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;dn: what would you suggest as "a lot more dates", specifically, how large would you suggest?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The OP for this thread only needed 12 dates, so I didn't push it.&amp;nbsp; Interestingly, using proc transpose on just the 4 replications of the 12 dates on 12 million records almost blew out my ram.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 14 Jan 2013 19:47:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124531#M25487</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2013-01-14T19:47:50Z</dc:date>
    </item>
    <item>
      <title>Re: Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124532#M25488</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I don't know how many.&amp;nbsp; I was thinking that for the WHEREed MERGE technique that the number of MERGE data sets is the limiting factor (or at least I think so) and I would like to know where that limit is. &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 14 Jan 2013 20:11:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124532#M25488</guid>
      <dc:creator>data_null__</dc:creator>
      <dc:date>2013-01-14T20:11:35Z</dc:date>
    </item>
    <item>
      <title>Re: Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124533#M25489</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;A __default_attr="504807" __jive_macro_name="user" class="jive_macro jive_macro_user" data-objecttype="3" href="https://communities.sas.com/"&gt;&lt;/A&gt;: I'm currently testing out DN's suggestion of testing some of the limits, but quickly confronted the log situation.&amp;nbsp; That is easy to circumvent by just rerouting the log.&amp;nbsp; I wrapped the code with:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc printto log="c:\art\testlog";&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* the code */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc printto;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 14 Jan 2013 20:28:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124533#M25489</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2013-01-14T20:28:28Z</dc:date>
    </item>
    <item>
      <title>Re: Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124534#M25490</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;DN: I've tested it, both with using call execute and with creating and running an include program.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I successfully ran 256, 512 and 1024 merges, but the system crashed as 2048.&amp;nbsp; But, even with 1024, that was creating a file that was 4,097&amp;nbsp; variables wide.&amp;nbsp; I wouldn't recommend anyone creating that wide of a file anyway.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The limitations, also, may just be due to limited ram.&amp;nbsp; Can you try the following on your computer and, if it works, increasing it to 4096?:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have (drop=months);&lt;/P&gt;&lt;P&gt;&amp;nbsp; format id best32.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; input date ind1-ind4 ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; informat date date9.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; format date yymon7.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do id=1 to 2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; date="01dec2010"d;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do months=1 to 2048;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; date=intnx('month',date,1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; cards;&lt;/P&gt;&lt;P&gt;01dec2010 1 2 3 4&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc printto log="c:\testlog";&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*transpose long to wide using data step*/&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;&amp;nbsp; create table temp as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select distinct date from have&lt;/P&gt;&lt;P&gt;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data _null_;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set temp end=last;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if _n_ eq 1 then call execute('data want; merge ');&lt;/P&gt;&lt;P&gt;&amp;nbsp; call execute(catt('have (where=(date=',date,')',&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' rename=( ind1=ind1_',left(put(date,yymon7.)),&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; ' ind2=ind2_',left(put(date,yymon7.)),&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; ' ind3=ind3_',left(put(date,yymon7.)),&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; ' ind4=ind4_',left(put(date,yymon7.)),'))'));&lt;/P&gt;&lt;P&gt;&amp;nbsp; if last then call execute('; by id; drop date; run;');&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc printto;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 14 Jan 2013 22:23:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124534#M25490</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2013-01-14T22:23:46Z</dc:date>
    </item>
    <item>
      <title>Re: Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124535#M25491</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Art,&lt;/P&gt;&lt;P&gt;It took over 3 hrs with 50 mil records.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 15 Jan 2013 18:42:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124535#M25491</guid>
      <dc:creator>SASPhile</dc:creator>
      <dc:date>2013-01-15T18:42:59Z</dc:date>
    </item>
    <item>
      <title>Re: Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124536#M25492</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;A __default_attr="504807" __jive_macro_name="user" class="jive_macro jive_macro_user" data-objecttype="3" href="https://communities.sas.com/"&gt;&lt;/A&gt;: Then I would guess that your input file has quite a few extra variables in it or that there is something else going on.&amp;nbsp; I tested the process on 50 million records, on an extremely old computer with extremely limited ram, and it only took 7 minutes.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 15 Jan 2013 19:33:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124536#M25492</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2013-01-15T19:33:49Z</dc:date>
    </item>
    <item>
      <title>Re: Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124537#M25493</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Art,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I like the general idea, but my gut says you would get faster results by switching from MERGE to SET.&amp;nbsp; You would have to go through the usual complications ... what to do if first.id, what to retain, what to do if last.id.&amp;nbsp; I'm up to my eyeballs for the next few weeks and won't be able to test (sorry).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Good luck.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 15 Jan 2013 19:59:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124537#M25493</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2013-01-15T19:59:43Z</dc:date>
    </item>
    <item>
      <title>Re: Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124538#M25494</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Yes there are extra variables.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 15 Jan 2013 21:37:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124538#M25494</guid>
      <dc:creator>SASPhile</dc:creator>
      <dc:date>2013-01-15T21:37:29Z</dc:date>
    </item>
    <item>
      <title>Re: Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124539#M25495</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;A __default_attr="504807" __jive_macro_name="user" class="jive_macro jive_macro_user" data-objecttype="3" href="https://communities.sas.com/"&gt;&lt;/A&gt;: Are they the same for all of a subject's 12 records?&amp;nbsp; If not, you will have a problem with any method as only the last record's info will be kept.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If the values for those variables are the same for all 12 records, you can speed up the process by (after sorting the file) extracting the data to be transposed (i.e., id, date and the four ind variables) to one file and, for the last.id, outputting just id and the variables that aren't part of the transpose, running the transpose on the first of those files, and then merging the results with the second one.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;BTW, the 7 minute proc execute solution (which took the same cpu and real time) took 40.4 minutes cpu time and over an hour real time using the double transpose method.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 15 Jan 2013 21:51:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124539#M25495</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2013-01-15T21:51:38Z</dc:date>
    </item>
    <item>
      <title>Re: Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124540#M25496</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;A __default_attr="5253" __jive_macro_name="user" class="jive_macro jive_macro_user" href="https://communities.sas.com/"&gt;&lt;/A&gt;: Your gut was telling you the truth.&amp;nbsp; It reduced the run on the 50 million test case from 7 minutes to 2 minutes.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A __default_attr="504807" __jive_macro_name="user" class="jive_macro jive_macro_user" href="https://communities.sas.com/"&gt;&lt;/A&gt;: I haven't had time to turn this into a general solution yet, but here is the code (based on Asounding's sugestion), that accomplished the test run in 2 minutes.&amp;nbsp; It will still require sorted data, but doesn't require the upfront sql code as I hard coded the variables, and should be able to accomodate your full length records.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;&amp;nbsp; array want(48)ind1_2011JAN ind2_2011JAN ind3_2011JAN ind4_2011JAN&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; ind1_2011FEB ind2_2011FEB ind3_2011FEB ind4_2011FEB&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; ind1_2011MAR ind2_2011MAR ind3_2011MAR ind4_2011MAR&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; ind1_2011APR ind2_2011APR ind3_2011APR ind4_2011APR&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; ind1_2011MAY ind2_2011MAY ind3_2011MAY ind4_2011MAY&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; ind1_2011JUN ind2_2011JUN ind3_2011JUN ind4_2011JUN&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; ind1_2011JUL ind2_2011JUL ind3_2011JUL ind4_2011JUL&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; ind1_2011AUG ind2_2011AUG ind3_2011AUG ind4_2011AUG&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; ind1_2011SEP ind2_2011SEP ind3_2011SEP ind4_2011SEP&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; ind1_2011OCT ind2_2011OCT ind3_2011OCT ind4_2011OCT&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; ind1_2011NOV ind2_2011NOV ind3_2011NOV ind4_2011NOV&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; ind1_2011DEC ind2_2011DEC ind3_2011DEC ind4_2011DEC;&lt;/P&gt;&lt;P&gt;&amp;nbsp; retain want;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set have;&lt;/P&gt;&lt;P&gt;&amp;nbsp; by id;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if first.id then call missing(of want(*));&lt;/P&gt;&lt;P&gt;&amp;nbsp; want((month(date)-1)*4+1)=ind1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; want((month(date)-1)*4+2)=ind2;&lt;/P&gt;&lt;P&gt;&amp;nbsp; want((month(date)-1)*4+3)=ind3;&lt;/P&gt;&lt;P&gt;&amp;nbsp; want((month(date)-1)*4+4)=ind4;&lt;/P&gt;&lt;P&gt;&amp;nbsp; drop date ind1-ind4;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if last.id then output;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 15 Jan 2013 23:04:51 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124540#M25496</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2013-01-15T23:04:51Z</dc:date>
    </item>
    <item>
      <title>Re: Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124541#M25497</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You might consider this technique to create the array.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;DIV style="font-family: Courier New; font-size: 11pt;"&gt;&lt;SPAN style="color: #000080; background-color: #ffffff;"&gt;&lt;STRONG&gt;proc&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #000080; background-color: #ffffff;"&gt;&lt;STRONG&gt;summary&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;nway&lt;/SPAN&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;data&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=have(&lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;keep&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=date);&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;class&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; date;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;output&lt;/SPAN&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;out&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=udate(&lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;drop&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=_type_ _Freq_);&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #000080; background-color: #ffffff;"&gt;&lt;STRONG&gt;run&lt;/STRONG&gt;&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000080; background-color: #ffffff;"&gt;&lt;STRONG&gt;data&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; udate;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;set&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; udate;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;do&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; i = &lt;/SPAN&gt;&lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;to&lt;/SPAN&gt; &lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;&lt;STRONG&gt;4&lt;/STRONG&gt;&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _name_ = cats(&lt;/SPAN&gt;&lt;SPAN style="color: #800080; background-color: #ffffff;"&gt;'ind'&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;,i);&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;output&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;end&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #000080; background-color: #ffffff;"&gt;&lt;STRONG&gt;run&lt;/STRONG&gt;&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000080; background-color: #ffffff;"&gt;&lt;STRONG&gt;proc&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #000080; background-color: #ffffff;"&gt;&lt;STRONG&gt;sort&lt;/STRONG&gt;&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;by&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; i date;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #000080; background-color: #ffffff;"&gt;&lt;STRONG&gt;run&lt;/STRONG&gt;&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000080; background-color: #ffffff;"&gt;&lt;STRONG&gt;proc&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #000080; background-color: #ffffff;"&gt;&lt;STRONG&gt;transpose&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;data&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=udate &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;delimiter&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=_ &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;out&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=frame(&lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;drop&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=_name_);&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;var&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; i;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;id&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; _name_ date;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #000080; background-color: #ffffff;"&gt;&lt;STRONG&gt;run&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV style="font-family: Courier New; font-size: 11pt;"&gt; &lt;/DIV&gt;&lt;DIV style="font-family: Courier New; font-size: 11pt;"&gt; &lt;/DIV&gt;&lt;P&gt;Then use data FRAME in your data step with an unexecuted SET.&amp;nbsp; Saves typing the array statement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;DIV style="font-family: Courier New; font-size: 11pt;"&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;if&lt;/SPAN&gt; &lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;&lt;STRONG&gt;0&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;then&lt;/SPAN&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;set&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; frame;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;array&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; want&lt;LI&gt; &lt;/LI&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;_numeric_&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV style="font-family: Courier New; font-size: 11pt;"&gt; &lt;/DIV&gt;&lt;DIV style="font-family: Courier New; font-size: 11pt;"&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;This is the first two lines of data want.&lt;BR /&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 15 Jan 2013 23:36:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124541#M25497</guid>
      <dc:creator>data_null__</dc:creator>
      <dc:date>2013-01-15T23:36:53Z</dc:date>
    </item>
    <item>
      <title>Re: Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124542#M25498</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;DN:&amp;nbsp; Most definitely!&amp;nbsp; I was surprised to discover that the upfront proc summary call ran in around 30% of the time it took the initial proc sql call to run.&amp;nbsp; While this was an SGF quality paper already with just Ksharp's idea, combined with your, Asounding's and my input, it will definitely be a nice addition to the SAS-related literature.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 16 Jan 2013 02:05:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124542#M25498</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2013-01-16T02:05:25Z</dc:date>
    </item>
    <item>
      <title>Re: Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124543#M25499</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I wonder if there is much or any performance advance by factoring out the MONTH function&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;if first.id then call missing(of want(*));&lt;/P&gt;&lt;P&gt;&amp;nbsp; m = (month(date)-1)*4;&lt;/P&gt;&lt;P&gt;&amp;nbsp; want(m+1)=ind1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; want(m+2)=ind2;&lt;/P&gt;&lt;P&gt;&amp;nbsp; want(m+3)=ind3;&lt;/P&gt;&lt;P&gt;&amp;nbsp; want(m+4)=ind4;&lt;/P&gt;&lt;P&gt;&amp;nbsp; drop date m ind1-ind4;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if last.id then output;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 16 Jan 2013 15:15:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Transpose/m-p/124543#M25499</guid>
      <dc:creator>data_null__</dc:creator>
      <dc:date>2013-01-16T15:15:36Z</dc:date>
    </item>
  </channel>
</rss>

