SAS proc fcmp返回丢失

SAS proc fcmp返回丢失,sas,fcmp,Sas,Fcmp,我有以下代码: options mprint mlogic symbolgen; %macro get_vtype(); %let table = %sysfunc(dequote(&table.)); %let var = %sysfunc(dequote(&var.)); data metadata.temp; set &table.; var = vtype(&var.); call symput('res',vtype

我有以下代码:

options mprint mlogic symbolgen;
%macro get_vtype();
  %let table = %sysfunc(dequote(&table.));
  %let var = %sysfunc(dequote(&var.));

  data metadata.temp;
    set &table.;
    var = vtype(&var.);
    call symput('res',vtype(&var.));
  run;
%put &=res;
%mend;
proc fcmp outlib=work.functions.wrapper;
  function myvtype(table $,var $) $ 1;
    rc = run_macro('get_vtype',table,var,res);
    put rc;
    put res;
    return (res);
  endsub;
quit;
options cmplib=work.functions;
data temp;
  vtype = myvtype("sashelp.class","age");
run;
我希望得到
N
作为temp的结果。然而,它不见了。在调试我提到的时,
%put&=res解析为
N
,但
put res
<代码>返回
`。
问题是什么

我的猜测是
元数据
库没有在
run\u宏
会话中分配

我在
run\u macro
中遇到了一些非常奇怪和不一致的结果,我会尽可能避免它-改为尝试
dosubl
。以下代码起作用:

%macro get_vtype(table,var);
  data _null_;
    set &table.;
    var = vtype(&var.);
    call symputx('res',vtype(&var.),'g');
    stop;
  run;
%put &=res;
%mend;
proc fcmp outlib=work.functions.wrapper;
  function myvtype(table $,var $) $ 1;
    rc = dosubl(cats('%get_vtype(',table,',',var,');'));
    put rc;
    length res $1;
    res=symget("res");
    put res;
    return (res);
  endsub;
quit;
options cmplib=work.functions;
data test;
  vtype = myvtype("sashelp.class","age");
run;