我有一个数据集如下:
age
我有另外一个包含6个变量的数据集,比如说
A1 - A6
我想将上述值乘以A1-A6
类似B * A的A * *值的A1 *值
所以我创造了这种方式
ID Value
A 77
B 60
C 20
D 40
E 60
F 100
运行;
和
data _null_ ;
set have;
call symputx('value' || trim(left(_n_)),value);
call symputx('rows', _n_);
然而,当我运行它时,它说
data want;
set have;
array XX(*) A1 - A6;
do i=1 to &rows;
XX(i)=mgpc(i)* &&value&i ;
end;
run;
答案 0 :(得分:1)
试试这个:
data want;
set have;
array XX(*) A1 - A6;
do i=1 to &rows;
value=symget(cats('value',i));
XX(i)=mgpc(i)* value;
end;
run;
答案 1 :(得分:1)
如果要引用数据集变量,为什么要使用宏变量?
所以你有一个数据集,让我们用变量VALUE称它为REFERENCE_TABLE,你想要通过该参考数据集中的第I个记录在当前数据集中加倍一些数字。在SET语句中使用POINT =选项。
假设您有一个数据集MYDATE,其中包含一个以字母X开头的变量数组,并且您希望找到X(i)* REFERENCE_VALUE(i)的总和。
data want ;
set mydata ;
array x x: ;
total=0
do i=1 to min(dim(x),nobs);
set reference_table point=i nobs=nobs ;
total = sum(total,x(i)*value);
end;
run;
通过使用IF _N_= THEN DO;
代码块将值加载到数组或哈希对象中,您也可以提高效率。