2017-07-03 70 views
1

我有以下代碼:SAS PROC鈣鎂磷肥回報失蹤

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的結果溫度。但它缺失。在我提到的調試時,%put &=res;解析爲N,但put res; returns .`。 Waht是問題嗎?

回答

3

我的猜測是metadata庫沒有在run_macro會話中分配。

我用run_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; 
+0

太棒了!工作正常,謝謝。 – zuluk