我有一些宏变量,每个宏变量都分配有一个值。如何从变量的值中获取变量的名称? 例如,我为每个人分配了一个年龄值。 &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”?
谢谢
答案 0 :(得分:0)
这将使您参与其中。请注意,撇号存在一些问题,您需要对此进行转义或引用。我暂时忽略了这一点。对于您的其余问题:
使用%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