<?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 Simplifying SAS code: Array or proc tranpose? in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Simplifying-SAS-code-Array-or-proc-tranpose/m-p/340589#M77862</link>
    <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I'm using Proc FREQ to generate an output dataset like this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Obs&lt;/TD&gt;&lt;TD&gt;teacher&lt;/TD&gt;&lt;TD&gt;Year&lt;/TD&gt;&lt;TD&gt;COUNT&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Mr Smith&lt;/TD&gt;&lt;TD&gt;2011/2012&lt;/TD&gt;&lt;TD&gt;16&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;Mr Smith&lt;/TD&gt;&lt;TD&gt;2012/2013&lt;/TD&gt;&lt;TD&gt;17&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;Ms Blaire&lt;/TD&gt;&lt;TD&gt;2011/2012&lt;/TD&gt;&lt;TD&gt;19&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;Ms Blaire&lt;/TD&gt;&lt;TD&gt;2012/2013&lt;/TD&gt;&lt;TD&gt;14&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;Mr Patterson&lt;/TD&gt;&lt;TD&gt;2011/2012&lt;/TD&gt;&lt;TD&gt;17&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;Mr Patterson&lt;/TD&gt;&lt;TD&gt;2012/2013&lt;/TD&gt;&lt;TD&gt;18&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Ideally, I'd like my dataset to look like this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Teacher&lt;/TD&gt;&lt;TD&gt;2011/2012&lt;/TD&gt;&lt;TD&gt;2012/2013&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Mr Smith&lt;/TD&gt;&lt;TD&gt;16&lt;/TD&gt;&lt;TD&gt;17&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Ms Blaire&lt;/TD&gt;&lt;TD&gt;19&lt;/TD&gt;&lt;TD&gt;14&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Mr Patterson&lt;/TD&gt;&lt;TD&gt;17&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;18&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So what I do is output a dataset for each teacher and use a macro to transpose the variables. The SAS code is like this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Data mr_smith ms_blaire mr_patterson;&lt;/P&gt;&lt;P&gt;&amp;nbsp;set db;&lt;/P&gt;&lt;P&gt;if &amp;nbsp;teacher in: ("Mr Smith") then output mr_smith;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;else if &amp;nbsp;teacher in: ("Ms Blaire") then output ms_blaire;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;else if &amp;nbsp;teacher in: ("Mr Patterson") then output mr_patterson;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;%macro change (in=, out=, var=);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;PROC TRANSPOSE DATA=&amp;amp;in. OUT=&amp;amp;out.;&lt;BR /&gt;VAR &amp;amp;variable.;&lt;BR /&gt;id year ;&lt;BR /&gt;run;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;%mend;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;%change(in=mr_smith out = mr_smith2, var=count);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;%change(in=ms_blaire out = ms_blaire2, var=count);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;%change(in=mr_patterson out = mr_patterson2, var=count);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;data all;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;set mr_smith2 ms_blaire2 mr_patterson2;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;This is pretty labourious, since I have multiple teachers. Is there any easier way to do this? I looked at proc tabulate, but it doesn't generate an appropriate output dataset. I thought an array would work, but I couldn't get that to work either.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Suggestions?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Mon, 13 Mar 2017 21:51:17 GMT</pubDate>
    <dc:creator>sharonlee</dc:creator>
    <dc:date>2017-03-13T21:51:17Z</dc:date>
    <item>
      <title>Simplifying SAS code: Array or proc tranpose?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Simplifying-SAS-code-Array-or-proc-tranpose/m-p/340589#M77862</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I'm using Proc FREQ to generate an output dataset like this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Obs&lt;/TD&gt;&lt;TD&gt;teacher&lt;/TD&gt;&lt;TD&gt;Year&lt;/TD&gt;&lt;TD&gt;COUNT&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Mr Smith&lt;/TD&gt;&lt;TD&gt;2011/2012&lt;/TD&gt;&lt;TD&gt;16&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;Mr Smith&lt;/TD&gt;&lt;TD&gt;2012/2013&lt;/TD&gt;&lt;TD&gt;17&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;Ms Blaire&lt;/TD&gt;&lt;TD&gt;2011/2012&lt;/TD&gt;&lt;TD&gt;19&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;Ms Blaire&lt;/TD&gt;&lt;TD&gt;2012/2013&lt;/TD&gt;&lt;TD&gt;14&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;Mr Patterson&lt;/TD&gt;&lt;TD&gt;2011/2012&lt;/TD&gt;&lt;TD&gt;17&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;Mr Patterson&lt;/TD&gt;&lt;TD&gt;2012/2013&lt;/TD&gt;&lt;TD&gt;18&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Ideally, I'd like my dataset to look like this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Teacher&lt;/TD&gt;&lt;TD&gt;2011/2012&lt;/TD&gt;&lt;TD&gt;2012/2013&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Mr Smith&lt;/TD&gt;&lt;TD&gt;16&lt;/TD&gt;&lt;TD&gt;17&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Ms Blaire&lt;/TD&gt;&lt;TD&gt;19&lt;/TD&gt;&lt;TD&gt;14&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Mr Patterson&lt;/TD&gt;&lt;TD&gt;17&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;18&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So what I do is output a dataset for each teacher and use a macro to transpose the variables. The SAS code is like this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Data mr_smith ms_blaire mr_patterson;&lt;/P&gt;&lt;P&gt;&amp;nbsp;set db;&lt;/P&gt;&lt;P&gt;if &amp;nbsp;teacher in: ("Mr Smith") then output mr_smith;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;else if &amp;nbsp;teacher in: ("Ms Blaire") then output ms_blaire;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;else if &amp;nbsp;teacher in: ("Mr Patterson") then output mr_patterson;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;%macro change (in=, out=, var=);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;PROC TRANSPOSE DATA=&amp;amp;in. OUT=&amp;amp;out.;&lt;BR /&gt;VAR &amp;amp;variable.;&lt;BR /&gt;id year ;&lt;BR /&gt;run;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;%mend;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;%change(in=mr_smith out = mr_smith2, var=count);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;%change(in=ms_blaire out = ms_blaire2, var=count);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;%change(in=mr_patterson out = mr_patterson2, var=count);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;data all;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;set mr_smith2 ms_blaire2 mr_patterson2;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;This is pretty labourious, since I have multiple teachers. Is there any easier way to do this? I looked at proc tabulate, but it doesn't generate an appropriate output dataset. I thought an array would work, but I couldn't get that to work either.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Suggestions?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 13 Mar 2017 21:51:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Simplifying-SAS-code-Array-or-proc-tranpose/m-p/340589#M77862</guid>
      <dc:creator>sharonlee</dc:creator>
      <dc:date>2017-03-13T21:51:17Z</dc:date>
    </item>
    <item>
      <title>Re: Simplifying SAS code: Array or proc tranpose?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Simplifying-SAS-code-Array-or-proc-tranpose/m-p/340590#M77863</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sort data=have;
by teacher year;
run;

proc transpose data=have out=want prefix=Y;
id year;
by teacher;
var count;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 13 Mar 2017 22:01:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Simplifying-SAS-code-Array-or-proc-tranpose/m-p/340590#M77863</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2017-03-13T22:01:44Z</dc:date>
    </item>
    <item>
      <title>Re: Simplifying SAS code: Array or proc tranpose?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Simplifying-SAS-code-Array-or-proc-tranpose/m-p/340593#M77864</link>
      <description>Brilliant, Reeza!&lt;BR /&gt;You have saved me so much time!!&lt;BR /&gt;Appreciate the quick response.&lt;BR /&gt;Silly me, I should have realized that the "by teacher" would solve the trick!</description>
      <pubDate>Mon, 13 Mar 2017 23:16:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Simplifying-SAS-code-Array-or-proc-tranpose/m-p/340593#M77864</guid>
      <dc:creator>sharonlee</dc:creator>
      <dc:date>2017-03-13T23:16:25Z</dc:date>
    </item>
  </channel>
</rss>

