Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
Loops 如何在宏SAS中将变量的值传递给函数的参数?_Loops_Macros_Sas - Fatal编程技术网

Loops 如何在宏SAS中将变量的值传递给函数的参数?

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 ... ...

这里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=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;