<?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: Converting partially horizontal dataset to vertical based on commas in one column in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Converting-partially-horizontal-dataset-to-vertical-based-on/m-p/921739#M362971</link>
    <description>&lt;P&gt;And one more with proc transpose (assuming data set is sorted by Start_date and Pain_location):&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;filename f TEMP;
data _null_; file f; put; run;

data want2;
  set have;
  infile f dlm="," truncover; /* fake file required to data split*/

  /* split Patinet into varaibles n1 to n5*/
  input @@;
  _infile_=patient;
  input @1 (n1-n5) (: $ 32.) @@;
  
  output;
  drop patient;
run;

proc transpose 
  data=want2 
  out=want2(drop=_: 
    rename=(col1=patient)
    where=(patient is not null)
  );
  by Start_date Pain_location;
  var n:;
run;
proc print;
run;
filename f clear;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Bart&lt;/P&gt;</description>
    <pubDate>Mon, 25 Mar 2024 19:41:17 GMT</pubDate>
    <dc:creator>yabwon</dc:creator>
    <dc:date>2024-03-25T19:41:17Z</dc:date>
    <item>
      <title>Converting partially horizontal dataset to vertical based on commas in one column</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Converting-partially-horizontal-dataset-to-vertical-based-on/m-p/921729#M362964</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have a large dataset that is kind of poorly set up. It looks kind of like this:&lt;/P&gt;
&lt;TABLE width="202"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="64"&gt;Pain_location&lt;/TD&gt;
&lt;TD width="74"&gt;Start_date&lt;/TD&gt;
&lt;TD width="64"&gt;Patient&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Head&lt;/TD&gt;
&lt;TD&gt;2022-03-05&lt;/TD&gt;
&lt;TD&gt;Maddie&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Abdomen&lt;/TD&gt;
&lt;TD&gt;2022-04-20&lt;/TD&gt;
&lt;TD&gt;Jeff, Chris, Ali, Zara&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Head&lt;/TD&gt;
&lt;TD&gt;2022-04-22&lt;/TD&gt;
&lt;TD&gt;John, Peter&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Back&lt;/TD&gt;
&lt;TD&gt;2022-06-01&lt;/TD&gt;
&lt;TD&gt;Elizabeth&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Back&lt;/TD&gt;
&lt;TD&gt;2022-06-15&lt;/TD&gt;
&lt;TD&gt;Frank, Jane, Alice&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Hip&lt;/TD&gt;
&lt;TD&gt;2022-06-15&lt;/TD&gt;
&lt;TD&gt;Betty&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I want to change it to a more vertical form based on the last column to look like below. I have looked around but cannot figure it out. Can you please help me out?Thanks,&lt;/P&gt;
&lt;TABLE width="202"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="64"&gt;Pain_location&lt;/TD&gt;
&lt;TD width="74"&gt;Start_date&lt;/TD&gt;
&lt;TD width="64"&gt;Patient&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Head&lt;/TD&gt;
&lt;TD&gt;2022-03-05&lt;/TD&gt;
&lt;TD&gt;Maddie&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Abdomen&lt;/TD&gt;
&lt;TD&gt;2022-04-20&lt;/TD&gt;
&lt;TD&gt;Jeff&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Abdomen&lt;/TD&gt;
&lt;TD&gt;2022-04-20&lt;/TD&gt;
&lt;TD&gt;Chris&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Abdomen&lt;/TD&gt;
&lt;TD&gt;2022-04-20&lt;/TD&gt;
&lt;TD&gt;Ali&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Abdomen&lt;/TD&gt;
&lt;TD&gt;2022-04-20&lt;/TD&gt;
&lt;TD&gt;Zara&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Head&lt;/TD&gt;
&lt;TD&gt;2022-04-22&lt;/TD&gt;
&lt;TD&gt;John&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Head&lt;/TD&gt;
&lt;TD&gt;2022-04-22&lt;/TD&gt;
&lt;TD&gt;Peter&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Back&lt;/TD&gt;
&lt;TD&gt;2022-06-01&lt;/TD&gt;
&lt;TD&gt;Elizabeth&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Back&lt;/TD&gt;
&lt;TD&gt;2022-06-15&lt;/TD&gt;
&lt;TD&gt;Frank&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Back&lt;/TD&gt;
&lt;TD&gt;2022-06-15&lt;/TD&gt;
&lt;TD&gt;Jane&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Back&lt;/TD&gt;
&lt;TD&gt;2022-06-15&lt;/TD&gt;
&lt;TD&gt;Alice&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Hip&lt;/TD&gt;
&lt;TD&gt;2022-06-15&lt;/TD&gt;
&lt;TD&gt;Betty&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;</description>
      <pubDate>Mon, 25 Mar 2024 18:25:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Converting-partially-horizontal-dataset-to-vertical-based-on/m-p/921729#M362964</guid>
      <dc:creator>Primavera</dc:creator>
      <dc:date>2024-03-25T18:25:33Z</dc:date>
    </item>
    <item>
      <title>Re: Converting partially horizontal dataset to vertical based on commas in one column</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Converting-partially-horizontal-dataset-to-vertical-based-on/m-p/921730#M362965</link>
      <description>&lt;P&gt;Here is one way creating a new variable:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;data want;
   set have;
   length newpatient $ 10; /*large enough number to hold the longest name*/
   do i=1 to countw(patient,',');
      newpatient=strip(scan(patient,i,','));
      output;
   end;
   drop i; /* may want to drop Patient as well*/
run;&lt;/PRE&gt;
&lt;P&gt;The logic will require a new variable. If you really want to have the name of the variable as Patient then there are some options about renaming the existing variable and using that as "old" name with Patient instead of Newpatient.&lt;/P&gt;</description>
      <pubDate>Mon, 25 Mar 2024 18:31:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Converting-partially-horizontal-dataset-to-vertical-based-on/m-p/921730#M362965</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2024-03-25T18:31:35Z</dc:date>
    </item>
    <item>
      <title>Re: Converting partially horizontal dataset to vertical based on commas in one column</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Converting-partially-horizontal-dataset-to-vertical-based-on/m-p/921734#M362967</link>
      <description>&lt;P&gt;Very awesome. Thank you &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 25 Mar 2024 19:17:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Converting-partially-horizontal-dataset-to-vertical-based-on/m-p/921734#M362967</guid>
      <dc:creator>Primavera</dc:creator>
      <dc:date>2024-03-25T19:17:26Z</dc:date>
    </item>
    <item>
      <title>Re: Converting partially horizontal dataset to vertical based on commas in one column</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Converting-partially-horizontal-dataset-to-vertical-based-on/m-p/921737#M362969</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/296573"&gt;@Primavera&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You already have a solution form&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13884"&gt;@ballardw&lt;/a&gt;&amp;nbsp;but let me share one more, just for fun:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile CARDS dlm="|";
input Pain_location :$12. Start_date yymmdd10. Patient :$200.;
format Start_date yymmdd10.;
cards;
Head|2022-03-05|Maddie
Abdomen|2022-04-20|Jeff,Chris,Ali,Zara
Head|2022-04-22|John,Peter
Back|2022-06-01|Elizabeth
Back|2022-06-15|Frank,Jane,Alice
Hip|2022-06-15|Betty
;
run;
proc print;
run;

filename f TEMP;
data _null_; file f; put; run;

data want;
  set have;
  infile f dlm="," truncover; /* fake file required to data split*/

  /* split Patinet into varaibles n1 to n5*/
  input @@;
  _infile_=patient;
  input @1 (n1-n5) (: $ 32.) @@;
  
  /* loop over n1-n5 to output values */
  array n $ n1-n5;
  do over n;
    if n ne " " then
      do;
        newPatient=n;
        output;
      end;
    else leave;
  end;

  /* clean up */
  drop n1-n5 patient;
  rename newPatient=patient;
run;
proc print;
run;
filename f clear;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Bart&lt;/P&gt;</description>
      <pubDate>Mon, 25 Mar 2024 19:35:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Converting-partially-horizontal-dataset-to-vertical-based-on/m-p/921737#M362969</guid>
      <dc:creator>yabwon</dc:creator>
      <dc:date>2024-03-25T19:35:12Z</dc:date>
    </item>
    <item>
      <title>Re: Converting partially horizontal dataset to vertical based on commas in one column</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Converting-partially-horizontal-dataset-to-vertical-based-on/m-p/921739#M362971</link>
      <description>&lt;P&gt;And one more with proc transpose (assuming data set is sorted by Start_date and Pain_location):&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;filename f TEMP;
data _null_; file f; put; run;

data want2;
  set have;
  infile f dlm="," truncover; /* fake file required to data split*/

  /* split Patinet into varaibles n1 to n5*/
  input @@;
  _infile_=patient;
  input @1 (n1-n5) (: $ 32.) @@;
  
  output;
  drop patient;
run;

proc transpose 
  data=want2 
  out=want2(drop=_: 
    rename=(col1=patient)
    where=(patient is not null)
  );
  by Start_date Pain_location;
  var n:;
run;
proc print;
run;
filename f clear;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Bart&lt;/P&gt;</description>
      <pubDate>Mon, 25 Mar 2024 19:41:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Converting-partially-horizontal-dataset-to-vertical-based-on/m-p/921739#M362971</guid>
      <dc:creator>yabwon</dc:creator>
      <dc:date>2024-03-25T19:41:17Z</dc:date>
    </item>
  </channel>
</rss>

