2
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,其中

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

例如,对于 ID=1,v1=8+5+9=22,v2=9+8+6+10=33。
这是我的代码:

%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;

问题是 a&n 和 a%eval(&n+1) 被视为变量名。但我想将它们的值视为变量名。我知道在调用执行中我们可以使用'||a&n||'。但是在宏中呢?谢谢!

4

1 回答 1

2

你不能像那样直接访问它;SAS 需要知道如何编译指令,然后才能知道实际值是什么。但是,您可以使用数组执行此操作。

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;
于 2013-09-27T18:57:12.997 回答