The assignments to your macro variables will not work. A %SYSFUNC statement is calculated immediately, like e.g.
%let y=4; %let x=%sysfunc(sqrt(&y));
But an assignment like
%let films=%sysfunc(sum(films));
will not work, as "films" is a text value.
You will have to calculate the values you want beforehand.
You can do this using a macro, e.g.
%macro print_actor(id);
%local name films pop awards;
proc sq noprint;
select name, sum(films),avg(pop),sum(awards)
into :name trimmed, :films trimmed, :pop trimmed, :awards trimmed
from hw3.films3
where id=&id;
quit;
title "Actor Name: &name";
footnote "&films &pop &awards";
proc print data=hw3.films;
where id=&id;
var title;
run;
%mend;
%print_actor(10);
Another possibility is to create a view with the values you want, and use #BYVAL in your title and footnotes.
proc sql;
create view actor_sum as select
id,title,name,sum(films) as films, avg(pop) as pop,sum(awards) as awards
from hw3.films
group by id
order by id;
quit;
Title "Actor Name: #BYVAL(name)";
Footnote "#BYVAL(films) #BYVAL(pop) #BYVAL(awards)";
proc print data=actor_sum;
by id name films pop awards;
var title;
run;
This assuming that the NAME variable is on the table as well, and that all records with the same ID have the same NAME value.
I personally prefer the last solution (if you only want a single ID, just put a WHERE clause on PROC PRINT).
... View more