sas中的动态变量名

时间:2015-02-11 10:29:48

标签: arrays sas

this有类似的问题,我的情况有点不同,变量名是Var12,Var 24,Var36而不是Var1 Var2和Var3。

它使Array Subscript超出范围错误。

data have;
input Index Var12 Var2 Var3;
cards;
12      78.3   54.7  79.8
36      67.2   56.2  12.3
24      65.3   45.2  98.1
12      56.2   49.7  11.3
12      67.2   98.2  98.6
;
run;

data want;
set have;
array vars(*) var: ;
var_index=vars(Index);
run;

3 个答案:

答案 0 :(得分:4)

转而考虑vvaluex功能。它允许您指定定义变量的字符串,而不是vvalue,它采用变量名称(不是字符串)。

Var_index=vvaluex('var'||put(index, 2. -l));

答案 1 :(得分:1)

我认为你的input陈述中有一个拼写错误......

假设它应该是

input Index Var12 Var24 Var36 ;

如果输入var字段具有任何数字后缀且按任何顺序,则此代码有效:

data want ;
  set have ;
  array vars{*} var: ;
  var_index = . ;
  do i = 1 to dim(vars) ;
    /* Get variable name of vars{i}, keep only digits, compare to var_index */
    /* If they match, store the value from vars{i} */
    if input(compress(vname(vars{i}),,'kd'),8.) = index then var_index = vars{i} ;
  end ;

  drop i ;
run ;

答案 2 :(得分:0)

由于您有3个名称以var开头的变量,因此将创建3个数字变量的数组,因此索引值应介于1到3之间。

任何高于3的值都会超出范围错误。您可以使用dim函数找出声明的数组中的元素数。

代码声明:

num_val = dim(vars);