<?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: Proc Transpose in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117799#M32494</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;BUT you do NOT want to use the ELSE clause because of the inclusion of the LAG() function in the IF conditional.&lt;/P&gt;&lt;P&gt;Read up on how the LAG function works.&amp;nbsp; It does NOT retrieve the value from the previous observation, but instead retrieves it from a stack of values created be the previous executions of that LAG() function.&amp;nbsp; So it is normally a mistake to place a LAG() function call were it will not execute every time through the data step (such as an ELSE clause) .&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 24 Aug 2013 03:03:00 GMT</pubDate>
    <dc:creator>Tom</dc:creator>
    <dc:date>2013-08-24T03:03:00Z</dc:date>
    <item>
      <title>Proc Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117777#M32472</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;Could someone help me solve this transpose step??&lt;/P&gt;&lt;P&gt;INS should go with the OUTS&lt;/P&gt;&lt;P&gt;If there are more of a kind(in this case IN'S) then closest one should become the pair.in our case&lt;/P&gt;&lt;P&gt;04Sep1989:13:45 has to pair with&amp;nbsp; 05SEP1989:7:15 instead of the 04Sep1989:7:30&lt;/P&gt;&lt;P&gt;and 04Sep1989:7:30 should have a blank as a pair&lt;/P&gt;&lt;P&gt;HAVE&lt;/P&gt;&lt;P&gt; ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flag&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; time&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; cnt&lt;/P&gt;&lt;P&gt;101&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 04Sep1989:7:30&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/P&gt;&lt;P&gt;101&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 04Sep1989:13:45&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;/P&gt;&lt;P&gt;101&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 21SEP1989:17:55&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;/P&gt;&lt;P&gt;101&amp;nbsp;&amp;nbsp; OUT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 05SEP1989:7:15&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/P&gt;&lt;P&gt;101&amp;nbsp;&amp;nbsp; OUT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 22SEP1989:06:00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WANT&lt;/P&gt;&lt;P&gt;ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IN1&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; OUT1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IN2&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; OUT2&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; IN3&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; OUT3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;101&amp;nbsp;&amp;nbsp; 04Sep1989:7:30&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;.&amp;nbsp; &lt;/STRONG&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; 04Sep1989:13:45&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 05SEP1989:7:15&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 21SEP1989:17:55&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 22SEP1989:06:00&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 20 Aug 2013 22:09:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117777#M32472</guid>
      <dc:creator>robertrao</dc:creator>
      <dc:date>2013-08-20T22:09:19Z</dc:date>
    </item>
    <item>
      <title>Re: Proc Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117778#M32473</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You should resort your data by ID and time.&lt;/P&gt;&lt;P&gt;Then use the data step and last. logic to do explicit OUTPUT.&lt;/P&gt;&lt;P&gt;Before the the output just use IF-THEN logic to do variable assignments.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 21 Aug 2013 06:49:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117778#M32473</guid>
      <dc:creator>LinusH</dc:creator>
      <dc:date>2013-08-21T06:49:06Z</dc:date>
    </item>
    <item>
      <title>Re: Proc Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117779#M32474</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You could do it with a DATA step.&amp;nbsp; You will need an upper bound on the number of variables which you could calculate as the maximum value of CNT variable.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%let max=3 ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do until (last.id);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by id ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array in (&amp;amp;max);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array out (&amp;amp;max);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if flag='IN' then in(cnt) = time;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if flag='OUT' then out(cnt) = time;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; keep id in: out: ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; format in: out: datetime.;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 21 Aug 2013 15:38:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117779#M32474</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2013-08-21T15:38:33Z</dc:date>
    </item>
    <item>
      <title>Re: Proc Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117780#M32475</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Tom,&lt;/P&gt;&lt;P&gt;Thanks for the reply.&lt;/P&gt;&lt;P&gt;The method you suggest is not giving me the following output&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WANT&lt;/P&gt;&lt;P&gt;ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IN1&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; OUT1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IN2&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; OUT2&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; IN3&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; OUT3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;101&amp;nbsp;&amp;nbsp; 04Sep1989:7:30&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;.&amp;nbsp; &lt;/STRONG&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; 04Sep1989:13:45&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 05SEP1989:7:15&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 21SEP1989:17:55&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 22SEP1989:06:00&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;OUT1 should be missing&lt;/P&gt;&lt;P&gt;basiclly when there are more of a kind we should see which one of those makes a closest pair to the other&lt;/P&gt;&lt;P&gt;like above 04Sep1989:13:45 is closest to 05SEP1989:7:15 than 04Sep1989:7:30 and so OUT1 is left blank&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 21 Aug 2013 19:07:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117780#M32475</guid>
      <dc:creator>robertrao</dc:creator>
      <dc:date>2013-08-21T19:07:48Z</dc:date>
    </item>
    <item>
      <title>Re: Proc Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117781#M32476</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;So the CNT variable is useless.&amp;nbsp; Instead you want to create new IN/OUT pairs based on the relative TIME values?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sort;&lt;/P&gt;&lt;P&gt; by id time;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;data want ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do until (last.id);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; by id;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; array in (4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; array out (4) ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if first.id then i=1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if flag='IN' then i=i+1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if flag='IN' then in(i)=time;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if flag='OUT' then out(i)=time;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; keep id in: out: ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; format in: out: datetime.;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 21 Aug 2013 19:44:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117781#M32476</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2013-08-21T19:44:13Z</dc:date>
    </item>
    <item>
      <title>Re: Proc Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117782#M32477</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;The above will collapse sequence like IN/OUT/OUT into a single pair and eliminate the middle OUT time point.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;To fix that you might change the index variable increment logic to:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if first.id then i=1;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if flag='IN' then do; if in(i) ne . then i=i+1; in(i)=time; end;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if flag='OUT' then do; if out(i) ne . then i=i+1; out(i)=time; end;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 21 Aug 2013 19:52:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117782#M32477</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2013-08-21T19:52:53Z</dc:date>
    </item>
    <item>
      <title>Re: Proc Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117783#M32478</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Tom,&lt;/P&gt;&lt;P&gt;Thanks a ton for your time.&lt;/P&gt;&lt;P&gt;But i wonder if this works for all cases&lt;/P&gt;&lt;P&gt;When i run the code for the below data 24SEP1989:06:00 IN forms a pair with 23SEP1989:06:00 which cannot be the case because IN cannot be later (24) compared to OUT(23rd)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;BR /&gt;input ID $&amp;nbsp;&amp;nbsp; flag $&amp;nbsp; time&amp;nbsp; :datetime. cnt;&lt;BR /&gt;format time datetime.;&lt;BR /&gt;datalines;&lt;BR /&gt;101&amp;nbsp;&amp;nbsp;&amp;nbsp; IN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 04Sep1989:7:30&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;BR /&gt;101&amp;nbsp;&amp;nbsp;&amp;nbsp; IN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 04Sep1989:13:45&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;BR /&gt;101&amp;nbsp;&amp;nbsp;&amp;nbsp; IN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 21SEP1989:17:55&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;BR /&gt;101&amp;nbsp;&amp;nbsp; OUT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 05SEP1989:7:15&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;BR /&gt;101&amp;nbsp;&amp;nbsp; OUT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 22SEP1989:06:00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;BR /&gt;101&amp;nbsp;&amp;nbsp; OUT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 23SEP1989:06:00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12&lt;BR /&gt;101&amp;nbsp;&amp;nbsp;&amp;nbsp; IN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 24SEP1989:06:00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 15&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I was expecting &lt;STRONG&gt;OUT4&lt;/STRONG&gt; to be by itself without the corresponding IN&lt;/P&gt;&lt;P&gt;and 24SEP1989:06:00 is IN5 without the corresponding OUT&lt;/P&gt;&lt;P&gt;Hope this helps&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 21 Aug 2013 20:09:51 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117783#M32478</guid>
      <dc:creator>robertrao</dc:creator>
      <dc:date>2013-08-21T20:09:51Z</dc:date>
    </item>
    <item>
      <title>Re: Proc Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117784#M32479</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You need to keep the auto increment when flag='IN'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if first.id then i=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if flag='IN' then do; i=i+1; in(i)=time; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if flag='OUT' then do; if out(i)^=. then i=i+1; out(i)=time; end;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 21 Aug 2013 20:27:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117784#M32479</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2013-08-21T20:27:39Z</dc:date>
    </item>
    <item>
      <title>Re: Proc Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117785#M32480</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I am using the following code and it says :&lt;/P&gt;&lt;P&gt;ARRAY SUBSCRIPT OUT OF RANGE.Please correct me&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;P&gt;data want ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do until (last.id);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; by id;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; array in (4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; array out (4) ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if first.id then i=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if flag='IN' then do; i=i+1; in(i)=time; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if flag='OUT' then do; if out(i)^=. then i=i+1; out(i)=time; end;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; keep id in: out: ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; format in: out: datetime.;&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;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ERROR: Array subscript out of range at line 907 column 34.&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;last.id=1 ID=101 flag=IN time=24SEP89:06:00:00 cnt=15 FIRST.ID=0 in1=04SEP89:07:30:00 in2=04SEP89:13:45:00 in3=21SEP89:17:55:00 in4=. out1=. out2=05SEP89:07:15:00&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;out3=22SEP89:06:00:00 out4=23SEP89:06:00:00 i=5 _ERROR_=1 _N_=1&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 21 Aug 2013 20:48:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117785#M32480</guid>
      <dc:creator>robertrao</dc:creator>
      <dc:date>2013-08-21T20:48:50Z</dc:date>
    </item>
    <item>
      <title>Re: Proc Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117786#M32481</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Change the 4's to something larger. It is hard to know how many elements to use for the array.&amp;nbsp; To be safe you could make it as large as he maximum number of records per ID.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Or you could just calculate the grouping variable and then let PROC TRANSPOSE make the output dataset for you.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sort;&lt;/P&gt;&lt;P&gt; by id time;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;data middle ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set have ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; by id;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if first.id then group=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if first.id or flag='IN' or (flag='OUT' and flag=lag(flag)) then group+1 ;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;proc transpose data=middle out=want (drop=_name_);&lt;/P&gt;&lt;P&gt;&amp;nbsp; by id;&lt;/P&gt;&lt;P&gt;&amp;nbsp; id flag group ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; var time;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 21 Aug 2013 21:56:51 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117786#M32481</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2013-08-21T21:56:51Z</dc:date>
    </item>
    <item>
      <title>Re: Proc Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117787#M32482</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Tom,&lt;/P&gt;&lt;P&gt;Both of the Array method(after changing length to a larger value ) and transpose method work very well. Thanks so much&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In the &lt;STRONG&gt;array method&lt;/STRONG&gt;:&lt;/P&gt;&lt;P&gt;why were you using &lt;STRONG&gt; if out(i)^=.??? and not for the in(i)??????what if in an other case of our data the OUTS outnumber the INS???&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Please help me understand the code as well&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;if flag='IN' then do; i=i+1; in(i)=time; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if flag='OUT' then do; if out(i)^=. then i=i+1; out(i)=time; end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Could you also put this from the &lt;STRONG&gt;transpose method&amp;nbsp; &lt;/STRONG&gt;in words for me??&lt;/P&gt;&lt;P&gt;if first.id then group=0;&lt;/P&gt;&lt;P&gt;if first.id or flag='IN' or (flag='OUT' and flag=lag(flag)) then group+1 ;&lt;/P&gt;&lt;P&gt;we have already said if first.id then group=0; Again why do we use if first.id or or flag='IN' or (flag='OUT' and flag=lag(flag))&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;why isnt the lag function used for the IN???&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks so much&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 22 Aug 2013 13:53:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117787#M32482</guid>
      <dc:creator>robertrao</dc:creator>
      <dc:date>2013-08-22T13:53:17Z</dc:date>
    </item>
    <item>
      <title>Re: Proc Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117788#M32483</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;To prevent IN &amp;gt; OUT you always want to start a new pair (group) when see an IN record.&amp;nbsp; But when you see and OUT record it could be the OUT for the current pair or an unmatched OUT that needs a new pair.&amp;nbsp; One way to tell this is if the current pair already has an OUT time value. So we test if OUT(I) has a value when processing an OUT record, but we don't care for IN record as we know that it marks a new pair.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So a new group starts when&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;the first record for an ID group (FIRST.ID)&lt;/LI&gt;&lt;LI&gt;any IN record (FLAG='IN')&lt;/LI&gt;&lt;LI&gt;an OUT record when it is not preceded by an IN record.&amp;nbsp; (FLAG='OUT' and LAG(FLAG)='OUT')&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;To avoid incrementing the group counter twice when more than one of the conditions apply to the same record the program first sets it to 0 at the start of a ID group.&amp;nbsp; Then it can use the same logic test about whether to increment the group counter for every record it processes. &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 22 Aug 2013 14:31:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117788#M32483</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2013-08-22T14:31:55Z</dc:date>
    </item>
    <item>
      <title>Re: Proc Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117789#M32484</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for the dettailed and quick response.&lt;/P&gt;&lt;P&gt;I could not mark it right because the options dont pop up ....&lt;/P&gt;&lt;P&gt;I will do it as soon as i see it&lt;/P&gt;&lt;P&gt;Lastly, i will post an other question shortly on the same quesion but with &lt;STRONG&gt;Imputing&lt;/STRONG&gt; the missing values&lt;/P&gt;&lt;P&gt;if IN is missing for a particular OUT then the IN &lt;STRONG&gt;should have a value&lt;/STRONG&gt; of 1 minute prior instead of the current code which sets to missing&lt;/P&gt;&lt;P&gt;Also if OUT is missing for a particular IN then OUT&lt;STRONG&gt; should have a value&lt;/STRONG&gt; of 1 minute past the IN&lt;/P&gt;&lt;P&gt;Thanks again&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 22 Aug 2013 14:45:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117789#M32484</guid>
      <dc:creator>robertrao</dc:creator>
      <dc:date>2013-08-22T14:45:13Z</dc:date>
    </item>
    <item>
      <title>Re: Proc Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117790#M32485</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;A not so simple alternative to achieve desired results:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;options datestyle=DMY;&lt;BR /&gt;data have;&lt;BR /&gt; input @1 id 3. @5 flag $3. @9 time anydtdtm15. @25 cnt 2.;&lt;BR /&gt; format time datetime18.;&lt;BR /&gt; datalines;&lt;BR /&gt;101 IN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 04Sep1989:7:30&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;BR /&gt;101 IN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 04Sep1989:13:45&amp;nbsp; 2&lt;BR /&gt;101 IN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 21SEP1989:17:55 3&lt;BR /&gt;101 OUT 05SEP1989:7:15&amp;nbsp;&amp;nbsp; 1&lt;BR /&gt;101 OUT 22SEP1989:06:00 2&lt;BR /&gt;;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;proc sql;&lt;BR /&gt; create table step1 as&lt;BR /&gt; select t1.id, t1.time as indate format=datetime18., t1.cnt as incnt, t2.time as outdate format=datetime18., t2.cnt as outcnt&lt;BR /&gt; from have(where=(flag="IN")) as t1&lt;BR /&gt; left join&lt;BR /&gt; have(where=(flag="OUT")) as t2&lt;BR /&gt; on t1.id=t2.id&lt;BR /&gt; group by t1.id, t2.cnt&lt;BR /&gt; having (t2.time-t1.time GT 0) and (t2.time-t1.time=min(&lt;BR /&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; (case &lt;BR /&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; when t2.time-t1.time LT 0 then 99999999&lt;BR /&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; else t2.time-t1.time&lt;BR /&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; end&lt;BR /&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; )&lt;BR /&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;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;create table step2 as&lt;BR /&gt; select coalesce(t1.id, t2.id) as id, coalesce(t1.indate, t2.indate) as indate format=datetime18., coalesce(t1.incnt, t2.incnt) as incnt, t1.outdate format=datetime18., t1.outcnt&lt;BR /&gt; from step1 as t1&lt;BR /&gt; full join&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; have(where=(flag="IN") rename=(time=indate cnt=incnt)) as t2&lt;BR /&gt; on t1.id=t2.id and t1.indate=t2.indate and t1.incnt=t2.incnt;&lt;BR /&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This pre-processes your data to provide the best in/out pairs and you can then use proc transpose with flag and incnt to name your new variables. The 9999999 was simply to assign a large enough date value when the difference is negative that the case would never be the result of the minimum summary function.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The only possible issue that I can see is if the very last in/out pair has a missing value for out. In this case you may need to add an additionnal step to transform back date 9999999 (whatever this resolves to) to a missing value&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Vincent&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 22 Aug 2013 15:34:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117790#M32485</guid>
      <dc:creator>Vince28_Statcan</dc:creator>
      <dc:date>2013-08-22T15:34:14Z</dc:date>
    </item>
    <item>
      <title>Re: Proc Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117791#M32486</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks Vince for your help.&lt;/P&gt;&lt;P&gt;I have no advanced knowledge on SQl so i prefer simple datasteps eventhough sql is easy and finishes in simple steps.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 22 Aug 2013 15:42:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117791#M32486</guid>
      <dc:creator>robertrao</dc:creator>
      <dc:date>2013-08-22T15:42:33Z</dc:date>
    </item>
    <item>
      <title>Re: Proc Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117792#M32487</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I don't exactly like the resulting code compared to the SQL approach but here is how this SQL logic could be duplicated with data step syntax only. DSTEP3 dataset is identical to STEP2 dataset in the sql. From there, you can use the appropriately obtained indate/outdate with incnt to do the proc transpose&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* Step1 do a full cartesian product of multiple into multiple - too bad SAS merge can't do that... got to use hash tables &lt;BR /&gt;or other syntaxically difficult methods. Difference between dates were also added with the same approach as the SQL case approach */&lt;BR /&gt;data dstep1;&lt;BR /&gt; length id 8. indate 8. incnt 8. outdate 8. outcnt 8.;&lt;BR /&gt; if _n_=1 then do;&lt;BR /&gt; declare hash myhash(dataset: 'have(where=(flag="OUT") rename=(time=outdate cnt=outcnt))', multidata: "YES");&lt;BR /&gt; myhash.defineKey('id');&lt;BR /&gt; myhash.defineData('outdate', 'outcnt');&lt;BR /&gt; myhash.defineDone();&lt;BR /&gt; end;&lt;/P&gt;&lt;P&gt; set have(where=(flag="IN") rename=(time=indate cnt=incnt));&lt;BR /&gt; if myhash.find() = 0 then do;&lt;BR /&gt;&amp;nbsp; if outdate-indate&amp;lt;0 then diff=99999999;&lt;BR /&gt;&amp;nbsp; else diff=outdate-indate;&lt;BR /&gt;&amp;nbsp; output;&lt;BR /&gt;&amp;nbsp; do while(myhash.find_next()=0);&lt;BR /&gt;&amp;nbsp; if outdate-indate&amp;lt;0 then diff=99999999;&lt;BR /&gt;&amp;nbsp; else diff=outdate-indate;&lt;BR /&gt;&amp;nbsp; output;&lt;BR /&gt;&amp;nbsp; end;&lt;BR /&gt; end;&lt;/P&gt;&lt;P&gt; format indate datetime18. outdate datetime18.;&lt;BR /&gt; drop flag;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;proc sort data=dstep1;&lt;BR /&gt; by id outcnt diff;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;/* step2 */&lt;BR /&gt;/* Keep only the best time difference for each outcnt */&lt;BR /&gt;data dstep2;&lt;BR /&gt; set dstep1;&lt;BR /&gt; by id outcnt;&lt;BR /&gt; if first.outcnt then output;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;/* Step3 */&lt;BR /&gt;/* Rebuild the missing incnt created by step2 */&lt;BR /&gt;data dstep3;&lt;BR /&gt; length id 8. indate 8. incnt 8. outdate 8. outcnt 8.;&lt;BR /&gt; if _n_=1 then do;&lt;BR /&gt; declare hash myhash(dataset: "dstep2");&lt;BR /&gt; myhash.defineKey('id', 'incnt');&lt;BR /&gt; myhash.defineData('outdate', 'outcnt');&lt;BR /&gt; myhash.defineDone();&lt;BR /&gt; end;&lt;/P&gt;&lt;P&gt; set have(where=(flag="IN") rename=(time=indate cnt=incnt));&lt;BR /&gt; rc=myhash.find();&lt;BR /&gt; if outdate=99999999 then outdate=.;&lt;BR /&gt; output;&lt;/P&gt;&lt;P&gt; drop flag rc;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Vincent&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 22 Aug 2013 16:23:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117792#M32487</guid>
      <dc:creator>Vince28_Statcan</dc:creator>
      <dc:date>2013-08-22T16:23:16Z</dc:date>
    </item>
    <item>
      <title>Re: Proc Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117793#M32488</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Tom,&lt;/P&gt;&lt;P&gt;I was still wondering about setting the group to 0 at the beginning of each new ID&lt;/P&gt;&lt;P&gt;you explained that if we dont do it then if two conditions are satisfying a record then there is a chance of "incrementing the group counter twice!!!!!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Suppose I have the following as the first record&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;101&amp;nbsp;&amp;nbsp; IN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sep6:7:30&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;It is the first of the ID and flag is IN(satisfying 2 conditions) ....how would the group counter gets incremented twice if we dont initialize the group to 0???&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 22 Aug 2013 18:48:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117793#M32488</guid>
      <dc:creator>robertrao</dc:creator>
      <dc:date>2013-08-22T18:48:23Z</dc:date>
    </item>
    <item>
      <title>Re: Proc Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117794#M32489</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Apply the imputation to the resulting pairs.&lt;/P&gt;&lt;P&gt;do i=1 to dim(in);&lt;/P&gt;&lt;P&gt; if IN(i)=. then IN(i) = out(i) - 1;&lt;/P&gt;&lt;P&gt; if out(i) = . then out(i) = in(i) + 1;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 22 Aug 2013 19:01:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117794#M32489</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2013-08-22T19:01:36Z</dc:date>
    </item>
    <item>
      <title>Re: Proc Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117795#M32490</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;IF first.id then GROUP=1;&lt;/P&gt;&lt;P&gt;ELSE IF .... THEN GROUP+1;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you leave out the ELSE then you could cause a double increment.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 22 Aug 2013 19:03:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117795#M32490</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2013-08-22T19:03:28Z</dc:date>
    </item>
    <item>
      <title>Re: Proc Transpose</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117796#M32491</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for the reply&lt;/P&gt;&lt;P&gt;So&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;if first.id then group=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if first.id or flag='IN' or (flag='OUT' and flag=lag(flag)) then group+1 ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;IS SAME AS&amp;nbsp; BELOW?????&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;IF first.id then GROUP=1;&lt;/P&gt;&lt;P&gt;ELSE IF flag='IN' or (flag='OUT' and flag=lag(flag)) then group+1 ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Also while doing the imputations we do it on the final transposed dataset??&lt;/P&gt;&lt;P&gt;when we say &lt;STRONG&gt;out(i) - 1; how can we guarentee that its subtracting minutes since out is a time value???&lt;/STRONG&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 22 Aug 2013 19:19:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Proc-Transpose/m-p/117796#M32491</guid>
      <dc:creator>robertrao</dc:creator>
      <dc:date>2013-08-22T19:19:53Z</dc:date>
    </item>
  </channel>
</rss>

