<?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: Sum Values Stored in Macro Variables in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Sum-Values-Stored-in-Macro-Variables/m-p/96369#M20340</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I prefer to use spaces as delimiters in strings.&amp;nbsp; They are easy to type, read and pass as parameters to macros.&lt;/P&gt;&lt;P&gt;Using a space also makes it easy to handle empty strings by adding a default value inside of the call to translate() to prevent syntax errors when the list in the macro variable is empty.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%let list= 1 2 3;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%let sum=%sysfunc(sum(%sysfunc(translate(. &amp;amp;list,%str(,),%str( )))));&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%put sum(&amp;amp;list)=&amp;amp;sum;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;sum(1 2 3)=6&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%let list= ;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%let sum=%sysfunc(sum(%sysfunc(translate(. &amp;amp;list,%str(,),%str( )))));&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%put sum(&amp;amp;list)=&amp;amp;sum;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;sum()=.&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 26 Apr 2012 23:25:49 GMT</pubDate>
    <dc:creator>Tom</dc:creator>
    <dc:date>2012-04-26T23:25:49Z</dc:date>
    <item>
      <title>Sum Values Stored in Macro Variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Sum-Values-Stored-in-Macro-Variables/m-p/96365#M20336</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I have a macro variable that I split up into X number of macro variables, each macro variable storing a number.&amp;nbsp; I want to sum up those number.&amp;nbsp; I cannot get the code below to work properly.&amp;nbsp; Can anyone help me figure out how to use the SUM() function with macro variables?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%macro enrollment(rampdata=);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let rampmo=%sysfunc(countw(&amp;amp;rampdata.,'|'));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put &amp;amp;rampmo.;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %do i=1 %to &amp;amp;rampmo.;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let ramp&amp;amp;i.=%scan(&amp;amp;rampdata.,&amp;amp;i.,'|');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let ramp&amp;amp;i.=%sysfunc(compress(&amp;amp;&amp;amp;ramp&amp;amp;i.));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put &amp;amp;&amp;amp;ramp&amp;amp;i.;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let rampsum=%eval(sum(OF ramp1-ramp&amp;amp;rampmo.));&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* I know this is wrong, and I tried different way here.&amp;nbsp; Can't figure it out. */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put &amp;amp;steadymo.;&lt;/P&gt;&lt;P&gt;%mend enrollment;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%enrollment(rampdata=0|1|2|2|4|4|5|6|8|8|13|10|10);&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 26 Apr 2012 20:45:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Sum-Values-Stored-in-Macro-Variables/m-p/96365#M20336</guid>
      <dc:creator>djbateman</dc:creator>
      <dc:date>2012-04-26T20:45:09Z</dc:date>
    </item>
    <item>
      <title>Re: Sum Values Stored in Macro Variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Sum-Values-Stored-in-Macro-Variables/m-p/96366#M20337</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;The SUM function doesn't exist in macro language.&amp;nbsp; In general, to use DATA step functions in macro language, you have to apply %SYSFUNC:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%let rampsum = %eval(%sysfunc(sum(of ramp1 - ramp&amp;amp;rampmo.)));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Even this is not a working statement, as the word OF causes trouble for macro language.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Better yet, skip most of the code and shift to:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%let rampsum = %eval(%sysfunc(translate(&amp;amp;rampdata, +, |)));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This will convert all the "|" to "+", then perform the math.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Good luck.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 26 Apr 2012 21:03:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Sum-Values-Stored-in-Macro-Variables/m-p/96366#M20337</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2012-04-26T21:03:43Z</dc:date>
    </item>
    <item>
      <title>Re: Sum Values Stored in Macro Variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Sum-Values-Stored-in-Macro-Variables/m-p/96367#M20338</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;2 more alternatives:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* alternative 1 */&lt;BR /&gt;%macro enrollment(rampdata=);&lt;BR /&gt;&amp;nbsp; %let rampmo=%sysfunc(countw(&amp;amp;rampdata.,'|'));&lt;BR /&gt;&amp;nbsp; %put &amp;amp;rampmo.;&lt;BR /&gt;&amp;nbsp; %let rampsum=;&lt;BR /&gt;&amp;nbsp; %do i=1 %to &amp;amp;rampmo.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let rampsum=%sysevalf(&amp;amp;rampsum + %scan(&amp;amp;rampdata.,&amp;amp;i.,'|'));&lt;BR /&gt;&amp;nbsp; %end;&lt;BR /&gt;&amp;nbsp; %put rampsum= &amp;amp;rampsum.;&lt;BR /&gt;%mend enrollment;&lt;/P&gt;&lt;P&gt;%enrollment(rampdata=0|1|2|2|4|4|5|6|8|8|13|9.5|10.5);&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;/* alternative 2 */&lt;BR /&gt;%let rampdata=0|1|2|2|4|4|5|6|8|8|13|9.5|10.5;&lt;BR /&gt;%let rampsum2=%sysfunc(sum(%sysfunc(translate(&amp;amp;rampdata,+,|))));&lt;BR /&gt;%put rampsum2= &amp;amp;rampsum2;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 26 Apr 2012 21:39:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Sum-Values-Stored-in-Macro-Variables/m-p/96367#M20338</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2012-04-26T21:39:40Z</dc:date>
    </item>
    <item>
      <title>Re: Sum Values Stored in Macro Variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Sum-Values-Stored-in-Macro-Variables/m-p/96368#M20339</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Looks like you are on the road to ruin with a macro like that.&amp;nbsp; It just seems wrong to me on many levels.&amp;nbsp; What are you trying to do?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Having said that Patrick almost has it but instead of + is should be comma to accommodate missing values.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;39 %macro enrollment(rampdata=);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;40 %let sum = %sysfunc(sum(%sysfunc(translate(%superQ(rampdata),%str(,),|))));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;41 %put NOTE: SUM=&amp;amp;sum;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;42 %mend;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;43 %enrollment(rampdata=0|1|2|2|4|4|&lt;STRONG&gt;.&lt;/STRONG&gt;|5|6|8|8|13|10|10);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: SUM=73&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 26 Apr 2012 21:48:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Sum-Values-Stored-in-Macro-Variables/m-p/96368#M20339</guid>
      <dc:creator>data_null__</dc:creator>
      <dc:date>2012-04-26T21:48:19Z</dc:date>
    </item>
    <item>
      <title>Re: Sum Values Stored in Macro Variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Sum-Values-Stored-in-Macro-Variables/m-p/96369#M20340</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I prefer to use spaces as delimiters in strings.&amp;nbsp; They are easy to type, read and pass as parameters to macros.&lt;/P&gt;&lt;P&gt;Using a space also makes it easy to handle empty strings by adding a default value inside of the call to translate() to prevent syntax errors when the list in the macro variable is empty.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%let list= 1 2 3;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%let sum=%sysfunc(sum(%sysfunc(translate(. &amp;amp;list,%str(,),%str( )))));&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%put sum(&amp;amp;list)=&amp;amp;sum;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;sum(1 2 3)=6&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%let list= ;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%let sum=%sysfunc(sum(%sysfunc(translate(. &amp;amp;list,%str(,),%str( )))));&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%put sum(&amp;amp;list)=&amp;amp;sum;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;sum()=.&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 26 Apr 2012 23:25:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Sum-Values-Stored-in-Macro-Variables/m-p/96369#M20340</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2012-04-26T23:25:49Z</dc:date>
    </item>
    <item>
      <title>Re: Sum Values Stored in Macro Variables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Sum-Values-Stored-in-Macro-Variables/m-p/96370#M20341</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;The following is inherited from your code. If you like, but I recommend to use Astounding's code.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;%macro enrollment(rampdata=);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let rampmo=%sysfunc(countw(&amp;amp;rampdata.,|));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put &amp;amp;rampmo.;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %do i=1 %to &amp;amp;rampmo.;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let ramp&amp;amp;i.=%scan(&amp;amp;rampdata.,&amp;amp;i.,|);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let ramp&amp;amp;i.=%sysfunc(compress(&amp;amp;&amp;amp;ramp&amp;amp;i.));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if &amp;amp;i=1 %then %let list=&amp;amp;ramp1 ;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else %let list= &amp;amp;list , &amp;amp;&amp;amp;ramp&amp;amp;i&amp;nbsp;&amp;nbsp; ;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put &amp;amp;&amp;amp;ramp&amp;amp;i.;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put &amp;amp;list ;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let rampsum=%sysfunc(sum( &amp;amp;list ));&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* I know this is wrong, and I tried different way here.&amp;nbsp; Can't figure it out. */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put &amp;amp;rampsum ;
%mend enrollment;

 

%enrollment(rampdata=0|1|2|2|4|4|5|6|8|8|13|10|10);













0
1
2
2
4
4
5
6
8
8
13
10
10
0 , 1 , 2 , 2 , 4 , 4 , 5 , 6 , 8 , 8 , 13 , 10 , 10




&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Ksharp&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 27 Apr 2012 06:53:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Sum-Values-Stored-in-Macro-Variables/m-p/96370#M20341</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2012-04-27T06:53:52Z</dc:date>
    </item>
  </channel>
</rss>

