在SAS

时间:2018-03-18 22:46:32

标签: arrays loops variables sas

我正在尝试创建46个变量,从0-45索引,依赖于3个其他变量,每个变量都从0-45索引。看起来阵列方法似乎是最直接的,但我不能让它工作。所以我有变量a_0,...,a_45,b_0,...,b_45,c_0,...,c_45,我想创建d_i = a_i + b_i + c_i,但我有一些困难。 尝试:

data test;
    set test;
    array d [0:45]; 
    array a [0:45] a_0-a_45;
    array b [0:45] b_0-b_45;
    array c [0:45] c_0-c_45;

    do i=0 to 45;
        d[i]=a[i]+b[i]+c[i];
    end;
run;

1)我似乎无法从0获得指数。

2)每当我运行检查时,变量都不会以预期的方式累加。

2 个答案:

答案 0 :(得分:0)

尝试更改数组d定义。

    array d [0:45];

 array d [0:45] d0-d45;

在数组d [0:45]的情况下,它创建d1到d46,而在数组d [0:45] d_0-d_45的情况下,你明确地从0到45索引。

答案 1 :(得分:0)

如果您不告诉SAS使用哪个变量名称,它只会使用数组名称创建名称并添加数字后缀。所以当你写了

array d [0:45]; 

你告诉它要创建46个名为d1d46的变量。

你可以告诉它使用什么名字。

array d [0:45] d_0 - d_45 ;

同样在你发布的代码中,你的索引变量的值是否与变量名的数字后缀相匹配并不重要。那么为什么不让它变得更简单呢。

array a a_0-a_45;
array b b_0-b_45;
array c c_0-c_45;
array d d_0-d_45; 
do i=1 to dim(a);
  d(i)=a(i)+b(i)+c(i);
end;

您也可以将您的变量编号从1而不是零开始编号并节省很多麻烦。