- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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?
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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));
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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));
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Thank you. It worked!