从宏内部调用metadata_getattr不起作用

时间:2017-02-17 16:27:08

标签: sas metadata sas-macro

我在SAS DI作业的预编码中有一个宏,在那里我有以下代码:

%let mtransformid = %str(omsobj:TransformationStep\&TransformID);
%let rc = %sysfunc(metadata_getattr("&mtransformid","Name",transform_name));
%put &transform_name;

但是,我不断收到错误消息,指出在最后一步无法解析&transform_name的符号引用。我已经尝试在宏中的数据步骤中将调用包装到metadata_getattr,但这似乎没有帮助:

%let mtransformid = %str(omsobj:TransformationStep\&TransformID);
data _null_;
    rc = metadata_getattr("&mtransformid","Name",trans_name);
    call symputx("transform_name",trans_name);
    %put &transform_name;
run;

上述%put语句会导致错误消息"显式符号引用TRANSFORM_NAME未解析",除非我已初始化"之前的宏变量,在这种情况下输出其先前的值。

作为参考,&TransformID是一个宏变量,在运行时为每个转换由SAS DI自动生成。此外,以下是我一直试图用来获取想法的一些相关链接:

Link 1

Link 2

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

看起来你不能那样使用%sysfunc; metadata_getattr函数希望将数据返回到数据步变量。

this SAS Communities answer中所述,您需要使用数据步骤或将查询放入FCMP函数以使用%sysfunc