<?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: Store each loop output into a single variable in a concatenated format separated by &amp;quot;/&amp;amp;quot in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Store-each-loop-output-into-a-single-variable-in-a-concatenated/m-p/647740#M193887</link>
    <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/328887"&gt;@mballey&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;here is an approach to do this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
	set have end=eof;
	length outputString1 outputString2 $ 200;
	retain outputString1;
	retain outputString2;
	if Indicator="S" then outputString1 = catx("/",outputString1,inputString);
	else outputString2 = catx("/",outputString2,inputString);
	if eof then output;
	keep outputString1 outputString2;
run;

/*optional */
proc transpose data=want out=want2 (rename=(col1 = inputstrings)) name=outputstring;
	var outputString1 outputString2;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Best,&lt;/P&gt;</description>
    <pubDate>Thu, 14 May 2020 10:18:53 GMT</pubDate>
    <dc:creator>ed_sas_member</dc:creator>
    <dc:date>2020-05-14T10:18:53Z</dc:date>
    <item>
      <title>Store each loop output into a single variable in a concatenated format separated by "/".</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Store-each-loop-output-into-a-single-variable-in-a-concatenated/m-p/647737#M193885</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Good Day!&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;PROBLEM:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;My code is looping through a list of&amp;nbsp;inputStrings. Each&amp;nbsp;inputString has a corresponding&amp;nbsp;Indicator.&lt;/P&gt;&lt;P&gt;If the inputString Indicator is "S" then store it in&amp;nbsp;outputString1&lt;/P&gt;&lt;P&gt;If the&amp;nbsp;inputString&amp;nbsp; Indicator is not "S" then store it in&amp;nbsp;outputString2&lt;/P&gt;&lt;P&gt;I want to store the outputs of each loop iteration into a single variable in a concatenated format separated by "/". Please see below:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you so much!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;HAVE:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;(loop 1)&lt;/P&gt;&lt;P&gt;&lt;EM&gt;inputString Indicator&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;inputString1 S&lt;/P&gt;&lt;P&gt;inputString2 A&lt;/P&gt;&lt;P&gt;inputString3 B&lt;/P&gt;&lt;P&gt;inputString4 C&lt;/P&gt;&lt;P&gt;inputString5 S&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;WANT:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;outputString1=&amp;nbsp;inputString1/inputString5&lt;/P&gt;&lt;P&gt;outputString2=&amp;nbsp;inputString2/inputString3/inputString4&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;SAMPLE CODE:&lt;/STRONG&gt;&lt;BR /&gt;data WORK.have / view=WORK.have;&lt;BR /&gt;infile "&amp;amp;path" length=len missover;&lt;BR /&gt;&lt;BR /&gt;curr_len=1;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; do until (condition);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; select (Type);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; when ("M")&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;select (Indicator);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;When ("S");&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;do;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;outputString1=Trim(inputString);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;output;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;otherwise&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; do;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; outputString2=Trim(inputString) || ' / ';&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;end;&lt;BR /&gt;end;&lt;BR /&gt;end;&lt;BR /&gt;end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 14 May 2020 10:03:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Store-each-loop-output-into-a-single-variable-in-a-concatenated/m-p/647737#M193885</guid>
      <dc:creator>mballey</dc:creator>
      <dc:date>2020-05-14T10:03:46Z</dc:date>
    </item>
    <item>
      <title>Re: Store each loop output into a single variable in a concatenated format separated by "/&amp;quot</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Store-each-loop-output-into-a-single-variable-in-a-concatenated/m-p/647740#M193887</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/328887"&gt;@mballey&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;here is an approach to do this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
	set have end=eof;
	length outputString1 outputString2 $ 200;
	retain outputString1;
	retain outputString2;
	if Indicator="S" then outputString1 = catx("/",outputString1,inputString);
	else outputString2 = catx("/",outputString2,inputString);
	if eof then output;
	keep outputString1 outputString2;
run;

/*optional */
proc transpose data=want out=want2 (rename=(col1 = inputstrings)) name=outputstring;
	var outputString1 outputString2;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Best,&lt;/P&gt;</description>
      <pubDate>Thu, 14 May 2020 10:18:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Store-each-loop-output-into-a-single-variable-in-a-concatenated/m-p/647740#M193887</guid>
      <dc:creator>ed_sas_member</dc:creator>
      <dc:date>2020-05-14T10:18:53Z</dc:date>
    </item>
    <item>
      <title>Re: Store each loop output into a single variable in a concatenated format separated by "/&amp;quot</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Store-each-loop-output-into-a-single-variable-in-a-concatenated/m-p/647744#M193889</link>
      <description>&lt;P&gt;Here is code to give you your wanted output from the input shown:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  length InputString $20 Indicator $1;
  input InputString Indicator;
cards;
inputString1 S
inputString2 A
inputString3 B
inputString4 C
inputString5 S
;run;

data want;
  length InputString1 InputString2 $200;
  do until(done);
    set have end=done;
    select(indicator);
      when('S') call catx('/',InputString1,InputString);
      otherwise call catx('/',InputString2,InputString);
      end;
    end;
  keep InputString1 InputString2;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;From the code you presented, it seems there is something more to it, but I am not sure what.&lt;/P&gt;</description>
      <pubDate>Thu, 14 May 2020 10:34:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Store-each-loop-output-into-a-single-variable-in-a-concatenated/m-p/647744#M193889</guid>
      <dc:creator>s_lassen</dc:creator>
      <dc:date>2020-05-14T10:34:04Z</dc:date>
    </item>
    <item>
      <title>Re: Store each loop output into a single variable in a concatenated format separated by "/&amp;quot</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Store-each-loop-output-into-a-single-variable-in-a-concatenated/m-p/647746#M193890</link>
      <description>&lt;P&gt;You are missing some important pieces / understanding&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;INPUT statement to read values from the data file&lt;/LI&gt;
&lt;LI&gt;RETAIN statement to maintain the values of partially computed strings over iterations of the &lt;STRONG&gt;implicit&lt;/STRONG&gt;&amp;nbsp; DATA step loop.&lt;/LI&gt;
&lt;LI&gt;You are not using the information provided by the LENGTH=&amp;lt;variable-name&amp;gt; option.&amp;nbsp; Not sure why curr_len is in the code.&lt;/LI&gt;
&lt;LI&gt;SAS has several very useful concatenation functions.&amp;nbsp; The concatenation operator, ||, is used less frequently in (my) code I write today.&lt;/LI&gt;
&lt;LI&gt;INFILE option EOF=&amp;lt;label&amp;gt; can be used to redirect program flow at the 'end of data' condition.&lt;/LI&gt;
&lt;LI&gt;DATA Step character variable are&amp;nbsp;&lt;STRONG&gt;not&amp;nbsp;&lt;/STRONG&gt;dynamically lengthed.&amp;nbsp; You should declare a character variable as&amp;nbsp;&lt;STRONG&gt;$&amp;lt;length&amp;gt;&lt;/STRONG&gt; prior to using it.
&lt;UL&gt;
&lt;LI&gt;Experienced SAS coders will understand how character variables obtain their Program Data Vector (PDV) length from the context of their first occurrence in the code and experientially know how long the variable will be (and thus may not code explicitly a LENGTH statement).&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Example program:&lt;/P&gt;
&lt;PRE&gt;data want(keep=builtString1 builtString2);
  infile cards eof=lastcard;

  length string $20 flag $1;
  input string flag ;

  length builtString1 builtString2 $200;
  retain builtString1 builtString2 ;

  if flag = 'S' then 
    builtString1 = catx('/',builtString1,string);
  else
    builtString2 = catx('/',builtString2,string);

  return;  /* stay out of labelled section of code */

lastcard:
  OUTPUT;
cards;
inputString1 S
inputString2 A
inputString3 B
inputString4 C
inputString5 S
;
&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 14 May 2020 10:38:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Store-each-loop-output-into-a-single-variable-in-a-concatenated/m-p/647746#M193890</guid>
      <dc:creator>RichardDeVen</dc:creator>
      <dc:date>2020-05-14T10:38:19Z</dc:date>
    </item>
    <item>
      <title>Re: Store each loop output into a single variable in a concatenated format separated by "/&amp;</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Store-each-loop-output-into-a-single-variable-in-a-concatenated/m-p/647964#M193976</link>
      <description>Thank you so much</description>
      <pubDate>Fri, 15 May 2020 04:36:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Store-each-loop-output-into-a-single-variable-in-a-concatenated/m-p/647964#M193976</guid>
      <dc:creator>mballey</dc:creator>
      <dc:date>2020-05-15T04:36:25Z</dc:date>
    </item>
  </channel>
</rss>

