<?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: Flatten a Data File with Dynamic Variable Names in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Flatten-a-Data-File-with-Dynamic-Variable-Names/m-p/129727#M26470</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This is amazing. Thank you so much for taking the time to help me out. &lt;/P&gt;&lt;P&gt;Mike Anas&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 04 May 2013 02:16:34 GMT</pubDate>
    <dc:creator>emikea</dc:creator>
    <dc:date>2013-05-04T02:16:34Z</dc:date>
    <item>
      <title>Flatten a Data File with Dynamic Variable Names</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flatten-a-Data-File-with-Dynamic-Variable-Names/m-p/129723#M26466</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello. I'm stumped by the following situation and would be grateful for any help.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have a dataset (D1) similar to this.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Metric&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Open&amp;nbsp;&amp;nbsp; BD1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BD2&lt;/P&gt;&lt;P&gt;MetricA&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 20&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 30&lt;/P&gt;&lt;P&gt;Metric2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 40&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 50&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 60&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;and I want to transform it into another (D2) which contains one row like this.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;MetricA_Open&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MetricA_BD1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MetricA_BD2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Metric2_Open&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Metric2_BD1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Metric2_BD2&lt;/P&gt;&lt;P&gt;10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 20&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 30&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 40&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 50&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 60&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My actual dataset is much larger with many rows and columns, so I can't hard code it. I'm currently creating a dataset for each metric and then joining each in SQL, but this doesn't scale well.&lt;/P&gt;&lt;P&gt;I feel it is probably possible to do this in one pass through the data and without creating tons of intermediate datasets, but I haven't been able to find a solution. Any help would be appreciated.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Mike&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 04 May 2013 00:53:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flatten-a-Data-File-with-Dynamic-Variable-Names/m-p/129723#M26466</guid>
      <dc:creator>emikea</dc:creator>
      <dc:date>2013-05-04T00:53:59Z</dc:date>
    </item>
    <item>
      <title>Re: Flatten a Data File with Dynamic Variable Names</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flatten-a-Data-File-with-Dynamic-Variable-Names/m-p/129724#M26467</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;How would you handle the remaining rows and columns? It seems strange to want to have all of the data in one column. Can you explain some more about what you're looking for?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 04 May 2013 01:04:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flatten-a-Data-File-with-Dynamic-Variable-Names/m-p/129724#M26467</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2013-05-04T01:04:59Z</dc:date>
    </item>
    <item>
      <title>Re: Flatten a Data File with Dynamic Variable Names</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flatten-a-Data-File-with-Dynamic-Variable-Names/m-p/129725#M26468</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Additional rows would lead to additional columns whose names would begin with the value in the Metric field. &lt;/P&gt;&lt;P&gt;If the next row was:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Metric3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 70&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 80&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 90&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;then D2 would have the additional columns of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Metric3_Open&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Metric3_BD1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Metric3_BD2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;To clarify, I want the resulting dataset to have one row, but it will have as many columns as required by the number of observations in the first dataset.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The reason I'm doing this is because I have hundreds and hundreds of datasets like D1 that each correspond to a particular date. I want to flatten each one out and then append them to each other to foster time series analysis. The number of columns in D1 is actually always going to be twenty some, so my solution can assume a limited and fixed number of columns in D1. For the sake of this question, we can just assume that Open, BD1, and BD2 are the only columns that we have to transform.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 04 May 2013 01:14:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flatten-a-Data-File-with-Dynamic-Variable-Names/m-p/129725#M26468</guid>
      <dc:creator>emikea</dc:creator>
      <dc:date>2013-05-04T01:14:59Z</dc:date>
    </item>
    <item>
      <title>Re: Flatten a Data File with Dynamic Variable Names</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flatten-a-Data-File-with-Dynamic-Variable-Names/m-p/129726#M26469</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Here is one way.&amp;nbsp; Convert it to vertical format and use PROC TRANSPOSE to generate the resulting variable names.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;&amp;nbsp; input Metric $ Open BD1 BD2 @@;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt; MetricA 10 20 30 Metric2 40 50 60&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;data temp / view=temp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set have;&lt;/P&gt;&lt;P&gt;&amp;nbsp; array _n _numeric_;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do _n_=1 to dim(_n);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _name_ = vname(_n(_n_));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; col1 = _n(_n_);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; keep metric _name_ col1 ;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;proc transpose data=temp out=want delimiter=_;&lt;/P&gt;&lt;P&gt;&amp;nbsp; id metric _name_ ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; var col1;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 04 May 2013 02:04:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flatten-a-Data-File-with-Dynamic-Variable-Names/m-p/129726#M26469</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2013-05-04T02:04:20Z</dc:date>
    </item>
    <item>
      <title>Re: Flatten a Data File with Dynamic Variable Names</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flatten-a-Data-File-with-Dynamic-Variable-Names/m-p/129727#M26470</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This is amazing. Thank you so much for taking the time to help me out. &lt;/P&gt;&lt;P&gt;Mike Anas&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 04 May 2013 02:16:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flatten-a-Data-File-with-Dynamic-Variable-Names/m-p/129727#M26470</guid>
      <dc:creator>emikea</dc:creator>
      <dc:date>2013-05-04T02:16:34Z</dc:date>
    </item>
    <item>
      <title>Re: Flatten a Data File with Dynamic Variable Names</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flatten-a-Data-File-with-Dynamic-Variable-Names/m-p/129728#M26471</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;input Metric $&amp;nbsp;&amp;nbsp; Open&amp;nbsp;&amp;nbsp; BD1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BD2;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;MetricA&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 20&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 30&lt;/P&gt;&lt;P&gt;Metric2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 40&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 50&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 60&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;proc sort data=have;&lt;/P&gt;&lt;P&gt;&amp;nbsp; by metric;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc transpose data=have out=have1 name=trans_name; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; by metric;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;data have2;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set have1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; new_name=catx('_',metric,trans_name);&lt;/P&gt;&lt;P&gt;&amp;nbsp; drop metric t_name;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;proc transpose data=have2 out=want(drop=_name_);&lt;/P&gt;&lt;P&gt;&amp;nbsp; id new_name;&lt;/P&gt;&lt;P&gt;&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;proc print;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 04 May 2013 02:19:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flatten-a-Data-File-with-Dynamic-Variable-Names/m-p/129728#M26471</guid>
      <dc:creator>slchen</dc:creator>
      <dc:date>2013-05-04T02:19:42Z</dc:date>
    </item>
    <item>
      <title>Re: Flatten a Data File with Dynamic Variable Names</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flatten-a-Data-File-with-Dynamic-Variable-Names/m-p/129729#M26472</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Another great solution. Thank you.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 04 May 2013 02:28:02 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flatten-a-Data-File-with-Dynamic-Variable-Names/m-p/129729#M26472</guid>
      <dc:creator>emikea</dc:creator>
      <dc:date>2013-05-04T02:28:02Z</dc:date>
    </item>
    <item>
      <title>Re: Flatten a Data File with Dynamic Variable Names</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flatten-a-Data-File-with-Dynamic-Variable-Names/m-p/129730#M26473</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;or pure data step code.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;data have;
&amp;nbsp; input Metric $ Open BD1 BD2 @@;
cards;
MetricA 10 20 30 Metric2 40 50 60
;
run;
proc sql noprint;
create table x as
select * from
 (select distinct metric from have),
 (select name from dictionary.columns where libname='WORK' and memname='HAVE');
 quit;
 data ;
&amp;nbsp; set x end=last;
&amp;nbsp; by metric ;
&amp;nbsp; if _n_ eq 1 then call execute('data want;merge ');
&amp;nbsp; if first.metric then call execute(cats('have(where=(metric="',metric,'") rename=('));
&amp;nbsp;&amp;nbsp; else call execute(cats(name,'=',metric,'_',name));
&amp;nbsp; if last.metric then call execute('))');
&amp;nbsp; if last then call execute(';drop metric;run;');
run;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Ksharp&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 04 May 2013 05:52:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flatten-a-Data-File-with-Dynamic-Variable-Names/m-p/129730#M26473</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2013-05-04T05:52:46Z</dc:date>
    </item>
    <item>
      <title>Re: Flatten a Data File with Dynamic Variable Names</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flatten-a-Data-File-with-Dynamic-Variable-Names/m-p/129731#M26474</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you Ksharp.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 04 May 2013 11:43:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flatten-a-Data-File-with-Dynamic-Variable-Names/m-p/129731#M26474</guid>
      <dc:creator>emikea</dc:creator>
      <dc:date>2013-05-04T11:43:11Z</dc:date>
    </item>
  </channel>
</rss>

