<?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: Macro / Looping in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Macro-Looping/m-p/784073#M250135</link>
    <description>&lt;P&gt;Hello&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/408791"&gt;@KevinRetric&lt;/a&gt;&amp;nbsp;,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;No need for a macro.&lt;/P&gt;
&lt;P&gt;You need an array (or better : 2 arrays) and loop over the array elements.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data work.have;
input ID $ set_2016 set_2017 set_2018 set_2019;
cards;
1	10	20   5	10
2	 8	 0	10	 8
3	 5	40	0	 9
;
run;

data work.want(drop=i set_:);
 set work.have;
 array have{*}     set_2016 -     set_2019;
 array want{*} new_set_2016 - new_set_2019;
 do i=1 to dim(have);
  want(i) = have(i) + 10;
 end;
run;
/* end of program */&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Koen&lt;/P&gt;</description>
    <pubDate>Sat, 04 Dec 2021 12:47:37 GMT</pubDate>
    <dc:creator>sbxkoenk</dc:creator>
    <dc:date>2021-12-04T12:47:37Z</dc:date>
    <item>
      <title>Macro / Looping</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-Looping/m-p/784072#M250134</link>
      <description>&lt;P&gt;Hi all - thank you for this forum. I found a lot of useful answers here while starting to learn SAS.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I hope you can help me with my little problem here.&amp;nbsp;&lt;/P&gt;&lt;P&gt;An excerpt from my dataset looks like this:&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;set_2016&lt;/TD&gt;&lt;TD&gt;set_2017&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;set_2018&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;set_2019&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;20&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;40&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;What I would like to do is to create a new value for each row per column (e.g. New_set_2016 = set_2016 + 10)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Since I have numerous columns, I would like to create a macro or a loop which applies the aforementioned formula to each column in my dataset.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am reading through several forums to at least try and build a code but have failed to do so - I hope you could help me out with this.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Again thank you for this opportunity&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Best&lt;/P&gt;&lt;P&gt;Kevin&lt;/P&gt;</description>
      <pubDate>Sat, 04 Dec 2021 12:37:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-Looping/m-p/784072#M250134</guid>
      <dc:creator>KevinRetric</dc:creator>
      <dc:date>2021-12-04T12:37:33Z</dc:date>
    </item>
    <item>
      <title>Re: Macro / Looping</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-Looping/m-p/784073#M250135</link>
      <description>&lt;P&gt;Hello&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/408791"&gt;@KevinRetric&lt;/a&gt;&amp;nbsp;,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;No need for a macro.&lt;/P&gt;
&lt;P&gt;You need an array (or better : 2 arrays) and loop over the array elements.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data work.have;
input ID $ set_2016 set_2017 set_2018 set_2019;
cards;
1	10	20   5	10
2	 8	 0	10	 8
3	 5	40	0	 9
;
run;

data work.want(drop=i set_:);
 set work.have;
 array have{*}     set_2016 -     set_2019;
 array want{*} new_set_2016 - new_set_2019;
 do i=1 to dim(have);
  want(i) = have(i) + 10;
 end;
run;
/* end of program */&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Koen&lt;/P&gt;</description>
      <pubDate>Sat, 04 Dec 2021 12:47:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-Looping/m-p/784073#M250135</guid>
      <dc:creator>sbxkoenk</dc:creator>
      <dc:date>2021-12-04T12:47:37Z</dc:date>
    </item>
    <item>
      <title>Re: Macro / Looping</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-Looping/m-p/784079#M250137</link>
      <description>&lt;P&gt;Dear &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/60547"&gt;@sbxkoenk&lt;/a&gt;&amp;nbsp;&amp;nbsp;,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;thank you very much for your quick response - your solution worked perfectly. Sorry to bother you with a follow-up...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I found a very interesting financial dataset in the internet, which I would like to use as a learning base - this seems a bit more complicated - I am trying to apply your code, but I&amp;nbsp; assume this one requires a slightly different approach :)?&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In the following dataset, I would like to apply a formula, which calculates&amp;nbsp; "(set_2016+track_2016)/FY_31.12.2016" for each year and creates a new set that ranges from "New_2016 - New_2018".&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;set_FY2016&lt;/TD&gt;&lt;TD&gt;set_FY2017&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;set_FY2018&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;track_FY2016&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;track_FY2017&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;track_FY2018&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;FY_31.12.2016&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;FY_31.12.2017&lt;/FONT&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;FY_31.12.2018&lt;/FONT&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;20&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;212&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;120&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;204&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;53&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;32&lt;/TD&gt;&lt;TD&gt;82&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;103&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;40&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;55&lt;/TD&gt;&lt;TD&gt;44&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;523&lt;/TD&gt;&lt;TD&gt;440&lt;/TD&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Given your great example I tried:&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;&lt;FONT color="#0000FF"&gt;data&lt;/FONT&gt; want (drop=i :_FY:);&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&lt;FONT color="#0000FF"&gt;set&lt;/FONT&gt; have;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&lt;FONT color="#0000FF"&gt;array&lt;/FONT&gt; have{*} Set_FY2016 - FY_31.12.2018;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&lt;FONT color="#0000FF"&gt;array&lt;/FONT&gt; want{*} New_Value_FY2016 - New_Value_FY2018;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&lt;FONT color="#0000FF"&gt;do&lt;/FONT&gt; i=1 &lt;FONT color="#0000FF"&gt;to&lt;/FONT&gt; dim(have);&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;Want(i) = have(i)+have(i); &lt;FONT color="#339966"&gt;/*this is where I am stuck, as this takes the whole dataset into consideration, but I would like to apply the respective formula*/&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2" color="#0000FF"&gt;end;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2" color="#0000FF"&gt;run;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="arial,helvetica,sans-serif" size="3"&gt;Is this doable with the provided code?&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="arial,helvetica,sans-serif" size="3"&gt;Thank you so much for your input. I wish you a nice day.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="arial,helvetica,sans-serif" size="3"&gt;Kevin&lt;/FONT&gt;&lt;/P&gt;</description>
      <pubDate>Sat, 04 Dec 2021 13:46:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-Looping/m-p/784079#M250137</guid>
      <dc:creator>KevinRetric</dc:creator>
      <dc:date>2021-12-04T13:46:18Z</dc:date>
    </item>
    <item>
      <title>Re: Macro / Looping</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-Looping/m-p/784082#M250138</link>
      <description>&lt;P&gt;See if this gets you the answer to your latest question. You just have to modify the code a little.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile datalines delimiter = ",";
input ID $	set_FY2016	set_FY2017	set_FY2018	track_FY2016	track_FY2017	track_FY2018	FY_31_12_2016	FY_31_12_2017&amp;nbsp;	FY_31_12_2018;
cards;
1,10,20,5,12,212,3,120,204,53
2,8,0,10,4,3,32,82,3,103
3,5,40,0,55,44,3,523,440,12
;
run;

/* set_2016+track_2016)/FY_31.12.2016 */

data want (drop = i);
	set have;
	array 	_set 	[*] set_:;
	array 	_track 	[*] track_:;
	array 	_fy 	[*] fy_:;
	array 	_new 	[*] new_2016 - new_2018;
	do i = 1 to dim(_set);
		_new[i] = ((_set[i] + _track[i]) / _fy[i]);
	end;
run;
		&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Also, please mark &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/60547"&gt;@sbxkoenk&lt;/a&gt;'s solution as the correct one since he answered your original question.&lt;/P&gt;</description>
      <pubDate>Sat, 04 Dec 2021 14:06:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-Looping/m-p/784082#M250138</guid>
      <dc:creator>maguiremq</dc:creator>
      <dc:date>2021-12-04T14:06:53Z</dc:date>
    </item>
    <item>
      <title>Re: Macro / Looping</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-Looping/m-p/784085#M250140</link>
      <description>&lt;P&gt;Hello&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/281770"&gt;@maguiremq&lt;/a&gt;&amp;nbsp; - thank you so much! I was able to adjust the code and works just perfect.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I will revise the code and make sure to remember it. I hope it fine to come back with further questions, if I get stuck at some point.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I wish you a very nice day.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Kevin&lt;/P&gt;</description>
      <pubDate>Sat, 04 Dec 2021 14:40:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-Looping/m-p/784085#M250140</guid>
      <dc:creator>KevinRetric</dc:creator>
      <dc:date>2021-12-04T14:40:41Z</dc:date>
    </item>
  </channel>
</rss>

