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 :partn 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?
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));
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));
Thank you. It worked!
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.