<?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: Array for transposing data from wide to long form in SAS Data Management</title>
    <link>https://communities.sas.com/t5/SAS-Data-Management/Array-for-transposing-data-from-wide-to-long-form/m-p/331470#M9767</link>
    <description>&lt;P&gt;How about using PROC TRANSPOSE instead?&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  input Company $ Composite_1-Composite_13;
  format Composite_1-Composite_13 percent5.2;
  idvar = 'Percent';
cards;
 A 0.75 0.60 0.75 0.60 0.75 0.60 0.75 0.60 0.75 0.60 0.75 0.60 0.75
 B 0.72 0.90 0.72 0.90 0.72 0.90 0.72 0.90 0.72 0.90 0.72 0.90 0.72 
 C 0.40 0.42 0.40 0.42 0.40 0.42 0.40 0.42 0.40 0.42 0.40 0.42 0.40 
 ;
 run;
proc transpose data=have out=want name=Composite ;
  by Company;
  id idvar;
  var Composite_1-Composite_13;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Fri, 10 Feb 2017 12:29:37 GMT</pubDate>
    <dc:creator>MichaelLarsen</dc:creator>
    <dc:date>2017-02-10T12:29:37Z</dc:date>
    <item>
      <title>Array for transposing data from wide to long form</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Array-for-transposing-data-from-wide-to-long-form/m-p/331312#M9750</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have data in the current format:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Company&lt;/STRONG&gt; &amp;nbsp;&lt;STRONG&gt;Composite_1 Composite_2 (goes through 13)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/STRONG&gt;A &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 75% &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 60%&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; B &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 72% &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 90%&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; C &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; 42%&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;And I would like my data to be transformed intot his format:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Composite &amp;nbsp; &amp;nbsp; &amp;nbsp;Percent &amp;nbsp; Company&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;Comp1 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 75% &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; A&lt;/P&gt;&lt;P&gt;&amp;nbsp; Comp2 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 60% &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; A&lt;/P&gt;&lt;P&gt;&amp;nbsp; Comp 1 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;72% &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; B&lt;/P&gt;&lt;P&gt;&amp;nbsp; Comp2 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;90% &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; B&lt;/P&gt;&lt;P&gt;&amp;nbsp; Comp1 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 40% &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; C&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;Comp2 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 42% &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; C&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I've tried the following array but only get the company column:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data comp_long;
set comp_wide;
length composite $ 10.;
array v(*) _numeric_;
do i = 1 to dim(v) by 13;
composite = scan (vname(v{i}), 1, "-");
Comp1 = v{i}; comp2 =  v{i+1}; comp3 = v{i+1+1}; comp4 = v{i+1+1+1}; comp5 = v{i+1+1+1+1}; comp6 =v{i+1+1+1+1+1}; comp7 = v{i+1+1+1+1+1+1};
comp8 = v{i+1+1+1+1+1+1+1}; comp9 = v{i+1+1+1+1+1+1+1+1}; comp10 = v{i+1+1+1+1+1+1+1+1+1}; comp11 = v{i+1+1+1+1+1+1+1+1+1+1}; 
comp12 = v{i+1+1+1+1+1+1+1+1+1+1+1}; comp13 = v{i+1+1+1+1+1+1+1+1+1+1+1+1};
output; end; keep company; run; &lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;I know I'm missing something, so any suggestions are grealty appreciated! Thank you!&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 09 Feb 2017 20:27:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Array-for-transposing-data-from-wide-to-long-form/m-p/331312#M9750</guid>
      <dc:creator>simkinm2</dc:creator>
      <dc:date>2017-02-09T20:27:27Z</dc:date>
    </item>
    <item>
      <title>Re: Array for transposing data from wide to long form</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Array-for-transposing-data-from-wide-to-long-form/m-p/331318#M9752</link>
      <description>&lt;P&gt;This may do a bit closer to your posted requirement:&lt;/P&gt;
&lt;PRE&gt;data comp_long (keep = company percent composite);
   set comp_wide;
   length composite $ 10.;
   array v(*) _numeric_;
   do i = 1 to dim(v) ;
      composite = scan (vname(v{i}), 1, "_");
      percent = v[i];
      output; 
   end;  
run; &lt;/PRE&gt;
&lt;P&gt;Your previous code would have generated numerous errors. It helps to post errors with code. Use results from the Log pasted into a code box opened with the {i} menu icon.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;NOTE: removed BY 13 from the DO statement.&lt;/P&gt;</description>
      <pubDate>Thu, 09 Feb 2017 21:53:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Array-for-transposing-data-from-wide-to-long-form/m-p/331318#M9752</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2017-02-09T21:53:21Z</dc:date>
    </item>
    <item>
      <title>Re: Array for transposing data from wide to long form</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Array-for-transposing-data-from-wide-to-long-form/m-p/331324#M9755</link>
      <description>&lt;P&gt;Thanks so much for your quickl reply. &amp;nbsp;Oddly enough, I got no errors with my code. &amp;nbsp;Your code is almost what I need.&amp;nbsp;I'd like to get the entire Composite name in the column, so comp_1, comp_2, etc. &amp;nbsp;rather than just "comp".&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 09 Feb 2017 20:55:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Array-for-transposing-data-from-wide-to-long-form/m-p/331324#M9755</guid>
      <dc:creator>simkinm2</dc:creator>
      <dc:date>2017-02-09T20:55:06Z</dc:date>
    </item>
    <item>
      <title>Re: Array for transposing data from wide to long form</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Array-for-transposing-data-from-wide-to-long-form/m-p/331347#M9761</link>
      <description>&lt;P&gt;I didn't catch your "by 13" the first time around. The By means that the I value went from 1 to 14 and didn't do a second iteration. Without the 'by 13' then you would have generated lots of errors about array subscript out of bounds. ie 10+1+1+1+1 &amp;gt; then the 13 of the array&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you didn't want to trim the name of the comp variable it then why use scan?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;composite =&amp;nbsp;vname(v{i});&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 09 Feb 2017 21:57:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Array-for-transposing-data-from-wide-to-long-form/m-p/331347#M9761</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2017-02-09T21:57:32Z</dc:date>
    </item>
    <item>
      <title>Re: Array for transposing data from wide to long form</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Array-for-transposing-data-from-wide-to-long-form/m-p/331470#M9767</link>
      <description>&lt;P&gt;How about using PROC TRANSPOSE instead?&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  input Company $ Composite_1-Composite_13;
  format Composite_1-Composite_13 percent5.2;
  idvar = 'Percent';
cards;
 A 0.75 0.60 0.75 0.60 0.75 0.60 0.75 0.60 0.75 0.60 0.75 0.60 0.75
 B 0.72 0.90 0.72 0.90 0.72 0.90 0.72 0.90 0.72 0.90 0.72 0.90 0.72 
 C 0.40 0.42 0.40 0.42 0.40 0.42 0.40 0.42 0.40 0.42 0.40 0.42 0.40 
 ;
 run;
proc transpose data=have out=want name=Composite ;
  by Company;
  id idvar;
  var Composite_1-Composite_13;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 10 Feb 2017 12:29:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Array-for-transposing-data-from-wide-to-long-form/m-p/331470#M9767</guid>
      <dc:creator>MichaelLarsen</dc:creator>
      <dc:date>2017-02-10T12:29:37Z</dc:date>
    </item>
    <item>
      <title>Re: Array for transposing data from wide to long form</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Array-for-transposing-data-from-wide-to-long-form/m-p/331909#M9776</link>
      <description>&lt;P&gt;Since the composite of the varnames is going to be a constant, then you can include this code, which calculates it just once: &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;length big_long_composite $120;&lt;/P&gt;
&lt;P&gt;retain big_long_composite;&lt;/P&gt;
&lt;P&gt;if _n_=1 then do I=1 to dim(vars);&lt;/P&gt;
&lt;P&gt;&amp;nbsp; big_long_composite=catx(',',vname(vars{i}));&lt;/P&gt;
&lt;P&gt;end;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 12 Feb 2017 02:24:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Array-for-transposing-data-from-wide-to-long-form/m-p/331909#M9776</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2017-02-12T02:24:06Z</dc:date>
    </item>
  </channel>
</rss>

