SAS:未使用呼叫症状解决的表观符号引用

时间:2016-12-07 10:59:13

标签: macros sas

我有一个数据集如下:

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;

2 个答案:

答案 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;代码块将值加载到数组或哈希对象中,您也可以提高效率。