<?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: Stack database columns in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86323#M24628</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;yeaforme,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If your machine has enough memory, I would consider reading the entire data set into a two-dimensional array, then using loops to reconstruct the output.&amp;nbsp; It would take about 40MB of memory.&amp;nbsp; Here is the slower way (not too bad though, considering the size of your data set).&amp;nbsp; It runs through the entire data set for each Code, assumes your existing variables are actually named Header_1, Header_2, etc, and that the first row of data is the one that has all the Names in it.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; * If needed, add a LENGTH statement to widen the new variables;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; new_header_2='Code';&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; new_header_3=''Date';&lt;BR /&gt;&amp;nbsp;&amp;nbsp; new_header_4='Amount';&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; keep new_header_2 new_header_3 new_header_4;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if 0 then set have;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; array headers {*} header_:;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; do _i_ = 2 to dim(headers);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do _n_=2 to _nobs_;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have point=_n_ nobs=_nobs_;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if _n_=2 then new_header_2=headers{_i_};&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new_header_3 = header_1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new_header_4 = headers{_i_};&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; stop;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Sorry, I had placed a comment right in the middle of the program.&amp;nbsp; Still, this is untested code so it may need to be tweaked.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;And a subsequent correction to the calculation of new_header_2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Good luck.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 17 Apr 2012 14:45:45 GMT</pubDate>
    <dc:creator>Astounding</dc:creator>
    <dc:date>2012-04-17T14:45:45Z</dc:date>
    <item>
      <title>Stack database columns</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86320#M24625</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Kind of new to SAS - sorry if this question is easier than I think it is.&amp;nbsp; I'm trying to transform a dataset.&amp;nbsp; I believe proc transpose is the best way to go about it, but all the proc transpose examples I've found don't deal with my particular data structure.&amp;nbsp; What I currently have is the following:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE border="1" class="jiveBorder" style="border: 1px solid #000000; width: 100%;"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;Name&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;Jim&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;Bob&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;Sue&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;George&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;Code&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;101&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;105&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;216&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;412&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;Date1&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;1&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;4&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;4&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;6&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;Date2&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;1&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;3&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;2&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;6&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;Date3&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;5&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;7&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;8&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;7&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;Date4&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;5&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;1&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;6&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;8&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;What I want, is the following:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE border="1" class="jiveBorder" style="border: 1px solid #000000; width: 100%;"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;Code&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;Date&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;Amount&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;101&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;Date1&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;101&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;Date2&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;101&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;Date3&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;101&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;Date4&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;105&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;Date1&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;105&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;Date2&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;105&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;Date3&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;7&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;105&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;Date4&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;216&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;Date1&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;216&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;Date2&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;216&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;Date3&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;8&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;216&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;Date4&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;6&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;412&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;Date1&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;6&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;412&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;Date2&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;6&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;412&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;Date3&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;7&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;412&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;Date4&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;8&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Of course, the example is overly simplistic.&amp;nbsp; The actual data set has roughly 1000 IDs across 5000 Dates.&amp;nbsp; Any help would be appreciated.&amp;nbsp; Cheers!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;EDIT: Changed to remove header which should not have existed.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Apr 2012 01:02:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86320#M24625</guid>
      <dc:creator>yeaforme</dc:creator>
      <dc:date>2012-04-17T01:02:49Z</dc:date>
    </item>
    <item>
      <title>Re: Stack database columns</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86321#M24626</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hoooooh. That is really not easy.&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;&lt;PRE&gt;data x;
infile cards expandtabs;
input Name $&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Jim&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Bob&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sue&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;George ;
cards;
Code&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;101&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;105&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;216&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;412
Date1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6
Date2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6
Date3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7
Date4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8
;
run;
data _null_;
dsid=open("x","i");
num=attrn(dsid,"nvars");
do i=2 to num;
 n+1;
 name=catx(',',catt(varname(dsid,1),' as date'),catt(varname(dsid,i),' as amount'));
 call symputx(cats('name',n),name);
end;
&amp;nbsp; call symputx('n',num-1);
rc=close(dsid);
run;
data _null_;
 set x(obs=1);
 array _v{*} _numeric_;
 do i=1 to dim(_v);
&amp;nbsp; call symputx(cats('value',i),_v{i}) ;
 end;
run;
%put _user_;

%macro stack;
proc sql;
create table want as 
%do i=1 %to &amp;amp;n;
 select "&amp;amp;&amp;amp;value&amp;amp;i" as code,&amp;amp;&amp;amp;name&amp;amp;i from x(firstobs=2) 
 %if &amp;amp;i ne &amp;amp;n %then %do; union all&amp;nbsp; %end;
%end;
 ;
quit;
%mend stack;

 %stack



&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;&lt;/P&gt;&lt;P&gt;Ksharp&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Apr 2012 05:07:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86321#M24626</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2012-04-17T05:07:44Z</dc:date>
    </item>
    <item>
      <title>Re: Stack database columns</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86322#M24627</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'm just curious. What is the purpose of the "Header 1", "Header 2", etc. Are they standing in for variable names? SAS variable names cannot contain spaces, so are you showing a PROC PRINT of the ACTUAL dataset or of the dummy dataset? If so, are "Header 1", "Header 2", etc the variable labels??? Can you explain in the before/after, what happens to the NAME information?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;cynthia&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Apr 2012 13:58:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86322#M24627</guid>
      <dc:creator>Cynthia_sas</dc:creator>
      <dc:date>2012-04-17T13:58:57Z</dc:date>
    </item>
    <item>
      <title>Re: Stack database columns</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86323#M24628</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;yeaforme,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If your machine has enough memory, I would consider reading the entire data set into a two-dimensional array, then using loops to reconstruct the output.&amp;nbsp; It would take about 40MB of memory.&amp;nbsp; Here is the slower way (not too bad though, considering the size of your data set).&amp;nbsp; It runs through the entire data set for each Code, assumes your existing variables are actually named Header_1, Header_2, etc, and that the first row of data is the one that has all the Names in it.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; * If needed, add a LENGTH statement to widen the new variables;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; new_header_2='Code';&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; new_header_3=''Date';&lt;BR /&gt;&amp;nbsp;&amp;nbsp; new_header_4='Amount';&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; keep new_header_2 new_header_3 new_header_4;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if 0 then set have;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; array headers {*} header_:;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; do _i_ = 2 to dim(headers);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do _n_=2 to _nobs_;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have point=_n_ nobs=_nobs_;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if _n_=2 then new_header_2=headers{_i_};&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new_header_3 = header_1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new_header_4 = headers{_i_};&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; stop;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Sorry, I had placed a comment right in the middle of the program.&amp;nbsp; Still, this is untested code so it may need to be tweaked.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;And a subsequent correction to the calculation of new_header_2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Good luck.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Apr 2012 14:45:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86323#M24628</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2012-04-17T14:45:45Z</dc:date>
    </item>
    <item>
      <title>Re: Stack database columns</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86324#M24629</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Sorry, headers should not have been there.&amp;nbsp; I apologize for the oversight and have edited the original post to reflect that.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Apr 2012 15:11:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86324#M24629</guid>
      <dc:creator>yeaforme</dc:creator>
      <dc:date>2012-04-17T15:11:45Z</dc:date>
    </item>
    <item>
      <title>Re: Stack database columns</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86325#M24630</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;OK, the program changes but not by much.&amp;nbsp; This version assumes that all your fields are character.&amp;nbsp; It's easier to program if we can assume that the first column is character but the rest are numeric:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have (keep=code date amount);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if 0 then set have (drop=name);&amp;nbsp; /* Make sure NAME is not part of the array */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; array names {*} _character_;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; length code&amp;nbsp; date amount $ 8;&amp;nbsp; /* MUST come AFTER array statement */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; do _i_=1 to dim(names);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do _n_=1 to _nobs_;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have point=_n_ nobs=_nobs_;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if _n_=1 then code = names{_i_};&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; date = name;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; amount = names{_i_};&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; stop;&amp;nbsp;&amp;nbsp; /* DO NOT OMIT THIS or you will loop forever */&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;As usual, it's untested.&amp;nbsp; Good luck.&amp;nbsp; (Not sure I'll be around to follow up but I'll try.)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Small correction to array reference, using the right array name.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Apr 2012 15:30:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86325#M24630</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2012-04-17T15:30:42Z</dc:date>
    </item>
    <item>
      <title>Re: Stack database columns</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86326#M24631</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Also, the data is sitting in CSV files at the moment - does that alter the code significantly as well?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Apr 2012 15:58:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86326#M24631</guid>
      <dc:creator>yeaforme</dc:creator>
      <dc:date>2012-04-17T15:58:25Z</dc:date>
    </item>
    <item>
      <title>Re: Stack database columns</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86327#M24632</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;data foo;&lt;/P&gt;&lt;P&gt; infile cards dlm=',';&lt;/P&gt;&lt;P&gt; input (var val1-val4) ($);&lt;/P&gt;&lt;P&gt; cards;&lt;/P&gt;&lt;P&gt;Name,Jim,Bob,Sue,George&lt;/P&gt;&lt;P&gt;Code,101,105,216,412&lt;/P&gt;&lt;P&gt;Date1,1,4,4,6&lt;/P&gt;&lt;P&gt;Date2,1,3,2,6&lt;/P&gt;&lt;P&gt;Date3,5,7,8,7&lt;/P&gt;&lt;P&gt;Date4,5,1,6,8&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc transpose data=foo out=bar(drop=_: name);&lt;/P&gt;&lt;P&gt; id var;&lt;/P&gt;&lt;P&gt; var val1-val4;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sort data=bar; by code; run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc transpose data=bar out=want(rename=( _name_=Date col1=Amount));&lt;/P&gt;&lt;P&gt; by code;&lt;/P&gt;&lt;P&gt; var date1-date4;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc print data=want noobs; run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P align="center"&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;TABLE cellspacing="0" class="Table"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD colspan="1"&gt;Code&lt;/TD&gt;&lt;TD colspan="1"&gt;Date&lt;/TD&gt;&lt;TD colspan="1"&gt;Amount&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;101&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;Date1&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;101&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;Date2&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;101&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;Date3&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;101&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;Date4&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;105&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;Date1&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;105&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;Date2&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;105&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;Date3&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;7&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;105&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;Date4&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;216&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;Date1&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;216&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;Date2&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;216&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;Date3&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;8&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;216&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;Date4&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;6&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;412&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;Date1&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;6&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;412&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;Date2&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;6&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;412&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;Date3&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;7&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;412&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;Date4&lt;/TD&gt;&lt;TD class="Data" nowrap="nowrap" style="text-align: left;"&gt;8&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Apr 2012 16:44:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86327#M24632</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2012-04-17T16:44:20Z</dc:date>
    </item>
    <item>
      <title>Re: Stack database columns</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86328#M24633</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Another approach:&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;input Name$ Jim Bob Sue George;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;Code 101 105 216 412&lt;/P&gt;&lt;P&gt;Date1 1 4 4 6&lt;/P&gt;&lt;P&gt;Date2 1 3 2 6&lt;/P&gt;&lt;P&gt;Date3 5 7 8 7&lt;/P&gt;&lt;P&gt;Date4 5 1 6 8&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc transpose data=have out=w1;&lt;/P&gt;&lt;P&gt;by name;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;create table want(drop=_name_ rename=(name=date col1=amount)) as&lt;/P&gt;&lt;P&gt;select b.*,a.col1 as code from w1(where= (name='Code')) a&lt;/P&gt;&lt;P&gt;left join&lt;/P&gt;&lt;P&gt;w1(where= (name ne 'Code')) b&lt;/P&gt;&lt;P&gt;on a._name_=b._name_&lt;/P&gt;&lt;P&gt;order by code, name;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc print;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Haikuo &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Apr 2012 17:20:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86328#M24633</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2012-04-17T17:20:41Z</dc:date>
    </item>
    <item>
      <title>Re: Stack database columns</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86329#M24634</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Another way&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data foo;&lt;/P&gt;&lt;P&gt;infile cards dlm=',';&lt;/P&gt;&lt;P&gt;length var1-var6 $10 vals1 $1 vals2-vals6 $32767; /* the average length of the 1,000 ids will need to be less then 32bytes */&lt;/P&gt;&lt;P&gt;input var1 vals1 &amp;amp;&amp;amp; var2 vals2 &amp;amp;&amp;amp; var3 vals3 &amp;amp;&amp;amp; var4 vals4 &amp;amp;&amp;amp; var5 vals5 &amp;amp;&amp;amp; var6 vals6 &amp;amp;&amp;amp;; * create this as macro for more columns;&lt;/P&gt;&lt;P&gt;dates=catx(',',of var3-var6); *what rows were the dates on;&lt;/P&gt;&lt;P&gt;count=countw(vals2,',');&lt;/P&gt;&lt;P&gt;do i=1 to count;&lt;/P&gt;&lt;P&gt;&amp;nbsp; code=scan(vals2,i,','); *use input function to properly format this with your real data;&lt;/P&gt;&lt;P&gt;&amp;nbsp; date=scan(dates,i,','); *use input function to properly format this with your real data;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do j=3 to 6; *what rows were the dates on;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; amount=scan(vvaluex(cats('vals',j)),i,','); *use input function to properly format this with your real data;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;keep code date amount;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;Name,Jim,Bob,Sue,George&lt;/P&gt;&lt;P&gt;Code,101,105,216,412&lt;/P&gt;&lt;P&gt;Date1,1,4,4,6&lt;/P&gt;&lt;P&gt;Date2,1,3,2,6&lt;/P&gt;&lt;P&gt;Date3,5,7,8,7&lt;/P&gt;&lt;P&gt;Date4,5,1,6,8&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD colspan="1"&gt;code&lt;/TD&gt;&lt;TD colspan="1"&gt;date&lt;/TD&gt;&lt;TD colspan="1"&gt;amount&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;101&lt;/TD&gt;&lt;TD&gt;Date1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;101&lt;/TD&gt;&lt;TD&gt;Date1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;101&lt;/TD&gt;&lt;TD&gt;Date1&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;101&lt;/TD&gt;&lt;TD&gt;Date1&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;105&lt;/TD&gt;&lt;TD&gt;Date2&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;105&lt;/TD&gt;&lt;TD&gt;Date2&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;105&lt;/TD&gt;&lt;TD&gt;Date2&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;105&lt;/TD&gt;&lt;TD&gt;Date2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;216&lt;/TD&gt;&lt;TD&gt;Date3&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;216&lt;/TD&gt;&lt;TD&gt;Date3&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;216&lt;/TD&gt;&lt;TD&gt;Date3&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;216&lt;/TD&gt;&lt;TD&gt;Date3&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;412&lt;/TD&gt;&lt;TD&gt;Date4&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;412&lt;/TD&gt;&lt;TD&gt;Date4&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;412&lt;/TD&gt;&lt;TD&gt;Date4&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;412&lt;/TD&gt;&lt;TD&gt;Date4&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Apr 2012 17:28:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86329#M24634</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2012-04-17T17:28:48Z</dc:date>
    </item>
    <item>
      <title>Re: Stack database columns</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86330#M24635</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks so much for all the responses - I certainly have a lot of code to test =).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Looking quickly through many of the responses I'm realizing that another aspect that will further complicate the matter is that the Date1, Date2, etc. that I have written in the example dataset in the original post are actual dates per the CSV file and that those dates don't follow any simple iterative convention (making it hard to utilize code that does a do loop for vars Date1-DateX, since the dates are actual dates, such as 1/5/1990, 1/7/1990, 1/8/1990, etc. and there are gaps such that not every date between the start date and end date are represented).&amp;nbsp; I certainly have my work cut out for me still, but I think all these code examples will give me a solid start - whereas before creating this post I was completely lost at even how to approach the question.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks again!&amp;nbsp; If you have any other code that might help, I'll gladly take it, too!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Apr 2012 21:09:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86330#M24635</guid>
      <dc:creator>yeaforme</dc:creator>
      <dc:date>2012-04-17T21:09:47Z</dc:date>
    </item>
    <item>
      <title>Re: Stack database columns</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86331#M24636</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;the second example code I provide should work seamlessly with actual dates, with the transpose style you will want to make a few tweaks but it will still work, just add options validvarname=any; before the transpose step.&amp;nbsp; You will probably also want to add another step to then convert the data columns to their properly formatted values.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Apr 2012 21:27:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86331#M24636</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2012-04-17T21:27:34Z</dc:date>
    </item>
    <item>
      <title>Re: Stack database columns</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86332#M24637</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Given the solutions posted so far, and the changes to the requirements, I'm going to go back to my original plan ... sticking all the data into a two-dimensional array.&amp;nbsp; This will be necessary to compete on speed with the other solutions.&amp;nbsp; It may have memory limitations, but probably no more so than any of the other approaches. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; infile cards end=done;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; length varname name1-name4 $ 8;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; input varname name1-name4;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;Code 101 105 216 412&lt;/P&gt;&lt;P&gt;Date1 1 4 4 6&lt;/P&gt;&lt;P&gt;Date2 1 3 2 6&lt;/P&gt;&lt;P&gt;Date3 5 7 8 7&lt;/P&gt;&lt;P&gt;Date4 5 1 6 8&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data _null_;&amp;nbsp; /* extra step to capture dimensions of the array */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; set have nobs=_nobs_;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; array chars {*} _character_;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; ncols = dim(chars);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; call symputx ('nrows', _nobs_);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; call symputx('ncols', ncols);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; stop;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; length code date amount $ 8;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; array names_x2 {&amp;amp;nrows, &amp;amp;ncols} $;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; do rownum=1 to &amp;amp;nrows until (loaded);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have end=loaded;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array names {&amp;amp;ncols} varname name:;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do colnum = 1 to &amp;amp;ncols;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; names_x2{rownum, colnum} = names{colnum};&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; * Two-dimensional array is now loaded.&amp;nbsp; Time to unload it.;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; do colnum=2 to &amp;amp;ncols;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do rownum=1 to &amp;amp;nrows;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if rownum=1 then code = names_x2{1, colnum};&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; date = names_x2{rownum, 1};&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; amount = names_x2{rownum, colnum}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; keep code date amount;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This will be flexible, fast, and reasonably scalable.&amp;nbsp; Alas, it is untested at the moment.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Good luck.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Apr 2012 22:22:51 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86332#M24637</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2012-04-17T22:22:51Z</dc:date>
    </item>
    <item>
      <title>Re: Stack database columns</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86333#M24638</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Get multiple errors with the above code -&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ERROR: Too many variables defined for the dimension(s) specified for the array names&lt;/P&gt;&lt;P&gt;right below:&lt;/P&gt;&lt;P&gt;array names {&amp;amp;ncols} varname name:;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;AND&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;ERROR 22-322: Syntax error, expecting one of the following: !, !!, &amp;amp;, *, **, +, -, /, ;, &amp;lt;, &amp;lt;=,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&amp;gt;, =, &amp;gt;, &amp;gt;&amp;lt;, &amp;gt;=, AND, EQ, GE, GT, IN, LE, LT, MAX, MIN, NE, NG, NL, NOTIN, OR,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ^=, |, ||, ~=.&lt;/P&gt;&lt;P&gt;right below;&lt;/P&gt;&lt;P&gt;output;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Tried the other code, but I'm just not code-headed enough to understand how to further manipulate it to my CSV files.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In that vein, here is a very small portion taken from one of the CSV files:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE border="1" class="jiveBorder" style="border: 1px solid rgb(0, 0, 0); width: 100%;"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;Name&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;SCIENCES&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;NEUROBIOLOGICAL&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;MARTIN MATS.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;Code&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;144672(PA)&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;543325(PA)&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;98761J(PA)&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;Currency&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;U$&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;MP&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;C&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;1/4/1990&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;#N/A&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;150&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;#N/A&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;&lt;P&gt;1/5/1990&lt;/P&gt;&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;15.26&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;#N/A&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;#N/A&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;1/8/1990&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;15.30&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;155&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;1.05&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;1/9/1990&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;14.89&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;152&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;0.98&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;There are roughly 1,000 columns and roughly 6,000 date-rows in ascending order (starting at 1/1/1990 through 12/31/2011) making the CSV file roughly 1,000 columns across and 6,000 rows down.&amp;nbsp; To compound the problem, there are 66 CSV files all with data in this form.&amp;nbsp; Ultimately I need to get all the data across all the CSV files put together into one long list, but once I have each of the 66 imported and organized correctly, appending them is simple.&amp;nbsp; What I really need help with is getting the data re-formatted&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Ultimately, I need to get the data in the following form:&lt;/P&gt;&lt;TABLE border="1" class="jiveBorder" style="border: 1px solid #000000; width: 100%;"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD colspan="1"&gt;Date&lt;/TD&gt;&lt;TD colspan="1"&gt;Code&lt;/TD&gt;&lt;TD colspan="1"&gt;Currency&lt;/TD&gt;&lt;TD colspan="1"&gt;Amount&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;1/4/1990&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;144672&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;U$&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;&lt;P&gt;1/5/1990&lt;/P&gt;&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;144672&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;U$&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;15.26&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;1/8/1990&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;144672&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;U$&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;15.30&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;1/9/1990&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;144672&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;U$&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;14.89&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;1/4/1990&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;543325&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;MP&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;150&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;1/5/1990&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;543325&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;MP&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;1/8/1990&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;543325&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;MP&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;155&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;1/9/1990&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;543325&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;MP&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;152&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;1/4/1990&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;98761J&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;C&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;1/5/1990&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;98761J&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;C&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;1/8/1990&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;98761J&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;C&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;1.05&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;1/9/1990&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;98761J&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;C&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;0.98&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Note: The (PA) needs to be removed from the Code, and #N/A's need to be replaced with missing - all of this I can do on my own if it simplifies helping me with the code to re-form the data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks again!!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 22 Apr 2012 02:03:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86333#M24638</guid>
      <dc:creator>yeaforme</dc:creator>
      <dc:date>2012-04-22T02:03:01Z</dc:date>
    </item>
    <item>
      <title>Re: Stack database columns</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86334#M24639</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Below code works with the sample data you've provided.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* create some sample csv's */&lt;BR /&gt;filename Mycsv 'C:\mycsvs';&lt;BR /&gt;data _null_;&lt;BR /&gt;&amp;nbsp; file Mycsv(file1.csv);&lt;BR /&gt;&amp;nbsp; input;&lt;BR /&gt;&amp;nbsp; put _infile_;&lt;BR /&gt;&amp;nbsp; datalines;&lt;BR /&gt;Name,SCIENCES,NEUROBIOLOGICAL,MARTIN MATS.&lt;BR /&gt;Code,144672(PA),543325(PA),98761J(PA)&lt;BR /&gt;Currency,U$,MP,C&lt;BR /&gt;1/04/1990,#N/A,150,#N/A&lt;BR /&gt;1/05/1990,15.26,#N/A,#N/A&lt;BR /&gt;1/08/1990,15.3,155,1.05&lt;BR /&gt;1/09/1990,14.89,152,0.98&lt;BR /&gt;Code,x44672(PA),x43325(PA),x8761J(PA)&lt;BR /&gt;Currency,U$,MP,C&lt;BR /&gt;1/10/1990,#N/A,150,#N/A&lt;BR /&gt;1/11/1990,15.26,#N/A,#N/A&lt;BR /&gt;1/12/1990,15.3,155,1.05&lt;BR /&gt;;&lt;BR /&gt;run;&lt;BR /&gt;data _null_;&lt;BR /&gt;&amp;nbsp; file Mycsv(file2.csv);&lt;BR /&gt;&amp;nbsp; input;&lt;BR /&gt;&amp;nbsp; put _infile_;&lt;BR /&gt;&amp;nbsp; datalines;&lt;BR /&gt;Name,SCIENCES,NEUROBIOLOGICAL,MARTIN MATS.&lt;BR /&gt;Code,144672(PA),543325(PA),98761J(PA)&lt;BR /&gt;Currency,U$,MP,C&lt;BR /&gt;1/04/1991,#N/A,150,#N/A&lt;BR /&gt;1/05/1991,15.26,#N/A,#N/A&lt;BR /&gt;1/08/1991,15.3,155,1.05&lt;BR /&gt;1/09/1991,14.89,152,0.98&lt;BR /&gt;;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* determine max. number of array elements needed */&lt;BR /&gt;filename Mycsv 'C:\mycsvs\file*.csv';&amp;nbsp; /* reads all files in folder mycsvs following naming pattern file*.csv */&lt;BR /&gt;data _null_;&lt;BR /&gt;&amp;nbsp; infile Mycsv end=last;&lt;BR /&gt;&amp;nbsp; input;&lt;BR /&gt;&amp;nbsp; retain maxvars;&lt;BR /&gt;&amp;nbsp; maxvars=max(countc(_infile_,','),maxvars);&lt;BR /&gt;&amp;nbsp; if last then call symput('Nvars',cats(maxvars));&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* read, append and reorganise source data */&lt;BR /&gt;data want(drop=_:);&lt;BR /&gt;&amp;nbsp; attrib _Type length=$20 informat=$20.;&lt;BR /&gt;&amp;nbsp; array _Codes {&amp;amp;Nvars} $20. (&amp;amp;Nvars*'');&lt;BR /&gt;&amp;nbsp; array _Currs {&amp;amp;Nvars} $3. (&amp;amp;Nvars*'');&lt;BR /&gt;&amp;nbsp; attrib &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Date length=8 format=ddmmyy10.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Code&amp;nbsp; length=$20&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Currency length=$3&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Amount length=8 format=comma16.2&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; infile Mycsv dsd dlm=',' truncover LRECL=2000;&lt;/P&gt;&lt;P&gt;&amp;nbsp; input _Type @;&lt;BR /&gt;&amp;nbsp; _Type=upcase(_Type);&lt;/P&gt;&lt;P&gt;&amp;nbsp; if _Type='NAME' then&lt;BR /&gt;&amp;nbsp; do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;BR /&gt;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp; else&lt;BR /&gt;&amp;nbsp; if _Type='CODE' then&lt;BR /&gt;&amp;nbsp; do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call missing(of _all_);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _infile_=prxchange('s/\([[:alnum:]]*\)//o',-1,_infile_);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; input _Codes{*} :$20.;&lt;BR /&gt;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp; else&lt;BR /&gt;&amp;nbsp; if _Type='CURRENCY' then&lt;BR /&gt;&amp;nbsp; do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; input _Currs{*} :$20.;&lt;BR /&gt;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp; else&lt;BR /&gt;&amp;nbsp; do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Date=input(_Type,ddmmyy10.);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do _i=1 to &amp;amp;Nvars while(not missing(_Codes(_i)));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Code=_Codes(_i);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Currency=_Currs(_i);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; input Amount ?? :20. @;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp; end;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc print data=want;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Message was edited by: Patrick Removal of unnecessary Amts array&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 22 Apr 2012 04:08:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86334#M24639</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2012-04-22T04:08:07Z</dc:date>
    </item>
    <item>
      <title>Re: Stack database columns</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86335#M24640</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;hi ... here are a couple of different approaches to your two questions ....&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#1&amp;nbsp; using the datalines file from Ksharp's posting ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;data x;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;infile datalines;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;input name $ jim bob sue george;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;datalines;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;Code&amp;nbsp;&amp;nbsp;&amp;nbsp; 101&amp;nbsp; 105&amp;nbsp; 216 412&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;Date1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;Date2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;Date3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;Date4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;* use a data step to create a macro variable that renames variables in the data set;&lt;BR /&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;filename x dummy;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;data _null_;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;set x (drop=name obs=1);&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;file nosee;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;put (_all_) (=) @;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;call symputx('rename',tranwrd(_file_,'=','=_'));&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;run;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;data x;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;set x (firstobs=2 rename=(&amp;amp;rename));&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;array _(*) _: ;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;do j = 1 to dim(_);&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp; amount = _(j);&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp; date = name;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp; code = compress(vname(_(j)),,'kd');&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp; output;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;end;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;keep date code amount;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;run;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#2&amp;nbsp; using the attached CSV file based on the data you posted in the second question (it's specific to the posted data, but if all your data takes that form, it should work regardless of the number of codes and dates) ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;* use a data step to create some macro variables (a list of variables for an INPUT statement, a count of currencies, a list of currencies);&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;data _null_;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;infile 'z:\data.csv' dsd firstobs=2 _infile_=x;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;input;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;x = tranwrd(x, 'Code' , '');&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;x = tranwrd(x, ',' , ' _' );&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;x = tranwrd(x, '(PA)' ,'' );&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;call symputx('vars',x);&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;input;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;call symputx('n',countw(x)-1);&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;call symputx('curr',catt('"',tranwrd(x, ',' , '" "'),'"'));&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;stop;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;run;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;* translate the #N/A to missing with an informat;&amp;nbsp; &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;proc format;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;invalue x '#N/A' = .;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;run;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;* use the macro variables and the informat;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;data x;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;infile 'z:\data.csv' dsd firstobs=4;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;input date mmddyy. (&amp;amp;vars) (: x.);&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;array _(*) _: ;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;array curr(0:&amp;amp;n) $ _temporary_ (&amp;amp;curr);&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;do j=1 to dim(_);&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp; currency = curr(j);&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp; amount = _(j);&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp; code = compress(vname(_(j)),,'kad');&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp; output;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;end;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;format date mmddyy10.;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;keep date code currency amount;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;run;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 22 Apr 2012 17:04:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86335#M24640</guid>
      <dc:creator>MikeZdeb</dc:creator>
      <dc:date>2012-04-22T17:04:11Z</dc:date>
    </item>
    <item>
      <title>Re: Stack database columns</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86336#M24641</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You did not post what your data exactly looks like.&lt;/P&gt;&lt;P&gt;Use Mike's csv file and my code.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;proc import datafile='c:\data.csv' out=x dbms=csv replace;getnames=no;
run;

data _null_;
dsid=open("x","i");
num=attrn(dsid,"nvars");
do i=2 to num;
 n+1;
 name=catx(',',catt(varname(dsid,1),' as date'),catt(varname(dsid,i),' as amount'));
 call symputx(cats('name',n),name);
end;
&amp;nbsp; call symputx('n',n);
rc=close(dsid);&amp;nbsp; 
run;
data _null_;
 set x(firstobs=2 obs=2);
 array _v{*} $ _character_ ;
 do i=2 to dim(_v);
&amp;nbsp; call symputx(cats('value',i-1),_v{i}) ;
 end;
run;
data _null_;
 set x(firstobs=3 obs=3);
 array _v{*} $ _character_;
 do i=2 to dim(_v);
&amp;nbsp; call symputx(cats('_value',i-1),_v{i}) ;
 end;
run;


%macro stack;
proc sql;
create table want as 
%do i=1 %to &amp;amp;n;
 select "&amp;amp;&amp;amp;value&amp;amp;i" as code,"&amp;amp;&amp;amp;_value&amp;amp;i" as currency,&amp;amp;&amp;amp;name&amp;amp;i from x(firstobs=4) 
 %if &amp;amp;i ne &amp;amp;n %then %do; union all&amp;nbsp; %end;
%end;
 ;
quit;
%mend stack;

 %stack

&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;&lt;/P&gt;&lt;P&gt;Ksharp&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 23 Apr 2012 05:05:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86336#M24641</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2012-04-23T05:05:01Z</dc:date>
    </item>
    <item>
      <title>Re: Stack database columns</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86337#M24642</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;First, thanks for the additional input - I'm not quite there but I think we are very, very close.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Second, to Ksharp: yes, I apologize that my initial post was not what the data exactly looked like.&amp;nbsp; Being naive I figured I could save us all time by short-handing the data here and then just applying the principles I saw to the original data - how wrong I was.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;MikeZdeb: I tried your second set of code and I got a lot of errors, mostly involving a lot of "".&amp;nbsp; In the process of trying to decipher the errors, I opened up the original csv files in a text editor (before I had been opening them in Excel - again, my naivete) and found that the actual text files have "" around everything except the date-amounts (so variable names are actually: "Name", "Code", "Currency"; dates are actually "1/4/2000", etc.; SCIENCES is actually "SCIENCES", etc.; 144672(PA) is actually "144672(PA)", etc.; and U$ is actually "U$" - however, the date-amounts [i.e., N/A, 150, #N/A, 15.26, #N/A, #N/A, 15.30, 155, 1.05, 14.89, 152, 0.98] are without "" [i.e., are actually N/A, 150, #N/A, 15.26, #N/A, #N/A, 15.30, 155, 1.05, 14.89, 152, 0.98]).&amp;nbsp; These "" were invisible when I viewed them in Excel.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I also tried Ksharps code on the original files, however the proc sql statement sent the following error:&amp;nbsp; ERROR: A maximum of 256 tables can be processed in a single PROC SQL statement.&amp;nbsp; The original data are roughly 1000 IDs across and 6000 dates down, so I imagine that is pushing the proc sql over its limit.&amp;nbsp; Is there a way to alleviate this?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thoughts?&amp;nbsp; I am continuing to tinker around with both sets of code and I hope I can solve the issues on my own, but again, and as I'm sure you can tell, I'm fairly noob in this area so if you can get there quicker, I'd much appreciated it.&amp;nbsp; Thanks again, so much!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 23 Apr 2012 18:02:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86337#M24642</guid>
      <dc:creator>yeaforme</dc:creator>
      <dc:date>2012-04-23T18:02:46Z</dc:date>
    </item>
    <item>
      <title>Re: Stack database columns</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86338#M24643</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;hi ... i changed the CSV to look as you specified with quotes around all entries in the first three lines&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I modified the first data step, the one that creates the macro variables used in the second data step (actually made it easier to create macro variable &amp;amp;CURR)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;give it a try (use with PROC FORMAT and second data step from previous posting) with the new CSV file and with your other data (cut/paste from here since the single quotes with no space bewteen them might look like double quotes if you try to retype this)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;data _null_;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;infile 'z:\data.csv' dsd firstobs=2 _infile_=x;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;input;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;x = compress(translate(x,'','"'));&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;x = tranwrd(x, 'Code' , '');&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;x = tranwrd(x, ',' , '_' );&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;x = tranwrd(x, '(PA)' ,'' );&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;call symputx('vars',x);&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;input;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;call symputx('n',countw(x)-1);&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;call symputx('curr',x);&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;stop;&amp;nbsp; &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;run;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 23 Apr 2012 19:57:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86338#M24643</guid>
      <dc:creator>MikeZdeb</dc:creator>
      <dc:date>2012-04-23T19:57:27Z</dc:date>
    </item>
    <item>
      <title>Re: Stack database columns</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86339#M24644</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Still getting some errors.&amp;nbsp; Here's the last part of the log:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;52&amp;nbsp;&amp;nbsp; array curr(0:&amp;amp;n) $ _temporary_ (&amp;amp;curr);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 22&lt;/P&gt;&lt;P&gt;ERROR 22-322: Syntax error, expecting one of the following: a quoted string, a numeric constant,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a datetime constant, a missing value.&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;53&lt;/P&gt;&lt;P&gt;54&amp;nbsp;&amp;nbsp; do j=1 to dim(_);&lt;/P&gt;&lt;P&gt;ERROR: Attempt to initialize element of character array curr with numeric constant 1.&lt;/P&gt;&lt;P&gt;WARNING: Partial value initialization of the array curr.&lt;/P&gt;&lt;P&gt;55&lt;/P&gt;&lt;P&gt;56&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; currency = curr(j);&lt;/P&gt;&lt;P&gt;57&lt;/P&gt;&lt;P&gt;58&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; amount = _(j);&lt;/P&gt;&lt;P&gt;59&lt;/P&gt;&lt;P&gt;60&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; code = compress(vname(_(j)),,'kad');&lt;/P&gt;&lt;P&gt;61&lt;/P&gt;&lt;P&gt;62&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;63&lt;/P&gt;&lt;P&gt;64&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;65&lt;/P&gt;&lt;P&gt;66&amp;nbsp;&amp;nbsp; format date mmddyy10.;&lt;/P&gt;&lt;P&gt;67&lt;/P&gt;&lt;P&gt;68&amp;nbsp;&amp;nbsp; keep date code currency amount;&lt;/P&gt;&lt;P&gt;69&lt;/P&gt;&lt;P&gt;70&amp;nbsp;&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;NOTE: The SAS System stopped processing this step because of errors.&lt;/P&gt;&lt;P&gt;WARNING: The data set WORK.X may be incomplete.&amp;nbsp; When this step was stopped there were 0&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; observations and 4 variables.&lt;/P&gt;&lt;P&gt;NOTE: DATA statement used (Total process time):&lt;/P&gt;&lt;P&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;/P&gt;&lt;P&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.00 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Also, probably should have done this at the beginning, butust to make it easier, I've attached one of the actual csv files (28 megs or so).&amp;nbsp; Thanks again!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 23 Apr 2012 23:16:51 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Stack-database-columns/m-p/86339#M24644</guid>
      <dc:creator>yeaforme</dc:creator>
      <dc:date>2012-04-23T23:16:51Z</dc:date>
    </item>
  </channel>
</rss>

