<?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 concatenate values across observations in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/concatenate-values-across-observations/m-p/610934#M178011</link>
    <description>&lt;P&gt;Hello&lt;/P&gt;
&lt;P&gt;I want to concatenate values across observations.&lt;/P&gt;
&lt;P&gt;The results are not as I want .&lt;/P&gt;
&lt;P&gt;For ID=1 I expect to get in last row&amp;nbsp;&amp;nbsp;175X,152X,280X&lt;/P&gt;
&lt;P&gt;For ID=2 I expect to get in last row&amp;nbsp; 921X,929X&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Data raw_tbl;
Informat Date_of_Birth  mmddyy10.;
Format Date_of_Birth  date9.;
INPUT ID	Date_of_Birth	X $	W $;
cards;
1 9/15/2010 60118 175X
1 9/15/2010 60118 152X
1 9/16/2010 60119 280X
2 5/18/1999 60321 921X
2 5/18/1999 60321 929X
;
run;

data required ;
set raw_tbl;
by ID;
retain Concatenate_W ;
IF first.ID then Concatenate_W=W;
else Concatenate_W = catx(',',Concatenate_W,W);
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 11 Dec 2019 09:46:05 GMT</pubDate>
    <dc:creator>Ronein</dc:creator>
    <dc:date>2019-12-11T09:46:05Z</dc:date>
    <item>
      <title>concatenate values across observations</title>
      <link>https://communities.sas.com/t5/SAS-Programming/concatenate-values-across-observations/m-p/610934#M178011</link>
      <description>&lt;P&gt;Hello&lt;/P&gt;
&lt;P&gt;I want to concatenate values across observations.&lt;/P&gt;
&lt;P&gt;The results are not as I want .&lt;/P&gt;
&lt;P&gt;For ID=1 I expect to get in last row&amp;nbsp;&amp;nbsp;175X,152X,280X&lt;/P&gt;
&lt;P&gt;For ID=2 I expect to get in last row&amp;nbsp; 921X,929X&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Data raw_tbl;
Informat Date_of_Birth  mmddyy10.;
Format Date_of_Birth  date9.;
INPUT ID	Date_of_Birth	X $	W $;
cards;
1 9/15/2010 60118 175X
1 9/15/2010 60118 152X
1 9/16/2010 60119 280X
2 5/18/1999 60321 921X
2 5/18/1999 60321 929X
;
run;

data required ;
set raw_tbl;
by ID;
retain Concatenate_W ;
IF first.ID then Concatenate_W=W;
else Concatenate_W = catx(',',Concatenate_W,W);
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 11 Dec 2019 09:46:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/concatenate-values-across-observations/m-p/610934#M178011</guid>
      <dc:creator>Ronein</dc:creator>
      <dc:date>2019-12-11T09:46:05Z</dc:date>
    </item>
    <item>
      <title>Re: concatenate values across observations</title>
      <link>https://communities.sas.com/t5/SAS-Programming/concatenate-values-across-observations/m-p/610936#M178012</link>
      <description>&lt;P&gt;How many rows do you want in the final output? 2 or 5?&lt;/P&gt;</description>
      <pubDate>Wed, 11 Dec 2019 09:53:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/concatenate-values-across-observations/m-p/610936#M178012</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2019-12-11T09:53:24Z</dc:date>
    </item>
    <item>
      <title>Re: concatenate values across observations</title>
      <link>https://communities.sas.com/t5/SAS-Programming/concatenate-values-across-observations/m-p/610938#M178013</link>
      <description>&lt;P&gt;You need to define the new variable with a sufficient length, or it will default to the length of W and be too short.&lt;/P&gt;</description>
      <pubDate>Wed, 11 Dec 2019 10:02:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/concatenate-values-across-observations/m-p/610938#M178013</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2019-12-11T10:02:12Z</dc:date>
    </item>
    <item>
      <title>Re: concatenate values across observations</title>
      <link>https://communities.sas.com/t5/SAS-Programming/concatenate-values-across-observations/m-p/610944#M178015</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/31304"&gt;@PeterClemmensen&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;How many rows do you want in the final output? 2 or 5?&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;or 7 (summing row at the end of each group)&lt;/P&gt;</description>
      <pubDate>Wed, 11 Dec 2019 10:30:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/concatenate-values-across-observations/m-p/610944#M178015</guid>
      <dc:creator>andreas_lds</dc:creator>
      <dc:date>2019-12-11T10:30:14Z</dc:date>
    </item>
    <item>
      <title>Re: concatenate values across observations</title>
      <link>https://communities.sas.com/t5/SAS-Programming/concatenate-values-across-observations/m-p/610945#M178016</link>
      <description>&lt;P&gt;&amp;nbsp;5&amp;nbsp; (same as in original data set)&lt;/P&gt;</description>
      <pubDate>Wed, 11 Dec 2019 10:36:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/concatenate-values-across-observations/m-p/610945#M178016</guid>
      <dc:creator>Ronein</dc:creator>
      <dc:date>2019-12-11T10:36:35Z</dc:date>
    </item>
    <item>
      <title>Re: concatenate values across observations</title>
      <link>https://communities.sas.com/t5/SAS-Programming/concatenate-values-across-observations/m-p/610952#M178019</link>
      <description>&lt;P&gt;The problem is that because of&amp;nbsp;the first assignment statement,&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;IF first.ID then Concatenate_W=W;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;your contatenated variable gets the same length (8) as the W&amp;nbsp; variable.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;BTW, I would use CALL CATX for that kind of work, as it is faster (instead of concatenating into a temporary space and then moving all the data to the target variable, the data i directly concatenated into the target variable), e.g.:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data required ;
  do until(last.ID);
    set raw_tbl;
    by ID;
    length Concatenate_W $100;
    call catx(',',Concatenate_W,W);
    output;
    end;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 11 Dec 2019 11:13:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/concatenate-values-across-observations/m-p/610952#M178019</guid>
      <dc:creator>s_lassen</dc:creator>
      <dc:date>2019-12-11T11:13:20Z</dc:date>
    </item>
    <item>
      <title>Re: concatenate values across observations</title>
      <link>https://communities.sas.com/t5/SAS-Programming/concatenate-values-across-observations/m-p/610953#M178020</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/159549"&gt;@Ronein&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have added a data step to calculate automatically the maximum length needed for you new variable Concatenate_W.&lt;/P&gt;
&lt;P&gt;It is stored in the macrovariable &amp;amp;max_length.&lt;/P&gt;
&lt;P&gt;Best,&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
/* Compute the maximial length for each ID */
data raw_tbl_c;
	set raw_tbl;
	by ID;
	if first.ID then len_W = 0;
	len_W + length(W) + 1; /* add 1 for the comma */
	if last.ID then do;
		len_W_final = len_W - 1; /* remove the last comma from length calculation*/
		output;
	end;
run;

/* Put the maximal length among all IDs into a macrovariable &amp;amp;max_length */
proc sql noprint;
	select max(len_W_final) into:max_length from raw_tbl_c;
quit;

/* Concatenate values and set Concatenate_W length to &amp;amp;max_length */
data required;
	set raw_tbl;
	length Concatenate_W $&amp;amp;max_length.;
	by ID;
	retain Concatenate_W;

	IF first.ID then Concatenate_W=W;
	else Concatenate_W=catx(',', Concatenate_W, W);
run;

proc print data=raw_tbl;
run;

proc print data=required;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 11 Dec 2019 11:21:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/concatenate-values-across-observations/m-p/610953#M178020</guid>
      <dc:creator>ed_sas_member</dc:creator>
      <dc:date>2019-12-11T11:21:53Z</dc:date>
    </item>
  </channel>
</rss>

