DATA Step, Macro, Functions and more

arithmetic operation using macro variables

Accepted Solution Solved
Reply
Occasional Contributor
Posts: 16
Accepted Solution

arithmetic operation using macro variables

I have two macro variables that correctly resolved from the following PROC SQL functions.

proc sql;

    select count(*) as Total into :totaln from test1;

quit;

proc sql;

    select count(*) as Total into Smiley Tongueartn from test2;

quit;

Although they are both macro (character) variables, in essence they are numeric constants from which I am interested in calculating a percentage: pc = (partn/totaln )* 100.

%macro pc;

%let totaln=%left(&totaln);

%let partn=%left(&partn);

t=inputn(&totaln,8.);

p=inputn(&partn,8.);

%let pc=%syseval((p/t)*100);

title "Percent represented: &pc.% ";

%mend pc;

%pc;

The above attempt did not work. The macro does not let me create a constant t or p and gives me an error message: ERROR 180-322: Statement is not valid or it is used out of proper order.

How do I turn  macro character to numeric variable to perform an arithmetic operation?


Accepted Solutions
Solution
‎07-31-2015 01:23 PM
Super User
Posts: 11,343

Re: arithmetic operation using macro variables

Posted in reply to sonicpoem

I think you're looking for something like:

%let pc = %sysevalf ( (&partn / &totaln)*100);

You may want to round the result to desired number of decimals such as

%let pc = %sysfunc(round(&pc, 0.01));

View solution in original post


All Replies
Solution
‎07-31-2015 01:23 PM
Super User
Posts: 11,343

Re: arithmetic operation using macro variables

Posted in reply to sonicpoem

I think you're looking for something like:

%let pc = %sysevalf ( (&partn / &totaln)*100);

You may want to round the result to desired number of decimals such as

%let pc = %sysfunc(round(&pc, 0.01));

Occasional Contributor
Posts: 16

Re: arithmetic operation using macro variables

Posted in reply to sonicpoem

Thank you.  It worked!

🔒 This topic is solved and locked.

Need further help from the community? Please ask a new question.

Discussion stats
  • 2 replies
  • 739 views
  • 0 likes
  • 2 in conversation