Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SAS访问宏变量名_Sas - Fatal编程技术网

SAS访问宏变量名

SAS访问宏变量名,sas,Sas,我有一些宏变量,每个都有一个值。如何从变量的值中获取变量的名称? 例如,我为每个人指定了一个年龄值&艾米12岁,彼得10岁。 我还有一个宏函数计算其他东西,比如重量 %macro weight(name=); %let weight=&name*10; %put &name.'s weight is &weight.; %mend; 如果我运行%weightname=Amy,我希望得到结果,因为Amy的体重是120。 我怎样才能得到艾米而不是

我有一些宏变量,每个都有一个值。如何从变量的值中获取变量的名称? 例如,我为每个人指定了一个年龄值&艾米12岁,彼得10岁。 我还有一个宏函数计算其他东西,比如重量

%macro weight(name=);
       %let weight=&name*10;
       %put &name.'s weight is &weight.;
%mend;
如果我运行%weightname=Amy,我希望得到结果,因为Amy的体重是120。 我怎样才能得到艾米而不是12岁的成绩


谢谢

这将为您提供部分帮助。请注意,撇号有点问题,您需要避开它或引用它。我暂时忽略了这一点。关于你剩下的问题:

添加更多&解析嵌套的宏变量 使用%SYSEVALF对宏变量进行计算

%let Amy = 12;

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

%weight(name=Amy);

好邪恶!艾米书中的那句话把事情搞得一团糟。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);

如果点是可以用%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

请展示您已经创建了宏变量等的其他工作。通常,要解决这些问题,需要在宏变量前面添加更多。