<?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: Summarizing visit data in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Summarizing-visit-data/m-p/772115#M245127</link>
    <description>&lt;P&gt;First sort:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sort data=have;
by usubjid visit date;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;then use a data step with a new retained variable:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
set have (rename=(module=_module));
by usubjid visit date;
length module $10; * set as needed for maximum number of modules;
retain module;
if first.date then module = "";
if findw(module,_module,",") = 0 then module = catx(",",module,_module);
if last.date;
drop _module;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Codes are untested; for tested code, supply example data in a (working!) data step with datalines.&lt;/P&gt;</description>
    <pubDate>Tue, 05 Oct 2021 10:46:57 GMT</pubDate>
    <dc:creator>Kurt_Bremser</dc:creator>
    <dc:date>2021-10-05T10:46:57Z</dc:date>
    <item>
      <title>Summarizing visit data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Summarizing-visit-data/m-p/772109#M245123</link>
      <description>&lt;P&gt;Hi all, I am trying to summarise some visit data.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is the data I have:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;USUBJID&amp;nbsp; VISIT&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; DATE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MODULE&lt;BR /&gt;101&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SCREENING&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2000-01-02&lt;BR /&gt;101 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SCREENING&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2000-01-02&lt;BR /&gt;101&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UNSCHEDULED 2000-01-02&amp;nbsp;&amp;nbsp; VS&lt;/P&gt;
&lt;P&gt;101&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UNSCHEDULED 2000-01-02&amp;nbsp;&amp;nbsp; VS&lt;BR /&gt;101&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UNSCHEDULED 2000-01-02&amp;nbsp;&amp;nbsp; LB&lt;BR /&gt;101&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UNSCHEDULED 2000-01-04&amp;nbsp;&amp;nbsp; EG&lt;BR /&gt;102&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SCREENING&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2000-01-05&lt;BR /&gt;102&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VISIT 1&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; 2000-01-06 &lt;BR /&gt;102&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UNSCHEDULED 2000-01-06&amp;nbsp;&amp;nbsp; VS&lt;BR /&gt;102&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UNSCHEDULED 2000-01-07&amp;nbsp;&amp;nbsp; LB&lt;BR /&gt;103&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VISIT 1&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; 2000-10-06&lt;BR /&gt;103&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VISIT 1&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; 2000-10-06&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is what I would like. I would like one row per USUBJID/VISIT/DATE. However MODULE needs to be concatenated with commas, only listing distinct values for that USUBJID/VISIT/DATE&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;USUBJID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VISIT&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; DATE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MODULE&lt;BR /&gt;101 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; SCREENING&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2000-01-02&lt;BR /&gt;101&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; UNSCHEDULED&amp;nbsp;&amp;nbsp; 2000-01-02&amp;nbsp;&amp;nbsp;&amp;nbsp; VS, LB&lt;BR /&gt;101&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; UNSCHEDULED&amp;nbsp;&amp;nbsp; 2000-01-04&amp;nbsp;&amp;nbsp;&amp;nbsp; EG&lt;BR /&gt;102&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; SCREENING&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2000-01-05&lt;BR /&gt;102&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; VISIT 1&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; 2000-01-06 &lt;BR /&gt;102&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; UNSCHEDULED&amp;nbsp;&amp;nbsp; 2000-01-06&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VS&lt;BR /&gt;102&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; UNSCHEDULED&amp;nbsp;&amp;nbsp; 2000-01-07&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LB&lt;BR /&gt;103&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; VISIT 1&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; 2000-10-06&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I would appreciate any help.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks!&lt;/P&gt;</description>
      <pubDate>Tue, 05 Oct 2021 10:30:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Summarizing-visit-data/m-p/772109#M245123</guid>
      <dc:creator>kalbo</dc:creator>
      <dc:date>2021-10-05T10:30:07Z</dc:date>
    </item>
    <item>
      <title>Re: Summarizing visit data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Summarizing-visit-data/m-p/772110#M245124</link>
      <description>&lt;P&gt;What is your question?&lt;/P&gt;</description>
      <pubDate>Tue, 05 Oct 2021 10:28:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Summarizing-visit-data/m-p/772110#M245124</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2021-10-05T10:28:06Z</dc:date>
    </item>
    <item>
      <title>Re: Summarizing visit data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Summarizing-visit-data/m-p/772114#M245126</link>
      <description>&lt;P&gt;I just added the question, thanks.&lt;/P&gt;</description>
      <pubDate>Tue, 05 Oct 2021 10:33:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Summarizing-visit-data/m-p/772114#M245126</guid>
      <dc:creator>kalbo</dc:creator>
      <dc:date>2021-10-05T10:33:29Z</dc:date>
    </item>
    <item>
      <title>Re: Summarizing visit data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Summarizing-visit-data/m-p/772115#M245127</link>
      <description>&lt;P&gt;First sort:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sort data=have;
by usubjid visit date;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;then use a data step with a new retained variable:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
set have (rename=(module=_module));
by usubjid visit date;
length module $10; * set as needed for maximum number of modules;
retain module;
if first.date then module = "";
if findw(module,_module,",") = 0 then module = catx(",",module,_module);
if last.date;
drop _module;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Codes are untested; for tested code, supply example data in a (working!) data step with datalines.&lt;/P&gt;</description>
      <pubDate>Tue, 05 Oct 2021 10:46:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Summarizing-visit-data/m-p/772115#M245127</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2021-10-05T10:46:57Z</dc:date>
    </item>
    <item>
      <title>Re: Summarizing visit data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Summarizing-visit-data/m-p/772120#M245130</link>
      <description>&lt;P&gt;Thankyou Kurt. I will try your code soon and flag as the solution.&lt;/P&gt;</description>
      <pubDate>Tue, 05 Oct 2021 10:55:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Summarizing-visit-data/m-p/772120#M245130</guid>
      <dc:creator>kalbo</dc:creator>
      <dc:date>2021-10-05T10:55:26Z</dc:date>
    </item>
    <item>
      <title>Re: Summarizing visit data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Summarizing-visit-data/m-p/782016#M249272</link>
      <description>&lt;P&gt;Hi Kurt&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I tried your code. However I end up with duplicate values of MODULE e.g. VS,VS,LB. I would only need the non-duplicate values e.g. VS,LB.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I've supplied some datalines here to investigate:&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;data have;&lt;BR /&gt;INFILE DATALINES DLM="," missover;&lt;BR /&gt;input USUBJID :$20. VISIT :$20. DATE :$20. MODULE :$20.;&lt;BR /&gt;datalines;&lt;BR /&gt;101,SCREENING,2000-01-02,EG1&lt;BR /&gt;101,SCREENING,2000-01-02&lt;BR /&gt;101,UNSCHEDULED,2000-01-02,VS&lt;BR /&gt;101,UNSCHEDULED,2000-01-02,VS&lt;BR /&gt;101,UNSCHEDULED,2000-01-02,LB&lt;BR /&gt;101,UNSCHEDULED,2000-01-04,EG&lt;BR /&gt;102,SCREENING,2000-01-05&lt;BR /&gt;102,VISIT 1,2000-01-06&lt;BR /&gt;102,UNSCHEDULED,2000-01-06,VS&lt;BR /&gt;102,UNSCHEDULED,2000-01-07,LB&lt;BR /&gt;103,VISIT 1,2000-10-06,VS&lt;BR /&gt;103,VISIT 1,2000-10-06,VS&lt;BR /&gt;;&lt;/P&gt;
&lt;P&gt;proc sort data=have;&lt;BR /&gt;by usubjid visit date;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;data want;&lt;BR /&gt;set have (rename=(module=_module));&lt;BR /&gt;by usubjid visit date;&lt;BR /&gt;length module $10; * set as needed for maximum number of modules;&lt;BR /&gt;retain module;&lt;BR /&gt;if first.date then module = "";&lt;BR /&gt;if findw(module,_module,",") = 0 then module = catx(",",module,_module);&lt;BR /&gt;if last.date;&lt;BR /&gt;drop _module;&lt;BR /&gt;run;&lt;/P&gt;</description>
      <pubDate>Tue, 23 Nov 2021 17:30:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Summarizing-visit-data/m-p/782016#M249272</guid>
      <dc:creator>kalbo</dc:creator>
      <dc:date>2021-11-23T17:30:32Z</dc:date>
    </item>
    <item>
      <title>Re: Summarizing visit data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Summarizing-visit-data/m-p/782149#M249330</link>
      <description>&lt;P&gt;Do you really have strings that look like dates instead of dates? I guess not.&lt;/P&gt;
&lt;P&gt;I had to dow two tweaks to the FINDW function: stripping the blanks off _module, and using a blank as alternate delimiter:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile datalines dlm="," truncover;
input usubjid :$20. visit :$20. date :yymmdd10. module :$20.;
format date yymmdd10.;
datalines;
101,SCREENING,2000-01-02,EG1
101,SCREENING,2000-01-02
101,UNSCHEDULED,2000-01-02,VS
101,UNSCHEDULED,2000-01-02,VS
101,UNSCHEDULED,2000-01-02,LB
101,UNSCHEDULED,2000-01-04,EG
102,SCREENING,2000-01-05
102,VISIT 1,2000-01-06
102,UNSCHEDULED,2000-01-06,VS
102,UNSCHEDULED,2000-01-07,LB
103,VISIT 1,2000-10-06,VS
103,VISIT 1,2000-10-06,VS
;

proc sort data=have;
by usubjid visit date;
run;

data want;
set have (rename=(module=_module));
by usubjid visit date;
length module $10; * set as needed for maximum number of modules;
retain module;
if first.date then module = "";
if findw(module,strip(_module),", ") = 0 then module = catx(",",module,_module);
if last.date;
drop _module;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 24 Nov 2021 08:15:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Summarizing-visit-data/m-p/782149#M249330</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2021-11-24T08:15:29Z</dc:date>
    </item>
  </channel>
</rss>

