<?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: make wide table long in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/make-wide-table-long/m-p/412045#M100743</link>
    <description>&lt;P&gt;PROC TRANSPOSE X 2&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;One to make it long, and then one to make it 'semi wide' again.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Thu, 09 Nov 2017 17:28:39 GMT</pubDate>
    <dc:creator>Reeza</dc:creator>
    <dc:date>2017-11-09T17:28:39Z</dc:date>
    <item>
      <title>make wide table long</title>
      <link>https://communities.sas.com/t5/SAS-Programming/make-wide-table-long/m-p/412041#M100740</link>
      <description>&lt;P&gt;Hi!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have a dataset that is very wide- where the last number in the value is the visit number.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="448"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="64"&gt;ID&amp;nbsp;&lt;/TD&gt;
&lt;TD width="64"&gt;Q1_1&lt;/TD&gt;
&lt;TD width="64"&gt;Q2_1&lt;/TD&gt;
&lt;TD width="64"&gt;Q3_1&lt;/TD&gt;
&lt;TD width="64"&gt;Q1_2&lt;/TD&gt;
&lt;TD width="64"&gt;Q2_2&lt;/TD&gt;
&lt;TD width="64"&gt;Q3_3&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Any suggestions how i can make this long, like this&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE style="border-collapse: collapse; width: 240pt;" border="0" width="320" cellspacing="0" cellpadding="0"&gt;
&lt;TBODY&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD width="64" height="20" style="height: 15.0pt; width: 48pt;"&gt;ID&lt;/TD&gt;
&lt;TD width="64" style="width: 48pt;"&gt;Visit&lt;/TD&gt;
&lt;TD width="64" style="width: 48pt;"&gt;Q1&lt;/TD&gt;
&lt;TD width="64" style="width: 48pt;"&gt;Q2&lt;/TD&gt;
&lt;TD width="64" style="width: 48pt;"&gt;Q3&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" style="height: 15.0pt;"&gt;A&lt;/TD&gt;
&lt;TD align="right"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;3&lt;/TD&gt;
&lt;TD align="right"&gt;3&lt;/TD&gt;
&lt;TD align="right"&gt;2&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" style="height: 15.0pt;"&gt;A&lt;/TD&gt;
&lt;TD align="right"&gt;2&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;2&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" style="height: 15.0pt;"&gt;B&lt;/TD&gt;
&lt;TD align="right"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" style="height: 15.0pt;"&gt;B&lt;/TD&gt;
&lt;TD align="right"&gt;2&lt;/TD&gt;
&lt;TD align="right"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;2&lt;/TD&gt;
&lt;TD align="right"&gt;2&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Help is appreciated!!&lt;/P&gt;</description>
      <pubDate>Thu, 09 Nov 2017 17:20:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/make-wide-table-long/m-p/412041#M100740</guid>
      <dc:creator>jenim514</dc:creator>
      <dc:date>2017-11-09T17:20:37Z</dc:date>
    </item>
    <item>
      <title>Re: make wide table long</title>
      <link>https://communities.sas.com/t5/SAS-Programming/make-wide-table-long/m-p/412045#M100743</link>
      <description>&lt;P&gt;PROC TRANSPOSE X 2&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;One to make it long, and then one to make it 'semi wide' again.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 09 Nov 2017 17:28:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/make-wide-table-long/m-p/412045#M100743</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2017-11-09T17:28:39Z</dc:date>
    </item>
    <item>
      <title>Re: make wide table long</title>
      <link>https://communities.sas.com/t5/SAS-Programming/make-wide-table-long/m-p/412054#M100747</link>
      <description>&lt;P&gt;I tried this, and didn't work.&amp;nbsp; The V3, V4, V5, V6 are the 'visits' that I want long.&amp;nbsp; The Questions Q1-Q15 I want wide.&amp;nbsp; This output give all variable still wide with additional variables V3-V6 that have values for V3_Q1-V6_Q1 (respectively)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;proc transpose data=test out=long3 prefix=V3;&lt;BR /&gt;by PID;&lt;BR /&gt;VAR V3_Q1-V3_Q15;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc transpose data=test out=long4 prefix=V4;&lt;BR /&gt;by PID;&lt;BR /&gt;VAR V4_Q1-V4_Q15;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;proc transpose data=test out=long5 prefix=V5;&lt;BR /&gt;by PID;&lt;BR /&gt;VAR V5_Q1-V5_Q15;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;proc transpose data=test out=long6 prefix=V6;&lt;BR /&gt;by PID;&lt;BR /&gt;VAR V6_Q1-V6_Q15;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data long;&lt;BR /&gt;set test;&lt;BR /&gt;merge long3 (rename=(V31=V3) drop= _name_)&lt;BR /&gt;long4 (rename=(V41=V4) drop= _name_)&lt;BR /&gt;long5 (rename=(V51=V5) drop= _name_)&lt;BR /&gt;long6 (rename=(V61=V6) drop= _name_);&lt;BR /&gt;by PID;&lt;BR /&gt;visit=input(substr(_name_,1,2),1.);&lt;BR /&gt;drop _name_;&lt;BR /&gt;run;&lt;/P&gt;</description>
      <pubDate>Thu, 09 Nov 2017 17:53:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/make-wide-table-long/m-p/412054#M100747</guid>
      <dc:creator>jenim514</dc:creator>
      <dc:date>2017-11-09T17:53:21Z</dc:date>
    </item>
    <item>
      <title>Re: make wide table long</title>
      <link>https://communities.sas.com/t5/SAS-Programming/make-wide-table-long/m-p/412057#M100749</link>
      <description>&lt;P&gt;O perhaps using an array might work?&amp;nbsp; I tried something like this, but way off...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data long;&lt;BR /&gt;set test;&lt;BR /&gt; array visit3(15) v3_q1-v3_q15;&lt;BR /&gt; array visit4(15) v4_q1-v4_q15;&lt;BR /&gt; array visit5(15) v5_q1-v5_q15;&lt;BR /&gt; array visit6(15) v6_q1-v6_q15;&lt;BR /&gt; do change=1 to 15;&lt;BR /&gt; visit=substr(change,1,2);&lt;BR /&gt; output;&lt;BR /&gt; end;&lt;BR /&gt; drop v3_Q1-v3_q15 v4_Q1-v4_q15 v4_Q1-v4_q15 v4_Q1-v4_q15; &lt;BR /&gt; run;&lt;/P&gt;</description>
      <pubDate>Thu, 09 Nov 2017 18:00:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/make-wide-table-long/m-p/412057#M100749</guid>
      <dc:creator>jenim514</dc:creator>
      <dc:date>2017-11-09T18:00:55Z</dc:date>
    </item>
    <item>
      <title>Re: make wide table long</title>
      <link>https://communities.sas.com/t5/SAS-Programming/make-wide-table-long/m-p/412061#M100752</link>
      <description>&lt;P&gt;I would go with arrays.&amp;nbsp; There's a two-dimensional array here, but it makes the programming shorter:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data want;&lt;/P&gt;
&lt;P&gt;set have;&lt;/P&gt;
&lt;P&gt;array new {3} Q1 - Q3;&lt;/P&gt;
&lt;P&gt;array old {2, 3} Q1_1 Q2_1 Q3_1 Q1_2 Q2_2 Q3_3;&lt;/P&gt;
&lt;P&gt;do visit=1 to 2;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; do k=1 to 3;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new{k} = old{visit, k};&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;
&lt;P&gt;end;&lt;/P&gt;
&lt;P&gt;keep ID visit Q1-Q3;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;</description>
      <pubDate>Thu, 09 Nov 2017 18:16:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/make-wide-table-long/m-p/412061#M100752</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2017-11-09T18:16:49Z</dc:date>
    </item>
    <item>
      <title>Re: make wide table long</title>
      <link>https://communities.sas.com/t5/SAS-Programming/make-wide-table-long/m-p/412115#M100779</link>
      <description>&lt;P&gt;Thank you so much. How can I add one more piece to this. I have another variable "score' over the 3 visits (just one question though)&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is my actual code...just trying to add this score dimension.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data wide004;&lt;BR /&gt;set study004;&lt;BR /&gt;array new {15} Q1 - Q15;&lt;BR /&gt;array old {4, 15} V3_Q1-V3_Q15 V4_Q1-V4_Q15 V5_Q1-V5_Q15 V6_Q1-V6_Q15;&lt;BR /&gt;array news (4)&lt;BR /&gt;array olds (4,1) Score_3-Score_6;&lt;BR /&gt;do visit=1 to 4;&lt;BR /&gt; do k=1 to 15;&lt;BR /&gt; new{k} = old{visit, k};&lt;BR /&gt; end;&lt;BR /&gt; output;&lt;BR /&gt;end;&lt;BR /&gt;keep PID visit Q1-Q15;&lt;BR /&gt;run;&lt;/P&gt;</description>
      <pubDate>Thu, 09 Nov 2017 20:30:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/make-wide-table-long/m-p/412115#M100779</guid>
      <dc:creator>jenim514</dc:creator>
      <dc:date>2017-11-09T20:30:52Z</dc:date>
    </item>
    <item>
      <title>Re: make wide table long</title>
      <link>https://communities.sas.com/t5/SAS-Programming/make-wide-table-long/m-p/412121#M100785</link>
      <description>&lt;P&gt;If I'm picturing the data correctly (good chance of that, but not 100%), make two changes.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;First, make the array for the scores&amp;nbsp;a one-dimensional array:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;array olds {4} Score_3-Score_6;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The array for news looks like it just gets removed.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Then add just after do visit = 1 to 4:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;score = olds{visit};&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Also, add SCORE to the list of variables being kept.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;At least that's what I think you're trying to accomplish.&amp;nbsp; See how close that comes.&lt;/P&gt;</description>
      <pubDate>Thu, 09 Nov 2017 20:41:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/make-wide-table-long/m-p/412121#M100785</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2017-11-09T20:41:25Z</dc:date>
    </item>
    <item>
      <title>Re: make wide table long</title>
      <link>https://communities.sas.com/t5/SAS-Programming/make-wide-table-long/m-p/412124#M100788</link>
      <description>Thank you so much!</description>
      <pubDate>Thu, 09 Nov 2017 20:43:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/make-wide-table-long/m-p/412124#M100788</guid>
      <dc:creator>jenim514</dc:creator>
      <dc:date>2017-11-09T20:43:10Z</dc:date>
    </item>
    <item>
      <title>Re: make wide table long</title>
      <link>https://communities.sas.com/t5/SAS-Programming/make-wide-table-long/m-p/412131#M100792</link>
      <description>&lt;P&gt;If you don't to restrict yourself to specific array dimensions, then you may try this approach&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;DATA have;
	LENGTH ID $1 Q1_1 Q2_1 Q3_1 Q1_2 Q2_2 Q3_2 4;
	INPUT ID $1 Q1_1 Q2_1 Q3_1 Q1_2 Q2_2 Q3_2;
	DATALINES;
A 3 3 2 0 1 2
B 1 1 0 1 2 2
;
RUN;

/* Reverse Engineer the Columns Composition */
DATA WORK.SRTD(KEEP=ID VISIT QTR COUNT);
	SET WORK.HAVE;
	ARRAY cols {*} _NUMERIC_;
	LENGTH ID $1 VISIT 4 QTR $2 COUNT 4;

	do i=1 to dim(cols);
		COUNT=cols(i);
		name = VNAME(cols(i));
		VISIT= INPUT(SCAN(name,2,'_'),best.);
		QTR= SCAN(name,1,'_');
		OUTPUT;
	end;
RUN;

PROC SORT DATA=WORK.SRTD;
   BY ID VISIT;
RUN;

/* Produce Desired Output Layout */
PROC TRANSPOSE DATA=WORK.SRTD OUT=WORK.WANT(DROP=_NAME_);
   ID QTR;
   BY ID VISIT;
   VAR COUNT;
RUN;

/* Clean Up */
PROC DATASETS LIB=WORK NOLIST;
   DELETE SRTD;
RUN; QUIT;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Hope this helps,&lt;/P&gt;
&lt;P&gt;Ahmed&lt;/P&gt;</description>
      <pubDate>Thu, 09 Nov 2017 20:57:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/make-wide-table-long/m-p/412131#M100792</guid>
      <dc:creator>AhmedAl_Attar</dc:creator>
      <dc:date>2017-11-09T20:57:31Z</dc:date>
    </item>
    <item>
      <title>Re: make wide table long</title>
      <link>https://communities.sas.com/t5/SAS-Programming/make-wide-table-long/m-p/412340#M100846</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;DATA have;
	LENGTH ID $1 Q1_1 Q2_1 Q3_1 Q1_2 Q2_2 Q3_2 4;
	INPUT ID $1 Q1_1 Q2_1 Q3_1 Q1_2 Q2_2 Q3_2;
	DATALINES;
A 3 3 2 0 1 2
B 1 1 0 1 2 2
;
RUN;

proc transpose data=have out=temp;
by id;
var Q:;
run;
data temp;
 set temp;
 group=scan(_name_,-1,'_');
 name=scan(_name_,1,'_');
run;
proc transpose data=temp out=want;
by id group;
id name;
var col1;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 10 Nov 2017 14:16:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/make-wide-table-long/m-p/412340#M100846</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2017-11-10T14:16:22Z</dc:date>
    </item>
  </channel>
</rss>

