<?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: array or loop help in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/array-or-loop-help/m-p/741162#M231652</link>
    <description>&lt;P&gt;One way:&lt;/P&gt;
&lt;PRE&gt;data junk;
  input a1 $ a2 $ a3 $ a4 $;
datalines;
b1 b5 b2 bc
bb .  b3 bd
b1 b2 .  b4
;

options missing=' ';
data example;
   set junk;
   newvar= catx(',',of a:);
run;&lt;BR /&gt;/* reset the option*/&lt;BR /&gt;options missing='.';&lt;/PRE&gt;
&lt;P&gt;The current missing character is used in the CATX when a variable is missing (go figure). If you reset the missing character to a blank then the normal CATX behavior "skips" it. The list form "of a:" says to use all of the variables whose names start with the letter A". So may not be appropriate with more complex data but does get around the not knowing how many you have.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I'm&amp;nbsp; not fond of "compressing" the . as it will remove decimals in numeric values or other places where a period is needed to understand the value.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Caveat: you may have to set the LENGTH of the newvariable to a much larger than default value, 200 characters, to accomodate 100 values plus commas. Assuming each of your A1 through An could be up to 20 characters long. Then you need newvar to be 20*100 (or maximum number of A variables ever to be encountered) + 99 (or number of variables - 1) to be sure you will have enough space to store the result.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Now for the question of "why"? Notice that the example I provided includes missing values in the "middle". Does the output in that example actually make sense? What can you do with it? Especially when you have 100 or more values involved.&lt;/P&gt;</description>
    <pubDate>Thu, 13 May 2021 16:27:35 GMT</pubDate>
    <dc:creator>ballardw</dc:creator>
    <dc:date>2021-05-13T16:27:35Z</dc:date>
    <item>
      <title>array or loop help</title>
      <link>https://communities.sas.com/t5/SAS-Programming/array-or-loop-help/m-p/741152#M231646</link>
      <description>&lt;P&gt;my data appears like this:&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="254"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="22"&gt;ID&lt;/TD&gt;
&lt;TD width="22"&gt;A1&lt;/TD&gt;
&lt;TD width="26"&gt;A2&amp;nbsp;&lt;/TD&gt;
&lt;TD width="22"&gt;A3&lt;/TD&gt;
&lt;TD width="22"&gt;A4&lt;/TD&gt;
&lt;TD width="22"&gt;A5&lt;/TD&gt;
&lt;TD width="22"&gt;A6&lt;/TD&gt;
&lt;TD width="22"&gt;A7&lt;/TD&gt;
&lt;TD width="22"&gt;A8&lt;/TD&gt;
&lt;TD width="22"&gt;A9&lt;/TD&gt;
&lt;TD width="30"&gt;A10&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;B1&lt;/TD&gt;
&lt;TD&gt;B2&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;B1&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;B1&lt;/TD&gt;
&lt;TD&gt;B2&lt;/TD&gt;
&lt;TD&gt;B3&lt;/TD&gt;
&lt;TD&gt;B4&lt;/TD&gt;
&lt;TD&gt;B5&lt;/TD&gt;
&lt;TD&gt;B6&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;5&lt;/TD&gt;
&lt;TD&gt;B1&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;6&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;7&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;8&lt;/TD&gt;
&lt;TD&gt;B1&lt;/TD&gt;
&lt;TD&gt;B2&lt;/TD&gt;
&lt;TD&gt;B3&lt;/TD&gt;
&lt;TD&gt;B4&lt;/TD&gt;
&lt;TD&gt;B5&lt;/TD&gt;
&lt;TD&gt;B6&lt;/TD&gt;
&lt;TD&gt;B7&lt;/TD&gt;
&lt;TD&gt;B8&lt;/TD&gt;
&lt;TD&gt;B9&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;9&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;10&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;and what I would like is to combine this data into a single data field (i.e. B1,B2,B3) with commas separating the data.&amp;nbsp; If I use something like this:&lt;/P&gt;
&lt;P&gt;newvar = catx(',', A1, A2, A3........A10);&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I get a period at the end of the field - so the Newvar could look like:&amp;nbsp; B1,B2,.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Also my fields could range from A1 to A100 depending on the output.&amp;nbsp; Is there a simple way for me to make this field dynamic with the data?&amp;nbsp;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 13 May 2021 15:50:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/array-or-loop-help/m-p/741152#M231646</guid>
      <dc:creator>Lost_Gary</dc:creator>
      <dc:date>2021-05-13T15:50:47Z</dc:date>
    </item>
    <item>
      <title>Re: array or loop help</title>
      <link>https://communities.sas.com/t5/SAS-Programming/array-or-loop-help/m-p/741155#M231648</link>
      <description>&lt;P&gt;Try :&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;newvar = compress(catx(',', of a1-a100),'.');
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 13 May 2021 15:55:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/array-or-loop-help/m-p/741155#M231648</guid>
      <dc:creator>r_behata</dc:creator>
      <dc:date>2021-05-13T15:55:37Z</dc:date>
    </item>
    <item>
      <title>Re: array or loop help</title>
      <link>https://communities.sas.com/t5/SAS-Programming/array-or-loop-help/m-p/741158#M231649</link>
      <description>&lt;P&gt;Before you go ahead and do this, think about what are the benefits and drawbacks to working with the data as a string B1,B2,B3... etc. compared to leaving the data as it is and then working with it that way. I really am not seeing a benefit to creating such a string. What in your opinion is the benefit of creating such a string?&lt;/P&gt;</description>
      <pubDate>Thu, 13 May 2021 16:07:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/array-or-loop-help/m-p/741158#M231649</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2021-05-13T16:07:42Z</dc:date>
    </item>
    <item>
      <title>Re: array or loop help</title>
      <link>https://communities.sas.com/t5/SAS-Programming/array-or-loop-help/m-p/741162#M231652</link>
      <description>&lt;P&gt;One way:&lt;/P&gt;
&lt;PRE&gt;data junk;
  input a1 $ a2 $ a3 $ a4 $;
datalines;
b1 b5 b2 bc
bb .  b3 bd
b1 b2 .  b4
;

options missing=' ';
data example;
   set junk;
   newvar= catx(',',of a:);
run;&lt;BR /&gt;/* reset the option*/&lt;BR /&gt;options missing='.';&lt;/PRE&gt;
&lt;P&gt;The current missing character is used in the CATX when a variable is missing (go figure). If you reset the missing character to a blank then the normal CATX behavior "skips" it. The list form "of a:" says to use all of the variables whose names start with the letter A". So may not be appropriate with more complex data but does get around the not knowing how many you have.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I'm&amp;nbsp; not fond of "compressing" the . as it will remove decimals in numeric values or other places where a period is needed to understand the value.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Caveat: you may have to set the LENGTH of the newvariable to a much larger than default value, 200 characters, to accomodate 100 values plus commas. Assuming each of your A1 through An could be up to 20 characters long. Then you need newvar to be 20*100 (or maximum number of A variables ever to be encountered) + 99 (or number of variables - 1) to be sure you will have enough space to store the result.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Now for the question of "why"? Notice that the example I provided includes missing values in the "middle". Does the output in that example actually make sense? What can you do with it? Especially when you have 100 or more values involved.&lt;/P&gt;</description>
      <pubDate>Thu, 13 May 2021 16:27:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/array-or-loop-help/m-p/741162#M231652</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2021-05-13T16:27:35Z</dc:date>
    </item>
  </channel>
</rss>

