<?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: Transposed data in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/359184#M64366</link>
    <description>&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Time&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;AA&lt;/TD&gt;&lt;TD&gt;AAPL&lt;/TD&gt;&lt;TD&gt;other stocks…&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;price&lt;/TD&gt;&lt;TD&gt;price&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;price&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;Art,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for your reply.&amp;nbsp; The main shift I want is that I want each company' sym_Root&amp;nbsp; to be a separate column.&amp;nbsp; Time remains the first column.&amp;nbsp; Then column two will be the first company that trades at a given time with the price it traded at for that time.&amp;nbsp; The next column will be the second company and its trading price (if it traded at that time), etc.&lt;/P&gt;</description>
    <pubDate>Tue, 16 May 2017 20:17:18 GMT</pubDate>
    <dc:creator>kbl</dc:creator>
    <dc:date>2017-05-16T20:17:18Z</dc:date>
    <item>
      <title>Transposed data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/359108#M64353</link>
      <description>&lt;P&gt;Good afternoon,&lt;BR /&gt;I pulled some TAQ data, and the file is in a .CSV format. I've only kept (and am interested in ) about six variables. The data pulled just fine, but it is listed in a column, with all trades for one company listed, followed by all trades for the next company, etc. I need the file sorted so that i can see all companies that traded at a particular time (along with the number of shares traded). In essence, instead of having vertical data, I want horizontal data. Can you help? I am attaching one of the files so you can see what i mean. Thanks very much for any assistance you can provide.&lt;BR /&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 16 May 2017 16:47:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/359108#M64353</guid>
      <dc:creator>kbl</dc:creator>
      <dc:date>2017-05-16T16:47:14Z</dc:date>
    </item>
    <item>
      <title>Re: Transposed data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/359114#M64356</link>
      <description>&lt;P&gt;Can you attach an example showing how you want the resulting file to look?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Art, CEO, AnalystFinder.com&lt;/P&gt;</description>
      <pubDate>Tue, 16 May 2017 17:11:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/359114#M64356</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2017-05-16T17:11:40Z</dc:date>
    </item>
    <item>
      <title>Re: Transposed data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/359122#M64358</link>
      <description>&lt;P&gt;What you're asking for is a report.&amp;nbsp; The data should remain in vertical form.&amp;nbsp; A report might display the data in horizontal form, if that is useful to you.&amp;nbsp; It becomes a question of whether it is worth it to you to learn some programming skills, to be able to produce the report that you want.&lt;/P&gt;</description>
      <pubDate>Tue, 16 May 2017 17:36:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/359122#M64358</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2017-05-16T17:36:07Z</dc:date>
    </item>
    <item>
      <title>Re: Transposed data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/359184#M64366</link>
      <description>&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Time&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;AA&lt;/TD&gt;&lt;TD&gt;AAPL&lt;/TD&gt;&lt;TD&gt;other stocks…&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;price&lt;/TD&gt;&lt;TD&gt;price&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;price&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;Art,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for your reply.&amp;nbsp; The main shift I want is that I want each company' sym_Root&amp;nbsp; to be a separate column.&amp;nbsp; Time remains the first column.&amp;nbsp; Then column two will be the first company that trades at a given time with the price it traded at for that time.&amp;nbsp; The next column will be the second company and its trading price (if it traded at that time), etc.&lt;/P&gt;</description>
      <pubDate>Tue, 16 May 2017 20:17:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/359184#M64366</guid>
      <dc:creator>kbl</dc:creator>
      <dc:date>2017-05-16T20:17:18Z</dc:date>
    </item>
    <item>
      <title>Re: Transposed data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/359186#M64367</link>
      <description>&lt;P&gt;Good afternoon,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have programmed before, although it's been a couple of years since i used SAS.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I need the tickers (SYM_ROOT) to be in a separate column for each stock with the price at which it is trading for a given time listed under the company ticker.&amp;nbsp; As a result, I don't think it is sufficient to create a report; I think I need to transpose the data.&amp;nbsp; Does that sound right?&lt;/P&gt;</description>
      <pubDate>Tue, 16 May 2017 20:20:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/359186#M64367</guid>
      <dc:creator>kbl</dc:creator>
      <dc:date>2017-05-16T20:20:17Z</dc:date>
    </item>
    <item>
      <title>Re: Transposed data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/359189#M64369</link>
      <description>&lt;P&gt;What you want to do is easy with proc transpose, but you have some duplicate entries for some companies at the same times. As long as the duplicates are irrelevant, you can get what you want with:&lt;/P&gt;
&lt;PRE&gt;proc sort data=have nodupkey;
  by time_m sym_root;
run;

proc transpose data=have out=want (drop=_:);
  by time_m;
  id sym_root;
  var price;
run;
&lt;/PRE&gt;
&lt;P&gt;Art, CEO, AnalystFinder.com&lt;/P&gt;</description>
      <pubDate>Tue, 16 May 2017 20:27:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/359189#M64369</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2017-05-16T20:27:59Z</dc:date>
    </item>
    <item>
      <title>Re: Transposed data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/359211#M64371</link>
      <description>&lt;P&gt;Thanks so much Art!&amp;nbsp; This is exceptionally helpful.&amp;nbsp; Can I trouble you for one more?&amp;nbsp; I was going to do some other calculations in Excel, but I think it will be easier to use SAS for everything.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;What changes do I need to make to the program if I want everything that you just sent, plus I want to keep the volume data by company.&amp;nbsp; So, after I have a column for each company's price data, I have a set of columns for each company's volume data?&amp;nbsp; I think there is not a duplicate issue; each time listed represents the last trade that minute for each company's stock, and we only need to sort to the minute (the first four digits), not to the second (the final digit in the time variable) .&amp;nbsp; The data can look something like this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Time (end of each minute)&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;Stock2&lt;/TD&gt;&lt;TD&gt;Stock 3&lt;/TD&gt;&lt;TD&gt;Stock 4&lt;/TD&gt;&lt;TD&gt;Stock 5&lt;/TD&gt;&lt;TD&gt;…&lt;/TD&gt;&lt;TD&gt;Stock 500&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;Stock2&lt;/TD&gt;&lt;TD&gt;Stock 3&lt;/TD&gt;&lt;TD&gt;Stock 4&lt;/TD&gt;&lt;TD&gt;Stock 5&lt;/TD&gt;&lt;TD&gt;…&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;30:46&lt;/TD&gt;&lt;TD&gt;36.5&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;31:58&lt;/TD&gt;&lt;TD&gt;36.445&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;The last trade price for each stock each minute here&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;The corresponding trading volume&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;32:22&lt;/TD&gt;&lt;TD&gt;36.51&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;for each stock&amp;nbsp; for each minute here&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;33:55&lt;/TD&gt;&lt;TD&gt;36.55&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;We&amp;nbsp; have 500 stocks&amp;nbsp; in the index&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;200&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;34:36&lt;/TD&gt;&lt;TD&gt;36.575&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;and we&amp;nbsp; need end-of-minute price data here for only 5 days&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;35:57&lt;/TD&gt;&lt;TD&gt;36.57&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;so it should not be too large of a data file&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;36:50&lt;/TD&gt;&lt;TD&gt;36.75&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;37:58&lt;/TD&gt;&lt;TD&gt;36.77&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;38:43&lt;/TD&gt;&lt;TD&gt;36.76&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Tue, 16 May 2017 21:35:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/359211#M64371</guid>
      <dc:creator>kbl</dc:creator>
      <dc:date>2017-05-16T21:35:20Z</dc:date>
    </item>
    <item>
      <title>Re: Transposed data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/359214#M64372</link>
      <description>&lt;P&gt;You can do it with a couple of proc transposes, but I always find the following macro easier to make a wide file (2 or more variable) wider:&amp;nbsp;&lt;A href="http://www.sascommunity.org/wiki/A_Better_Way_to_Flip_(Transpose)_a_SAS_Dataset" target="_blank"&gt;http://www.sascommunity.org/wiki/A_Better_Way_to_Flip_(Transpose)_a_SAS_Dataset&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you download and run that macro, here is all you then have to submit to get what you want:&lt;/P&gt;
&lt;PRE&gt;proc sort data=have out=need nodupkey;
  by time_m sym_root;
run;

%transpose(data=need, out=want, by=time_m, id=sym_root,
delimiter=_,var=price size)
&lt;/PRE&gt;
&lt;P&gt;Art, CEO, AnalystFinder.com&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 16 May 2017 21:52:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/359214#M64372</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2017-05-16T21:52:00Z</dc:date>
    </item>
    <item>
      <title>Re: Transposed data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/362114#M64512</link>
      <description>&lt;P&gt;Art,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for your help, and my apologies for the delayed response.&amp;nbsp; It took me awhile to get my data to read into the program.&amp;nbsp; That's done now, but I'm not following your comment about running the macro first and then add this code.&amp;nbsp; I went through the paper and the PowerPoint, but can you help with my next step?&amp;nbsp; Here is the program:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Filename three 'G:\threeone.dat';&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; &amp;nbsp; data have;&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; &amp;nbsp; infile&amp;nbsp; three expandtabs;&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; &amp;nbsp; input TIME_M $ SYM_ROOT $ SIZE PRICE TIME2;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&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; &amp;nbsp;* out= need;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;proc sort data=have out=need nodupkey;&lt;BR /&gt;&amp;nbsp; by time_m sym_root;&lt;BR /&gt;&amp;nbsp; prefix=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; autovars=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; descendingid=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var_first=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; format=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; delimiter=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; copy=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; drop=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sort=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sort_options=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; use_varname=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; preloadfmt=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; guessingrows=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newid=);&lt;BR /&gt;run;&lt;BR /&gt;&lt;BR /&gt;%transpose(data=need, out=want, by=time_m, id=sym_root,&lt;BR /&gt;delimiter=_,var=price size)&lt;BR /&gt;run;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;Thanks a lot.&lt;/P&gt;</description>
      <pubDate>Sat, 27 May 2017 01:31:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/362114#M64512</guid>
      <dc:creator>kbl</dc:creator>
      <dc:date>2017-05-27T01:31:09Z</dc:date>
    </item>
    <item>
      <title>Re: Transposed data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/362115#M64513</link>
      <description>&lt;P&gt;There was a link to the code on that page. The direct link to the code is:&amp;nbsp;&lt;A href="http://www.sascommunity.org/mwiki/images/b/be/BB-07-2013.sas" target="_blank"&gt;http://www.sascommunity.org/mwiki/images/b/be/BB-07-2013.sas&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Copy and paste that code into whatever you use to submit SAS code. After the last line of the macro's code, paste the following lines :&lt;/P&gt;
&lt;PRE&gt;Filename three 'G:\threeone.dat';&lt;BR /&gt;data have;&lt;BR /&gt; &amp;nbsp;infile&amp;nbsp; three expandtabs;&lt;BR /&gt; &amp;nbsp;input TIME_M $ SYM_ROOT $ SIZE PRICE TIME2;&lt;BR /&gt;run;&lt;BR /&gt; &lt;BR /&gt;proc sort data=have out=need nodupkey;
  by time_m sym_root;
run;

%transpose(data=need, out=want, by=time_m, id=sym_root,
delimiter=_,var=price size)&lt;/PRE&gt;
&lt;P&gt;Then click the run icon.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Art, CEO, AnalystFinder.com&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 27 May 2017 01:48:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/362115#M64513</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2017-05-27T01:48:05Z</dc:date>
    </item>
    <item>
      <title>Re: Transposed data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/362117#M64514</link>
      <description>&lt;P&gt;Art,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Is all of this code included?&amp;nbsp; I ran this program, and did not get any errors, but I also did not get any output:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;%macro transpose(libname_in=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; libname_out=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; prefix=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; autovars=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; descendingid=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var_first=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; format=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; delimiter=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; copy=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; drop=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sort=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sort_options=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; use_varname=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; preloadfmt=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; guessingrows=,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newid=);&lt;BR /&gt;&lt;BR /&gt;/*Check whether the data and out parameters contain one or two-level filenames*/&lt;BR /&gt;&amp;nbsp; %let lp=%sysfunc(findc(%superq(data),%str(%()));&lt;BR /&gt;&amp;nbsp; %if &amp;amp;lp. %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let rp=%sysfunc(findc(%superq(data),%str(%)),b));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let dsoptions=%qsysfunc(substrn(%nrstr(%superq(data)),&amp;amp;lp+1,&amp;amp;rp-&amp;amp;lp-1));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let data=%sysfunc(substrn(%nrstr(%superq(data)),1,%eval(&amp;amp;lp-1)));&lt;BR /&gt;&amp;nbsp; %end;&lt;BR /&gt;&amp;nbsp; %else %let dsoptions=;&lt;BR /&gt;&amp;nbsp; %if %sysfunc(countw(&amp;amp;data.)) eq 2 %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let libname_in=%scan(&amp;amp;data.,1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let data=%scan(&amp;amp;data.,2);&lt;BR /&gt;&amp;nbsp; %end;&lt;BR /&gt;&amp;nbsp; %else %if %length(&amp;amp;libname_in.) eq 0 %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let libname_in=work;&lt;BR /&gt;&amp;nbsp; %end;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; %if %sysfunc(countw(&amp;amp;out.)) eq 2 %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let libname_out=%scan(&amp;amp;out.,1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let out=%scan(&amp;amp;out.,2);&lt;BR /&gt;&amp;nbsp; %end;&lt;BR /&gt;&amp;nbsp; %else %if %length(&amp;amp;libname_out.) eq 0 %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let libname_out=work;&lt;BR /&gt;&amp;nbsp; %end;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; %if %length(&amp;amp;newid.) eq 0 %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let newid=row;&lt;BR /&gt;&amp;nbsp; %end;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; /*obtain last by variable*/&lt;BR /&gt;&amp;nbsp; %if %length(&amp;amp;by.) gt 0 %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let lastby=%scan(&amp;amp;by.,-1);&lt;BR /&gt;&amp;nbsp; %end;&lt;BR /&gt;&amp;nbsp; %else %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let lastby=;&lt;BR /&gt;&amp;nbsp; %end;&lt;BR /&gt;&lt;BR /&gt;/*Create macro variable to contain a list of variables to be copied*/&lt;BR /&gt;&amp;nbsp;%let to_copy=;&lt;BR /&gt;&amp;nbsp; %if %length(&amp;amp;copy.) gt 0 %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data t_e_m_p;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set &amp;amp;libname_in..&amp;amp;data. (obs=1 keep=&amp;amp;copy.);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc sql noprint;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select name&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; into :to_copy separated by " "&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from dictionary.columns&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; where libname="WORK" and&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memname="T_E_M_P"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quit;&lt;BR /&gt;&amp;nbsp; %end;&lt;BR /&gt;&lt;BR /&gt;/*Populate var parameter in the event it has a null value*/&lt;BR /&gt;&amp;nbsp; %if %length(&amp;amp;var.) eq 0 %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data t_e_m_p;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set &amp;amp;libname_in..&amp;amp;data. (obs=1 drop=&amp;amp;by. &amp;amp;id. &amp;amp;copy.);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc sql noprint;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select name&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; into :var separated by " "&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from dictionary.columns&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; where libname="WORK" and&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memname="T_E_M_P"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %sysfunc(upcase("&amp;amp;autovars.")) eq "CHAR" %then %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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and type="char"&lt;BR /&gt;&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;&amp;nbsp;&amp;nbsp; %else %if %sysfunc(upcase("&amp;amp;autovars.")) ne "ALL" %then %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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and type="num"&lt;BR /&gt;&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;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quit;&lt;BR /&gt;&amp;nbsp; %end;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;/*Initialize macro variables*/&lt;BR /&gt;&amp;nbsp; %let vars_char=;&lt;BR /&gt;&amp;nbsp; %let varlist_char=;&lt;BR /&gt;&amp;nbsp; %let vars_num=;&lt;BR /&gt;&amp;nbsp; %let varlist_num=;&lt;BR /&gt;&amp;nbsp; %let formats_char=;&lt;BR /&gt;&amp;nbsp; %let format_char=;&lt;BR /&gt;&amp;nbsp; %let formats_num=;&lt;BR /&gt;&amp;nbsp; %let format_num=;&lt;BR /&gt;&lt;BR /&gt;/*Create file t_e_m_p to contain one record with all var variables*/&lt;BR /&gt;&amp;nbsp; data t_e_m_p;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set &amp;amp;libname_in..&amp;amp;data. (obs=1 keep=&amp;amp;var.);&lt;BR /&gt;&amp;nbsp; run;&lt;BR /&gt;&lt;BR /&gt;/*Create macro variables containing untransposed var names and formats*/&lt;BR /&gt;&amp;nbsp; proc sql noprint;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select name, case&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when missing(format) then " $"||strip(put(length,5.))||'.'&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else strip(format)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; into :vars_char separated by " ",&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :formats_char separated by "~"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from dictionary.columns&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where libname="WORK" and&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memname="T_E_M_P" and&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type="char"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select name, case&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when missing(format) then "best12."&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else strip(format)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; into :vars_num separated by " ",&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :formats_num separated by "~"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from dictionary.columns&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where libname="WORK" and&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memname="T_E_M_P" and&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type="num"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select name&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; into :vars_all separated by " "&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from dictionary.columns&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where libname="WORK" and&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memname="T_E_M_P"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;&amp;nbsp; quit;&lt;BR /&gt;&lt;BR /&gt;/*If sort parameter has a value of YES, create a sorted temporary data file*/&lt;BR /&gt;&amp;nbsp; %if %sysfunc(upcase("&amp;amp;sort.")) eq "YES" %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let notsorted=;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc sort data=&amp;amp;libname_in..&amp;amp;data.&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; keep=&amp;amp;by. &amp;amp;id. &amp;amp;vars_char. &amp;amp;vars_num. &amp;amp;to_copy.&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;dsoptions.&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out=t_e_m_p &amp;amp;sort_options. noequals;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by &amp;amp;by.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let data=t_e_m_p;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let libname_in=work;&lt;BR /&gt;&amp;nbsp; %end;&lt;BR /&gt;&amp;nbsp; %else %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let notsorted=notsorted;&lt;BR /&gt;&amp;nbsp; %end;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; /*if no id parameter is present, create one from &amp;amp;newid.*/&lt;BR /&gt;&amp;nbsp; %if %length(&amp;amp;id.) eq 0 %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data t_e_m_p;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set &amp;amp;libname_in..&amp;amp;data.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by &amp;amp;by.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if first.&amp;amp;lastby then &amp;amp;newid.=1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else &amp;amp;newid+1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let id=&amp;amp;newid.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let data=t_e_m_p;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let libname_in=work;&lt;BR /&gt;&amp;nbsp; %end;&lt;BR /&gt;&lt;BR /&gt;/*Ensure guessingrows parameter contains a value*/&lt;BR /&gt;&amp;nbsp; %if %length(&amp;amp;guessingrows.) eq 0 %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let guessingrows=%sysfunc(constant(EXACTINT));&lt;BR /&gt;&amp;nbsp; %end;&lt;BR /&gt;&lt;BR /&gt;/*Ensure a format is assigned to an id variable*/&lt;BR /&gt;&amp;nbsp; %if %length(&amp;amp;id.) gt 0 %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc sql noprint;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select type,length,%sysfunc(strip(format))&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; into :tr_macro_type, :tr_macro_len, :tr_macro_format&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from dictionary.columns&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; where libname="%sysfunc(upcase(&amp;amp;libname_in.))" and&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memname="%sysfunc(upcase(&amp;amp;data.))" and&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; upcase(name)="%sysfunc(upcase(&amp;amp;id.))"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; quit;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %length(&amp;amp;format.) eq 0 %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let optsave=%sysfunc(getoption(missing),$quote.);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; options missing=.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %length(&amp;amp;tr_macro_format.) gt 0 %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let format=&amp;amp;tr_macro_format.;&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 %if "&amp;amp;tr_macro_type." eq "num " %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let format=%sysfunc(catt(best,&amp;amp;tr_macro_len.,%str(.)));&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 %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let format=%sysfunc(catt($,&amp;amp;tr_macro_len.,%str(.)));&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; options missing=&amp;amp;optsave;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;&amp;nbsp; %end;&lt;BR /&gt;&lt;BR /&gt;/*Create macro variables containing ordered lists of the requested transposed variable&lt;BR /&gt;&amp;nbsp; names for character (varlist_char) and numeric (varlist_num) var variables */&lt;BR /&gt;&amp;nbsp; %if %length(&amp;amp;preloadfmt.) gt 0 %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %sysfunc(countw(&amp;amp;preloadfmt.)) eq 1 %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let preloadfmt=&amp;amp;libname_in..&amp;amp;preloadfmt.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;&amp;nbsp; %end;&lt;BR /&gt;&amp;nbsp; %else %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %sysfunc(upcase("&amp;amp;sort.")) eq "YES" %then&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let dsoptions=;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc freq data=&amp;amp;libname_in..&amp;amp;data. (obs=&amp;amp;guessingrows. keep=&amp;amp;id. &amp;amp;dsoptions.)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; noprint;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tables &amp;amp;id./out=_for_format (keep=&amp;amp;id.);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %sysfunc(upcase("&amp;amp;descendingid.")) eq "YES" %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc sort data=_for_format;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by descending &amp;amp;id;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data _for_format;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set _for_format;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; order=_n_;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;&amp;nbsp; %end;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;proc sql noprint;&lt;BR /&gt;&amp;nbsp; %do i=1 %to 2;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if &amp;amp;i. eq 1 %then %let i_type=char;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else %let i_type=num;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %length(&amp;amp;&amp;amp;vars_&amp;amp;i_type.) gt 0 %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select distinct&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %do j=1 %to 2;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if &amp;amp;j. eq 1 %then %let j_type=;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else %let j_type=format;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %do k=1 %to %sysfunc(countw(&amp;amp;&amp;amp;vars_&amp;amp;i_type.));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;amp;j_type. "||cats("&amp;amp;prefix.",&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %sysfunc(upcase("&amp;amp;var_first.")) eq "NO" %then %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; put(&amp;amp;id.,&amp;amp;format),"&amp;amp;delimiter."&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; %if %sysfunc(upcase("&amp;amp;use_varname.")) ne "NO" %then&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; ,scan("&amp;amp;&amp;amp;vars_&amp;amp;i_type.",&amp;amp;k.);&lt;BR /&gt;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else %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; %if %sysfunc(upcase("&amp;amp;use_varname.")) ne "NO" %then&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; scan("&amp;amp;&amp;amp;vars_&amp;amp;i_type.",&amp;amp;k.),;&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; "&amp;amp;delimiter.",put(&amp;amp;id.,&amp;amp;format)&lt;BR /&gt;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if &amp;amp;j. eq 2 %then&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; ||" "||cats(scan("&amp;amp;&amp;amp;formats_&amp;amp;i_type.",&amp;amp;k.,"~"),";");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if &amp;amp;k. lt %sysfunc(countw(&amp;amp;&amp;amp;vars_&amp;amp;i_type.)) %then ||;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else ,;&lt;BR /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if "&amp;amp;tr_macro_type." eq "num " %then &amp;amp;id. format=best12.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else &amp;amp;id.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,order&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; into :varlist_&amp;amp;i_type. separated by " ",&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; :format_&amp;amp;i_type. separated by " ",&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; :idlist separated by " ",&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; :idorder separated by " "&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %length(&amp;amp;preloadfmt.) gt 0 %then from &amp;amp;preloadfmt.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else from _for_format;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; order by order&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let num_numlabels=&amp;amp;sqlobs.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;&amp;nbsp; %end;&lt;BR /&gt;&amp;nbsp; quit;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; proc sql noprint;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select distinct&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let j_type=;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %do k=1 %to %sysfunc(countw(&amp;amp;&amp;amp;vars_all.));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;amp;j_type. "||cats("&amp;amp;prefix.",&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %sysfunc(upcase("&amp;amp;var_first.")) eq "NO" %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put(&amp;amp;id.,&amp;amp;format),"&amp;amp;delimiter.",&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; %if %sysfunc(upcase("&amp;amp;use_varname.")) ne "NO" %then&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; scan("&amp;amp;&amp;amp;vars_all.",&amp;amp;k.);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR /&gt;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else %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; %if %sysfunc(upcase("&amp;amp;use_varname.")) ne "NO" %then&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; scan("&amp;amp;&amp;amp;vars_all.",&amp;amp;k.),;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;amp;delimiter.",put(&amp;amp;id.,&amp;amp;format))&lt;BR /&gt;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if &amp;amp;k. lt %sysfunc(countw(&amp;amp;&amp;amp;vars_all.)) %then ||;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else ,;&lt;BR /&gt;&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;&amp;nbsp;&amp;nbsp; order&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; into :varlist_all separated by " ",&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; :idorder separated by " "&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %length(&amp;amp;preloadfmt.) gt 0 %then from &amp;amp;preloadfmt.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else from _for_format;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; order by order&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;&amp;nbsp; quit;&lt;BR /&gt;&lt;BR /&gt;/*Create a format that will be used to assign values to the transposed variables*/&lt;BR /&gt;&amp;nbsp; data _for_format;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %length(&amp;amp;preloadfmt.) gt 0 %then set &amp;amp;preloadfmt. (rename=(&amp;amp;id.=start));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else set _for_format&amp;nbsp; (rename=(&amp;amp;id.=start));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if "&amp;amp;tr_macro_type." eq "num " %then retain fmtname "labelfmt" type "N";&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else retain fmtname "$labelfmt" type "C";&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; label=&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %length(&amp;amp;preloadfmt.) eq 0 %then _n_-1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else order-1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;&amp;nbsp; run;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; proc format cntlin = _for_format;&lt;BR /&gt;&amp;nbsp; run ;&lt;BR /&gt;&lt;BR /&gt;/*Create and run the datastep that does the transposition*/&lt;BR /&gt;&amp;nbsp; data &amp;amp;libname_out..&amp;amp;out.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set &amp;amp;libname_in..&amp;amp;data. (keep=&amp;amp;by. &amp;amp;id.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %do i=1 %to %sysfunc(countw("&amp;amp;vars_char."));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %scan(&amp;amp;vars_char.,&amp;amp;i.)&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; %do i=1 %to %sysfunc(countw("&amp;amp;vars_num."));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %scan(&amp;amp;vars_num.,&amp;amp;i.)&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; %do i=1 %to %sysfunc(countw("&amp;amp;to_copy."));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %scan(&amp;amp;to_copy.,&amp;amp;i.)&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; &amp;amp;dsoptions.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; by &amp;amp;by. &amp;amp;notsorted.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;format_char. &amp;amp;format_num.&lt;BR /&gt;&amp;nbsp; %if %length(&amp;amp;vars_char.) gt 0 %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; array want_char(*) $&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %do i=1 %to %eval(&amp;amp;num_numlabels.*%sysfunc(countw("&amp;amp;vars_char.")));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %scan(&amp;amp;varlist_char.,&amp;amp;i.)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; array have_char(*) $ &amp;amp;vars_char.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; retain want_char;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if first.&amp;amp;lastby. then call missing(of want_char(*));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ___nchar=put(&amp;amp;id.,labelfmt.)*dim(have_char);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do ___i=1 to dim(have_char);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; want_char(___nchar+___i)=have_char(___i);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp; %end;&lt;BR /&gt;&amp;nbsp; %if %length(&amp;amp;vars_num.) gt 0 %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; array want_num(*)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %do i=1 %to %eval(&amp;amp;num_numlabels.*%sysfunc(countw("&amp;amp;vars_num.")));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %scan(&amp;amp;varlist_num.,&amp;amp;i.)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; array have_num(*) &amp;amp;vars_num.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; retain want_num;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if first.&amp;amp;lastby. then call missing(of want_num(*));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ___nnum=put(&amp;amp;id.,labelfmt.)*dim(have_num);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do ___i=1 to dim(have_num);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; want_num(___nnum+___i)=have_num(___i);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp; %end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; drop &amp;amp;id. ___: &amp;amp;var. &amp;amp;drop.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if last.&amp;amp;lastby. then output;&lt;BR /&gt;&amp;nbsp; run;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; data &amp;amp;libname_out..&amp;amp;out.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; retain &amp;amp;by. &amp;amp;to_copy. &amp;amp;varlist_all.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set &amp;amp;libname_out..&amp;amp;out.;&lt;BR /&gt;&amp;nbsp; run;&lt;BR /&gt;&lt;BR /&gt;/*Delete all temporary files*/&lt;BR /&gt;&amp;nbsp; proc delete data=work.t_e_m_p work._for_format;&lt;BR /&gt;&amp;nbsp; run;&lt;BR /&gt;&lt;BR /&gt;%mend transpose;&lt;BR /&gt;options NOQUOTELENMAX;&lt;BR /&gt;proc sort data=have out=need nodupkey;&lt;BR /&gt;&amp;nbsp; by time_m sym_root;&lt;BR /&gt;run;&lt;BR /&gt;&lt;BR /&gt;%transpose(data=need, out=want, by=time_m, id=sym_root,&lt;BR /&gt;delimiter=_,var=price size)&lt;/P&gt;</description>
      <pubDate>Sat, 27 May 2017 02:09:02 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/362117#M64514</guid>
      <dc:creator>kbl</dc:creator>
      <dc:date>2017-05-27T02:09:02Z</dc:date>
    </item>
    <item>
      <title>Re: Transposed data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/362119#M64515</link>
      <description>&lt;P&gt;Post your log. If the file HAVE was in your work directory, the file WANT should have been created in your work directory.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Art, CEO, AnalystFinder.com&lt;/P&gt;</description>
      <pubDate>Sat, 27 May 2017 02:13:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/362119#M64515</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2017-05-27T02:13:09Z</dc:date>
    </item>
    <item>
      <title>Re: Transposed data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/362120#M64516</link>
      <description>&lt;P&gt;Thanks a lot Art; this is the log:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;972&amp;nbsp; %macro transpose(libname_in=,&lt;BR /&gt;973&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; libname_out=,&lt;BR /&gt;974&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data=,&lt;BR /&gt;975&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out=,&lt;BR /&gt;976&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by=,&lt;BR /&gt;977&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; prefix=,&lt;BR /&gt;978&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var=,&lt;BR /&gt;979&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; autovars=,&lt;BR /&gt;980&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id=,&lt;BR /&gt;981&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; descendingid=,&lt;BR /&gt;982&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var_first=,&lt;BR /&gt;983&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; format=,&lt;BR /&gt;984&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; delimiter=,&lt;BR /&gt;985&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; copy=,&lt;BR /&gt;986&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; drop=,&lt;BR /&gt;987&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sort=,&lt;BR /&gt;988&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sort_options=,&lt;BR /&gt;989&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; use_varname=,&lt;BR /&gt;990&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; preloadfmt=,&lt;BR /&gt;991&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; guessingrows=,&lt;BR /&gt;992&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newid=);&lt;BR /&gt;993&lt;BR /&gt;994&amp;nbsp; /*Check whether the data and out parameters contain one or two-level filenames*/&lt;BR /&gt;995&amp;nbsp;&amp;nbsp;&amp;nbsp; %let lp=%sysfunc(findc(%superq(data),%str(%()));&lt;BR /&gt;996&amp;nbsp;&amp;nbsp;&amp;nbsp; %if &amp;amp;lp. %then %do;&lt;BR /&gt;997&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let rp=%sysfunc(findc(%superq(data),%str(%)),b));&lt;BR /&gt;998&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let dsoptions=%qsysfunc(substrn(%nrstr(%superq(data)),&amp;amp;lp+1,&amp;amp;rp-&amp;amp;lp-1));&lt;BR /&gt;999&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let data=%sysfunc(substrn(%nrstr(%superq(data)),1,%eval(&amp;amp;lp-1)));&lt;BR /&gt;1000&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1001&amp;nbsp;&amp;nbsp;&amp;nbsp; %else %let dsoptions=;&lt;BR /&gt;1002&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %sysfunc(countw(&amp;amp;data.)) eq 2 %then %do;&lt;BR /&gt;1003&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let libname_in=%scan(&amp;amp;data.,1);&lt;BR /&gt;1004&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let data=%scan(&amp;amp;data.,2);&lt;BR /&gt;1005&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1006&amp;nbsp;&amp;nbsp;&amp;nbsp; %else %if %length(&amp;amp;libname_in.) eq 0 %then %do;&lt;BR /&gt;1007&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let libname_in=work;&lt;BR /&gt;1008&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1009&lt;BR /&gt;1010&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %sysfunc(countw(&amp;amp;out.)) eq 2 %then %do;&lt;BR /&gt;1011&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let libname_out=%scan(&amp;amp;out.,1);&lt;BR /&gt;1012&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let out=%scan(&amp;amp;out.,2);&lt;BR /&gt;1013&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1014&amp;nbsp;&amp;nbsp;&amp;nbsp; %else %if %length(&amp;amp;libname_out.) eq 0 %then %do;&lt;BR /&gt;1015&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let libname_out=work;&lt;BR /&gt;1016&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1017&lt;BR /&gt;1018&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %length(&amp;amp;newid.) eq 0 %then %do;&lt;BR /&gt;1019&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let newid=row;&lt;BR /&gt;1020&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1021&lt;BR /&gt;1022&amp;nbsp;&amp;nbsp;&amp;nbsp; /*obtain last by variable*/&lt;BR /&gt;1023&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %length(&amp;amp;by.) gt 0 %then %do;&lt;BR /&gt;1024&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let lastby=%scan(&amp;amp;by.,-1);&lt;BR /&gt;1025&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1026&amp;nbsp;&amp;nbsp;&amp;nbsp; %else %do;&lt;BR /&gt;1027&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let lastby=;&lt;BR /&gt;1028&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1029&lt;BR /&gt;1030&amp;nbsp; /*Create macro variable to contain a list of variables to be copied*/&lt;BR /&gt;1031&amp;nbsp;&amp;nbsp; %let to_copy=;&lt;BR /&gt;1032&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %length(&amp;amp;copy.) gt 0 %then %do;&lt;BR /&gt;1033&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data t_e_m_p;&lt;BR /&gt;1034&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set &amp;amp;libname_in..&amp;amp;data. (obs=1 keep=&amp;amp;copy.);&lt;BR /&gt;1035&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;1036&lt;BR /&gt;1037&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc sql noprint;&lt;BR /&gt;1038&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select name&lt;BR /&gt;1039&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; into :to_copy separated by " "&lt;BR /&gt;1040&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from dictionary.columns&lt;BR /&gt;1041&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where libname="WORK" and&lt;BR /&gt;1042&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memname="T_E_M_P"&lt;BR /&gt;1043&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;1044&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quit;&lt;BR /&gt;1045&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1046&lt;BR /&gt;1047&amp;nbsp; /*Populate var parameter in the event it has a null value*/&lt;BR /&gt;1048&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %length(&amp;amp;var.) eq 0 %then %do;&lt;BR /&gt;1049&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data t_e_m_p;&lt;BR /&gt;1050&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set &amp;amp;libname_in..&amp;amp;data. (obs=1 drop=&amp;amp;by. &amp;amp;id. &amp;amp;copy.);&lt;BR /&gt;1051&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;1052&lt;BR /&gt;1053&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc sql noprint;&lt;BR /&gt;1054&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select name&lt;BR /&gt;1055&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; into :var separated by " "&lt;BR /&gt;1056&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from dictionary.columns&lt;BR /&gt;1057&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where libname="WORK" and&lt;BR /&gt;1058&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memname="T_E_M_P"&lt;BR /&gt;1059&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %sysfunc(upcase("&amp;amp;autovars.")) eq "CHAR" %then %do;&lt;BR /&gt;1060&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and type="char"&lt;BR /&gt;1061&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1062&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else %if %sysfunc(upcase("&amp;amp;autovars.")) ne "ALL" %then %do;&lt;BR /&gt;1063&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and type="num"&lt;BR /&gt;1064&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1065&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;1066&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quit;&lt;BR /&gt;1067&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1068&lt;BR /&gt;1069&amp;nbsp; /*Initialize macro variables*/&lt;BR /&gt;1070&amp;nbsp;&amp;nbsp;&amp;nbsp; %let vars_char=;&lt;BR /&gt;1071&amp;nbsp;&amp;nbsp;&amp;nbsp; %let varlist_char=;&lt;BR /&gt;1072&amp;nbsp;&amp;nbsp;&amp;nbsp; %let vars_num=;&lt;BR /&gt;1073&amp;nbsp;&amp;nbsp;&amp;nbsp; %let varlist_num=;&lt;BR /&gt;1074&amp;nbsp;&amp;nbsp;&amp;nbsp; %let formats_char=;&lt;BR /&gt;1075&amp;nbsp;&amp;nbsp;&amp;nbsp; %let format_char=;&lt;BR /&gt;1076&amp;nbsp;&amp;nbsp;&amp;nbsp; %let formats_num=;&lt;BR /&gt;1077&amp;nbsp;&amp;nbsp;&amp;nbsp; %let format_num=;&lt;BR /&gt;1078&lt;BR /&gt;1079&amp;nbsp; /*Create file t_e_m_p to contain one record with all var variables*/&lt;BR /&gt;1080&amp;nbsp;&amp;nbsp;&amp;nbsp; data t_e_m_p;&lt;BR /&gt;1081&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set &amp;amp;libname_in..&amp;amp;data. (obs=1 keep=&amp;amp;var.);&lt;BR /&gt;1082&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;1083&lt;BR /&gt;1084&amp;nbsp; /*Create macro variables containing untransposed var names and formats*/&lt;BR /&gt;1085&amp;nbsp;&amp;nbsp;&amp;nbsp; proc sql noprint;&lt;BR /&gt;1086&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select name, case&lt;BR /&gt;1087&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when missing(format) then " $"||strip(put(length,5.))||'.'&lt;BR /&gt;1088&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else strip(format)&lt;BR /&gt;1089&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;BR /&gt;1090&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; into :vars_char separated by " ",&lt;BR /&gt;1091&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :formats_char separated by "~"&lt;BR /&gt;1092&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from dictionary.columns&lt;BR /&gt;1093&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where libname="WORK" and&lt;BR /&gt;1094&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memname="T_E_M_P" and&lt;BR /&gt;1095&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type="char"&lt;BR /&gt;1096&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;1097&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select name, case&lt;BR /&gt;1098&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when missing(format) then "best12."&lt;BR /&gt;1099&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else strip(format)&lt;BR /&gt;1100&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;BR /&gt;1101&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; into :vars_num separated by " ",&lt;BR /&gt;1102&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :formats_num separated by "~"&lt;BR /&gt;1103&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from dictionary.columns&lt;BR /&gt;1104&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where libname="WORK" and&lt;BR /&gt;1105&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memname="T_E_M_P" and&lt;BR /&gt;1106&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type="num"&lt;BR /&gt;1107&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;1108&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select name&lt;BR /&gt;1109&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; into :vars_all separated by " "&lt;BR /&gt;1110&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from dictionary.columns&lt;BR /&gt;1111&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where libname="WORK" and&lt;BR /&gt;1112&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memname="T_E_M_P"&lt;BR /&gt;1113&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;1114&amp;nbsp;&amp;nbsp;&amp;nbsp; quit;&lt;BR /&gt;1115&lt;BR /&gt;1116&amp;nbsp; /*If sort parameter has a value of YES, create a sorted temporary data file*/&lt;BR /&gt;1117&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %sysfunc(upcase("&amp;amp;sort.")) eq "YES" %then %do;&lt;BR /&gt;1118&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let notsorted=;&lt;BR /&gt;1119&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc sort data=&amp;amp;libname_in..&amp;amp;data.&lt;BR /&gt;1120&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;BR /&gt;1121&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; keep=&amp;amp;by. &amp;amp;id. &amp;amp;vars_char. &amp;amp;vars_num. &amp;amp;to_copy.&lt;BR /&gt;1122&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;dsoptions.&lt;BR /&gt;1123&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;BR /&gt;1124&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out=t_e_m_p &amp;amp;sort_options. noequals;&lt;BR /&gt;1125&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by &amp;amp;by.;&lt;BR /&gt;1126&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;1127&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let data=t_e_m_p;&lt;BR /&gt;1128&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let libname_in=work;&lt;BR /&gt;1129&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1130&amp;nbsp;&amp;nbsp;&amp;nbsp; %else %do;&lt;BR /&gt;1131&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let notsorted=notsorted;&lt;BR /&gt;1132&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1133&lt;BR /&gt;1134&amp;nbsp;&amp;nbsp;&amp;nbsp; /*if no id parameter is present, create one from &amp;amp;newid.*/&lt;BR /&gt;1135&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %length(&amp;amp;id.) eq 0 %then %do;&lt;BR /&gt;1136&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data t_e_m_p;&lt;BR /&gt;1137&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set &amp;amp;libname_in..&amp;amp;data.;&lt;BR /&gt;1138&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by &amp;amp;by.;&lt;BR /&gt;1139&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if first.&amp;amp;lastby then &amp;amp;newid.=1;&lt;BR /&gt;1140&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else &amp;amp;newid+1;&lt;BR /&gt;1141&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;1142&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let id=&amp;amp;newid.;&lt;BR /&gt;1143&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let data=t_e_m_p;&lt;BR /&gt;1144&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let libname_in=work;&lt;BR /&gt;1145&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1146&lt;BR /&gt;1147&amp;nbsp; /*Ensure guessingrows parameter contains a value*/&lt;BR /&gt;1148&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %length(&amp;amp;guessingrows.) eq 0 %then %do;&lt;BR /&gt;1149&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let guessingrows=%sysfunc(constant(EXACTINT));&lt;BR /&gt;1150&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1151&lt;BR /&gt;1152&amp;nbsp; /*Ensure a format is assigned to an id variable*/&lt;BR /&gt;1153&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %length(&amp;amp;id.) gt 0 %then %do;&lt;BR /&gt;1154&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc sql noprint;&lt;BR /&gt;1155&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select type,length,%sysfunc(strip(format))&lt;BR /&gt;1156&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; into :tr_macro_type, :tr_macro_len, :tr_macro_format&lt;BR /&gt;1157&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from dictionary.columns&lt;BR /&gt;1158&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where libname="%sysfunc(upcase(&amp;amp;libname_in.))" and&lt;BR /&gt;1159&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memname="%sysfunc(upcase(&amp;amp;data.))" and&lt;BR /&gt;1160&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; upcase(name)="%sysfunc(upcase(&amp;amp;id.))"&lt;BR /&gt;1161&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;1162&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quit;&lt;BR /&gt;1163&lt;BR /&gt;1164&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %length(&amp;amp;format.) eq 0 %then %do;&lt;BR /&gt;1165&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let optsave=%sysfunc(getoption(missing),$quote.);&lt;BR /&gt;1166&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; options missing=.;&lt;BR /&gt;1167&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %length(&amp;amp;tr_macro_format.) gt 0 %then %do;&lt;BR /&gt;1168&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let format=&amp;amp;tr_macro_format.;&lt;BR /&gt;1169&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1170&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else %if "&amp;amp;tr_macro_type." eq "num " %then %do;&lt;BR /&gt;1171&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let format=%sysfunc(catt(best,&amp;amp;tr_macro_len.,%str(.)));&lt;BR /&gt;1172&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1173&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else %do;&lt;BR /&gt;1174&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let format=%sysfunc(catt($,&amp;amp;tr_macro_len.,%str(.)));&lt;BR /&gt;1175&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1176&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; options missing=&amp;amp;optsave;&lt;BR /&gt;1177&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1178&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1179&lt;BR /&gt;1180&amp;nbsp; /*Create macro variables containing ordered lists of the requested transposed variable&lt;BR /&gt;1181&amp;nbsp;&amp;nbsp;&amp;nbsp; names for character (varlist_char) and numeric (varlist_num) var variables */&lt;BR /&gt;1182&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %length(&amp;amp;preloadfmt.) gt 0 %then %do;&lt;BR /&gt;1183&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %sysfunc(countw(&amp;amp;preloadfmt.)) eq 1 %then %do;&lt;BR /&gt;1184&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let preloadfmt=&amp;amp;libname_in..&amp;amp;preloadfmt.;&lt;BR /&gt;1185&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1186&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1187&amp;nbsp;&amp;nbsp;&amp;nbsp; %else %do;&lt;BR /&gt;1188&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %sysfunc(upcase("&amp;amp;sort.")) eq "YES" %then&lt;BR /&gt;1189&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let dsoptions=;&lt;BR /&gt;1190&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc freq data=&amp;amp;libname_in..&amp;amp;data. (obs=&amp;amp;guessingrows. keep=&amp;amp;id. &amp;amp;dsoptions.)&lt;BR /&gt;1191&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; noprint;&lt;BR /&gt;1192&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tables &amp;amp;id./out=_for_format (keep=&amp;amp;id.);&lt;BR /&gt;1193&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;1194&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %sysfunc(upcase("&amp;amp;descendingid.")) eq "YES" %then %do;&lt;BR /&gt;1195&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc sort data=_for_format;&lt;BR /&gt;1196&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by descending &amp;amp;id;&lt;BR /&gt;1197&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;1198&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1199&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data _for_format;&lt;BR /&gt;1200&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set _for_format;&lt;BR /&gt;1201&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; order=_n_;&lt;BR /&gt;1202&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;1203&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1204&lt;BR /&gt;1205&amp;nbsp;&amp;nbsp; proc sql noprint;&lt;BR /&gt;1206&amp;nbsp;&amp;nbsp;&amp;nbsp; %do i=1 %to 2;&lt;BR /&gt;1207&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if &amp;amp;i. eq 1 %then %let i_type=char;&lt;BR /&gt;1208&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else %let i_type=num;&lt;BR /&gt;1209&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %length(&amp;amp;&amp;amp;vars_&amp;amp;i_type.) gt 0 %then %do;&lt;BR /&gt;1210&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select distinct&lt;BR /&gt;1211&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %do j=1 %to 2;&lt;BR /&gt;1212&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if &amp;amp;j. eq 1 %then %let j_type=;&lt;BR /&gt;1213&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else %let j_type=format;&lt;BR /&gt;1214&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %do k=1 %to %sysfunc(countw(&amp;amp;&amp;amp;vars_&amp;amp;i_type.));&lt;BR /&gt;1215&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;amp;j_type. "||cats("&amp;amp;prefix.",&lt;BR /&gt;1216&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %sysfunc(upcase("&amp;amp;var_first.")) eq "NO" %then %do;&lt;BR /&gt;1217&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put(&amp;amp;id.,&amp;amp;format),"&amp;amp;delimiter."&lt;BR /&gt;1218&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %sysfunc(upcase("&amp;amp;use_varname.")) ne "NO" %then&lt;BR /&gt;1219&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,scan("&amp;amp;&amp;amp;vars_&amp;amp;i_type.",&amp;amp;k.);&lt;BR /&gt;1220&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1221&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else %do;&lt;BR /&gt;1222&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %sysfunc(upcase("&amp;amp;use_varname.")) ne "NO" %then&lt;BR /&gt;1223&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; scan("&amp;amp;&amp;amp;vars_&amp;amp;i_type.",&amp;amp;k.),;&lt;BR /&gt;1224&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;amp;delimiter.",put(&amp;amp;id.,&amp;amp;format)&lt;BR /&gt;1225&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1226&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR /&gt;1227&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if &amp;amp;j. eq 2 %then&lt;BR /&gt;1228&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ||" "||cats(scan("&amp;amp;&amp;amp;formats_&amp;amp;i_type.",&amp;amp;k.,"~"),";");&lt;BR /&gt;1229&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if &amp;amp;k. lt %sysfunc(countw(&amp;amp;&amp;amp;vars_&amp;amp;i_type.)) %then ||;&lt;BR /&gt;1230&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else ,;&lt;BR /&gt;1231&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1232&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1233&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if "&amp;amp;tr_macro_type." eq "num " %then &amp;amp;id. format=best12.;&lt;BR /&gt;1234&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else &amp;amp;id.;&lt;BR /&gt;1235&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,order&lt;BR /&gt;1236&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; into :varlist_&amp;amp;i_type. separated by " ",&lt;BR /&gt;1237&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :format_&amp;amp;i_type. separated by " ",&lt;BR /&gt;1238&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :idlist separated by " ",&lt;BR /&gt;1239&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :idorder separated by " "&lt;BR /&gt;1240&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %length(&amp;amp;preloadfmt.) gt 0 %then from &amp;amp;preloadfmt.;&lt;BR /&gt;1241&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else from _for_format;&lt;BR /&gt;1242&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; order by order&lt;BR /&gt;1243&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;1244&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let num_numlabels=&amp;amp;sqlobs.;&lt;BR /&gt;1245&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1246&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1247&amp;nbsp;&amp;nbsp;&amp;nbsp; quit;&lt;BR /&gt;1248&lt;BR /&gt;1249&amp;nbsp;&amp;nbsp;&amp;nbsp; proc sql noprint;&lt;BR /&gt;1250&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select distinct&lt;BR /&gt;1251&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let j_type=;&lt;BR /&gt;1252&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %do k=1 %to %sysfunc(countw(&amp;amp;&amp;amp;vars_all.));&lt;BR /&gt;1253&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;amp;j_type. "||cats("&amp;amp;prefix.",&lt;BR /&gt;1254&lt;BR /&gt;1255&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %sysfunc(upcase("&amp;amp;var_first.")) eq "NO" %then %do;&lt;BR /&gt;1256&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put(&amp;amp;id.,&amp;amp;format),"&amp;amp;delimiter.",&lt;BR /&gt;1257&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %sysfunc(upcase("&amp;amp;use_varname.")) ne "NO" %then&lt;BR /&gt;1258&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; scan("&amp;amp;&amp;amp;vars_all.",&amp;amp;k.);&lt;BR /&gt;1259&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR /&gt;1260&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1261&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else %do;&lt;BR /&gt;1262&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %sysfunc(upcase("&amp;amp;use_varname.")) ne "NO" %then&lt;BR /&gt;1263&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; scan("&amp;amp;&amp;amp;vars_all.",&amp;amp;k.),;&lt;BR /&gt;1264&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;amp;delimiter.",put(&amp;amp;id.,&amp;amp;format))&lt;BR /&gt;1265&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1266&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if &amp;amp;k. lt %sysfunc(countw(&amp;amp;&amp;amp;vars_all.)) %then ||;&lt;BR /&gt;1267&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else ,;&lt;BR /&gt;1268&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1269&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; order&lt;BR /&gt;1270&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; into :varlist_all separated by " ",&lt;BR /&gt;1271&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :idorder separated by " "&lt;BR /&gt;1272&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %length(&amp;amp;preloadfmt.) gt 0 %then from &amp;amp;preloadfmt.;&lt;BR /&gt;1273&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else from _for_format;&lt;BR /&gt;1274&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; order by order&lt;BR /&gt;1275&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;1276&amp;nbsp;&amp;nbsp;&amp;nbsp; quit;&lt;BR /&gt;1277&lt;BR /&gt;1278&amp;nbsp; /*Create a format that will be used to assign values to the transposed variables*/&lt;BR /&gt;1279&amp;nbsp;&amp;nbsp;&amp;nbsp; data _for_format;&lt;BR /&gt;1280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %length(&amp;amp;preloadfmt.) gt 0 %then set &amp;amp;preloadfmt. (rename=(&amp;amp;id.=start));&lt;BR /&gt;1281&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else set _for_format&amp;nbsp; (rename=(&amp;amp;id.=start));&lt;BR /&gt;1282&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;1283&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if "&amp;amp;tr_macro_type." eq "num " %then retain fmtname "labelfmt" type "N";&lt;BR /&gt;1284&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else retain fmtname "$labelfmt" type "C";&lt;BR /&gt;1285&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;1286&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; label=&lt;BR /&gt;1287&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %length(&amp;amp;preloadfmt.) eq 0 %then _n_-1;&lt;BR /&gt;1288&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else order-1;&lt;BR /&gt;1289&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;1290&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;1291&lt;BR /&gt;1292&amp;nbsp;&amp;nbsp;&amp;nbsp; proc format cntlin = _for_format;&lt;BR /&gt;1293&amp;nbsp;&amp;nbsp;&amp;nbsp; run ;&lt;BR /&gt;1294&lt;BR /&gt;1295&amp;nbsp; /*Create and run the datastep that does the transposition*/&lt;BR /&gt;1296&amp;nbsp;&amp;nbsp;&amp;nbsp; data &amp;amp;libname_out..&amp;amp;out.;&lt;BR /&gt;1297&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set &amp;amp;libname_in..&amp;amp;data. (keep=&amp;amp;by. &amp;amp;id.&lt;BR /&gt;1298&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %do i=1 %to %sysfunc(countw("&amp;amp;vars_char."));&lt;BR /&gt;1299&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %scan(&amp;amp;vars_char.,&amp;amp;i.)&lt;BR /&gt;1300&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1301&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %do i=1 %to %sysfunc(countw("&amp;amp;vars_num."));&lt;BR /&gt;1302&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %scan(&amp;amp;vars_num.,&amp;amp;i.)&lt;BR /&gt;1303&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1304&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %do i=1 %to %sysfunc(countw("&amp;amp;to_copy."));&lt;BR /&gt;1305&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %scan(&amp;amp;to_copy.,&amp;amp;i.)&lt;BR /&gt;1306&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1307&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;dsoptions.&lt;BR /&gt;1308&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;BR /&gt;1309&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by &amp;amp;by. &amp;amp;notsorted.;&lt;BR /&gt;1310&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;format_char. &amp;amp;format_num.&lt;BR /&gt;1311&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %length(&amp;amp;vars_char.) gt 0 %then %do;&lt;BR /&gt;1312&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array want_char(*) $&lt;BR /&gt;1313&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %do i=1 %to %eval(&amp;amp;num_numlabels.*%sysfunc(countw("&amp;amp;vars_char.")));&lt;BR /&gt;1314&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %scan(&amp;amp;varlist_char.,&amp;amp;i.)&lt;BR /&gt;1315&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1316&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;1317&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array have_char(*) $ &amp;amp;vars_char.;&lt;BR /&gt;1318&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retain want_char;&lt;BR /&gt;1319&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if first.&amp;amp;lastby. then call missing(of want_char(*));&lt;BR /&gt;1320&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ___nchar=put(&amp;amp;id.,labelfmt.)*dim(have_char);&lt;BR /&gt;1321&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do ___i=1 to dim(have_char);&lt;BR /&gt;1322&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; want_char(___nchar+___i)=have_char(___i);&lt;BR /&gt;1323&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;1324&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1325&amp;nbsp;&amp;nbsp;&amp;nbsp; %if %length(&amp;amp;vars_num.) gt 0 %then %do;&lt;BR /&gt;1326&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array want_num(*)&lt;BR /&gt;1327&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %do i=1 %to %eval(&amp;amp;num_numlabels.*%sysfunc(countw("&amp;amp;vars_num.")));&lt;BR /&gt;1328&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %scan(&amp;amp;varlist_num.,&amp;amp;i.)&lt;BR /&gt;1329&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1330&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;1331&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array have_num(*) &amp;amp;vars_num.;&lt;BR /&gt;1332&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retain want_num;&lt;BR /&gt;1333&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if first.&amp;amp;lastby. then call missing(of want_num(*));&lt;BR /&gt;1334&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ___nnum=put(&amp;amp;id.,labelfmt.)*dim(have_num);&lt;BR /&gt;1335&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do ___i=1 to dim(have_num);&lt;BR /&gt;1336&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; want_num(___nnum+___i)=have_num(___i);&lt;BR /&gt;1337&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;1338&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;1339&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; drop &amp;amp;id. ___: &amp;amp;var. &amp;amp;drop.;&lt;BR /&gt;1340&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if last.&amp;amp;lastby. then output;&lt;BR /&gt;1341&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;1342&lt;BR /&gt;1343&amp;nbsp;&amp;nbsp;&amp;nbsp; data &amp;amp;libname_out..&amp;amp;out.;&lt;BR /&gt;1344&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retain &amp;amp;by. &amp;amp;to_copy. &amp;amp;varlist_all.;&lt;BR /&gt;1345&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set &amp;amp;libname_out..&amp;amp;out.;&lt;BR /&gt;1346&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;1347&lt;BR /&gt;1348&amp;nbsp; /*Delete all temporary files*/&lt;BR /&gt;1349&amp;nbsp;&amp;nbsp;&amp;nbsp; proc delete data=work.t_e_m_p work._for_format;&lt;BR /&gt;1350&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;1351&lt;BR /&gt;1352&amp;nbsp; %mend transpose;&lt;BR /&gt;1353&amp;nbsp; options NOQUOTELENMAX;&lt;BR /&gt;1354&amp;nbsp; proc sort data=have out=need nodupkey;&lt;BR /&gt;1355&amp;nbsp;&amp;nbsp;&amp;nbsp; by time_m sym_root;&lt;BR /&gt;1356&amp;nbsp; run;&lt;BR /&gt;1357&lt;BR /&gt;1358&amp;nbsp; %transpose(data=need, out=want, by=time_m, id=sym_root,&lt;BR /&gt;1359&amp;nbsp; delimiter=_,var=price size)&lt;/P&gt;</description>
      <pubDate>Sat, 27 May 2017 02:16:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/362120#M64516</guid>
      <dc:creator>kbl</dc:creator>
      <dc:date>2017-05-27T02:16:26Z</dc:date>
    </item>
    <item>
      <title>Re: Transposed data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/362121#M64517</link>
      <description>&lt;P&gt;When your ran the code to first create the file have, did you check to see that it had actually run and created that file?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Honestly, I don't know what the problem might be! My guess is that something you ran prior to running the macro that caused SAS to stall. Close SAS and then restart it. Then run the same code as you ran before .. including first running your data step to create the file have.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Art, CEO, AnalystFinder.com&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 27 May 2017 02:22:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/362121#M64517</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2017-05-27T02:22:33Z</dc:date>
    </item>
    <item>
      <title>Re: Transposed data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/362123#M64519</link>
      <description>&lt;P&gt;Well, you were right.&amp;nbsp; Once I shut down and restarted SAS, the file ran further.&amp;nbsp; And you were also correct: there is an issue with the work file. This is the log error; how do I correct this?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;381&amp;nbsp; %mend transpose;&lt;BR /&gt;382&amp;nbsp; options NOQUOTELENMAX;&lt;BR /&gt;383&amp;nbsp; proc sort data=have out=need nodupkey;&lt;BR /&gt;ERROR: File WORK.HAVE.DATA does not exist.&lt;BR /&gt;384&amp;nbsp;&amp;nbsp;&amp;nbsp; by time_m sym_root;&lt;BR /&gt;385&amp;nbsp; run;&lt;BR /&gt;&lt;BR /&gt;NOTE: The SAS System stopped processing this step because of errors.&lt;BR /&gt;WARNING: The data set WORK.NEED may be incomplete.&amp;nbsp; When this step was stopped there were 0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; observations and 0 variables.&lt;BR /&gt;NOTE: PROCEDURE SORT used (Total process time):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.06 seconds&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.03 seconds&lt;BR /&gt;&lt;BR /&gt;386&lt;BR /&gt;387&amp;nbsp; %transpose(data=need, out=want, by=time_m, id=sym_root,&lt;BR /&gt;388&amp;nbsp; delimiter=_,var=price size)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;ERROR: The variable price in the DROP, KEEP, or RENAME list has never been referenced.&lt;BR /&gt;ERROR: The variable size in the DROP, KEEP, or RENAME list has never been referenced.&lt;BR /&gt;&lt;BR /&gt;NOTE: The SAS System stopped processing this step because of errors.&lt;BR /&gt;WARNING: The data set WORK.T_E_M_P may be incomplete.&amp;nbsp; When this step was stopped there were 0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; observations and 0 variables.&lt;BR /&gt;NOTE: DATA statement used (Total process time):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.03 seconds&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.04 seconds&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
      <pubDate>Sat, 27 May 2017 02:39:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/362123#M64519</guid>
      <dc:creator>kbl</dc:creator>
      <dc:date>2017-05-27T02:39:52Z</dc:date>
    </item>
    <item>
      <title>Re: Transposed data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/362126#M64521</link>
      <description>&lt;P&gt;Just post the part of the log from the data step where you tried to create the file work.have&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Art, CEO, AnalystFinder.com&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 27 May 2017 02:43:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/362126#M64521</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2017-05-27T02:43:59Z</dc:date>
    </item>
    <item>
      <title>Re: Transposed data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/362128#M64522</link>
      <description>&lt;P&gt;Here &amp;nbsp;%macro transpose(libname_in=,&lt;BR /&gt;390&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; libname_out=,&lt;BR /&gt;391&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data= have,&lt;BR /&gt;392&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out= need,&lt;BR /&gt;393&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by=,&lt;BR /&gt;you go Art; I really appreciate all of your help.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 27 May 2017 02:54:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/362128#M64522</guid>
      <dc:creator>kbl</dc:creator>
      <dc:date>2017-05-27T02:54:08Z</dc:date>
    </item>
    <item>
      <title>Re: Transposed data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/362130#M64524</link>
      <description>&lt;P&gt;That is not what I need to see. I need to see the log from your running:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;Filename three 'G:\threeone.dat';
data have;
  infile  three expandtabs;
  input TIME_M $ SYM_ROOT $ SIZE PRICE TIME2;
run;
 
proc sort data=have out=need nodupkey;
  by time_m sym_root;
run;
&lt;/PRE&gt;
&lt;P&gt;Art, CEO, AnalystFinder.com&lt;/P&gt;</description>
      <pubDate>Sat, 27 May 2017 02:58:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/362130#M64524</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2017-05-27T02:58:54Z</dc:date>
    </item>
    <item>
      <title>Re: Transposed data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/362131#M64525</link>
      <description>&lt;P&gt;Here you go:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;77&amp;nbsp; Filename three 'G:\threeone.dat';&lt;BR /&gt;778&amp;nbsp; data have;&lt;BR /&gt;779&amp;nbsp;&amp;nbsp;&amp;nbsp; infile&amp;nbsp; three expandtabs;&lt;BR /&gt;780&amp;nbsp;&amp;nbsp;&amp;nbsp; input TIME_M $ SYM_ROOT $ SIZE PRICE TIME2;&lt;BR /&gt;781&amp;nbsp; run;&lt;BR /&gt;&lt;BR /&gt;NOTE: The infile THREE is:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Filename=G:\threeone.dat,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RECFM=V,LRECL=32767,File Size (bytes)=4860534,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Last Modified=26May2017:12:52:06,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Create Time=25May2017:23:18:31&lt;BR /&gt;&lt;BR /&gt;NOTE: 179219 records were read from the infile THREE.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The minimum record length was 19.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The maximum record length was 30.&lt;BR /&gt;NOTE: The data set WORK.HAVE has 179219 observations and 5 variables.&lt;BR /&gt;NOTE: DATA statement used (Total process time):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.24 seconds&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.17 seconds&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;782&lt;BR /&gt;783&amp;nbsp; proc sort data=have out=need nodupkey;&lt;BR /&gt;784&amp;nbsp;&amp;nbsp;&amp;nbsp; by time_m sym_root;&lt;BR /&gt;785&amp;nbsp; run;&lt;BR /&gt;&lt;BR /&gt;NOTE: There were 179219 observations read from the data set WORK.HAVE.&lt;BR /&gt;NOTE: 13934 observations with duplicate key values were deleted.&lt;BR /&gt;NOTE: The data set WORK.NEED has 165285 observations and 5 variables.&lt;BR /&gt;NOTE: PROCEDURE SORT used (Total process time):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.14 seconds&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.24 seconds&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
      <pubDate>Sat, 27 May 2017 03:01:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/362131#M64525</guid>
      <dc:creator>kbl</dc:creator>
      <dc:date>2017-05-27T03:01:10Z</dc:date>
    </item>
    <item>
      <title>Re: Transposed data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/362132#M64526</link>
      <description>&lt;P&gt;If you're still in the same session then just run:&lt;/P&gt;
&lt;PRE&gt;%transpose(data=need, out=want, by=time_m, id=sym_root,
delimiter=_,var=price size)&lt;/PRE&gt;
&lt;P&gt;Art, CEO, AnalystFinder.com&lt;/P&gt;</description>
      <pubDate>Sat, 27 May 2017 03:05:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transposed-data/m-p/362132#M64526</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2017-05-27T03:05:38Z</dc:date>
    </item>
  </channel>
</rss>

