Loops 如何在宏SAS中将变量的值传递给函数的参数?
这里a1-a4显示了与变量名_1-_9相对应的列号。我想创建三个变量v1、v2、v3,其中Loops 如何在宏SAS中将变量的值传递给函数的参数?,loops,macros,sas,Loops,Macros,Sas,这里a1-a4显示了与变量名_1-_9相对应的列号。我想创建三个变量v1、v2、v3,其中 ID a1 a2 a3 a4 _1 _2 _3 _4 _5 _6 _7 _8 _9 1 _1 _3 _6 _9 8 5 9 8 6 10 2 1 4 2 _2 _5 _8 _9 10 6 2 7 10 8 3 5 9 3 _1 _2 _4 _8 3 6 1 9 6 9 3 0 4 ... ...
ID a1 a2 a3 a4 _1 _2 _3 _4 _5 _6 _7 _8 _9
1 _1 _3 _6 _9 8 5 9 8 6 10 2 1 4
2 _2 _5 _8 _9 10 6 2 7 10 8 3 5 9
3 _1 _2 _4 _8 3 6 1 9 6 9 3 0 4
... ... ...
例如,对于ID=1,v1=8+5+9=22,v2=9+8+6+10=33。这是我的密码:
For ID=1, v1=sum(of _1-_3), v2=sum(of _3-_6),v3=sum(of _6-_9);
For ID=2, v1=sum(of _2-_5), v2=sum(of _5-_8),v3=sum(of _8-_9);
For ID=3, v1=sum(of _1-_2), v2=sum(of _2-_4),v3=sum(of _4-_8);
.... ...
问题是a&n和a%eval(&n+1)被视为变量名。但我想把它们的值当作变量名。我知道在callexecute中我们可以使用“| | a&n | |”。但宏观方面呢?谢谢大家! 你不能像那样直接访问它;SAS在知道实际值之前需要知道如何编译指令。但是,您可以使用数组执行此操作
%Macro sumup;
data test; set test;
%do n=1 %to 3;
v&n=sum (of a&n-a%eval(&n+1));
%end;
run;
%mend;
%sumup;
有一个输入错误:v[\n]应该是vs[\n]。当我运行代码时,日志中显示一个错误。错误:无效的DO循环控制信息,初始或TO表达式缺失,或者BY表达式缺失、零或无效。这意味着as[n]或as[n+1]不存在或缺失。实际上,这是因为它们是作为字符串输入的。将它们转换为数值后,代码就可以工作了!非常感谢。
data want;
set test;
array nums _1-_9;
array as a1-a4;
array vs v1-v3;
do n=1 to 3;
do i = as[n] to as[n+1];
vs[n] = sum(vs[n],nums[i]);
end;
end;
run;