Hello all!
I have run into an issue while trying to create a function that calls a macro.
%macro tester();
proc sql noprint;
select pay_for_perf_grp_name
into :name
from idisc.pay_for_perf_grp
where pay_for_perf_grp_id = &a;
quit;
/*data _null_;*/
/*set idisc.pay_for_perf_grp;*/
/*where pay_for_perf_grp_id = &a;*/
/*call symputx('name',pay_for_perf_grp_name);*/
/*run;*/
%mend;
PROC FCMP outlib=shared.funcs.test;
function tester(a) $;
rc= run_macro('tester',a,name);
IF rc = 0 then return(name);
ELSE return('FAILED');
endsub;
run;
options cmplib=shared.funcs;
data test;
input pfp;
test = tester(pfp);
datalines;
1
146
147
30
;
run;
Result:
The idea is that there are ID's that are attached to names and I want the function to be able to call an oracle table and retrieve the names based on the functions.
I get no errors from running the code, but I get blanks as a result. If I change the function to pull the ID's instead and remove the $ then it does work (returns the ID's).
For the macro I tried using both the data step and PROC SQL and both came up with the same result. When I used a %put to see if it was working it showed that it was pulling the correct name. I have also changed the length of the return variable in the function statement and that does not work either.
Not sure what is going on.
Thanks!
EDIT:
The log indicates that when the variable is being pushed from the macro to the function it is being converted from a numeric to a character. However, I am wondering at what point did it ever become a numeric?
The issue ended up being that I needed to have a length statement under the function.
The issue ended up being that I needed to have a length statement under the function.
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
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.
Ready to level-up your skills? Choose your own adventure.