SAS访问宏变量名称

时间:2018-10-18 20:00:32

标签: sas

我有一些宏变量,每个宏变量都分配有一个值。如何从变量的值中获取变量的名称? 例如,我为每个人分配了一个年龄值。 &Amy = 12,&Peter = 10。 我还有一个宏函数,可以计算重量,例如重量。

%macro weight(name=);
       %let weight=&name*10;
       %put &name.'s weight is &weight.;
%mend;

如果我运行%weight(name = Amy),我想得到的结果是“ Amy的体重是120”。 我怎样才能将结果显示为“ Amy”而不是“ 12”?

谢谢

3 个答案:

答案 0 :(得分:0)

这将使您参与其中。请注意,撇号存在一些问题,您需要对此进行转义或引用。我暂时忽略了这一点。对于您的其余问题:

  1. 添加更多&来解决嵌套的宏变量
  2. 使用%SYSEVALF()对宏变量进行计算

    %let Amy = 12;
    
    %macro weight(name=);
           %let weight=%sysevalf(&&&name*10);
           %put &name. weight is &weight.;
    %mend;
    
    %weight(name=Amy);
    

答案 1 :(得分:0)

好邪恶! “ Amy's”中的那个小单引号使事情变得很混乱。 SAS似乎对尝试将宏的其余部分作为带引号的字符串进行评估感到困惑。 从“魔术字符串”开始,以所有引号结尾,并确保已启用宏输出。

一旦您执行了以下操作,就可以使用。请注意,如其他响应者所建议的那样,请在名称前加上其他与号。

;*';*";*/;quit;
options mprint;
%let Amy = 12;
%macro weightmacro(name=);
       %let weight=%sysevalf(&&&name..*10);
       %put &name.s weight is &weight.;
%mend;
%weightmacro(name=Amy);

答案 2 :(得分:0)

如果要点是可以用%str(%')完成的所有格名词,则

357  %let Amy = 12;
358  %macro weightmacro(name=);
359         %let weight=%sysevalf(&&&name..*10);
360         %put &name.%str(%'s) weight is &weight.;
361     %mend;
362  %weightmacro(name=Amy);
Amy's weight is 120