sas中的动态变量名



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

它给出数组下标超出范围的错误。

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;

改为查看vvaluex函数。它允许您指定定义变量的字符串,而vvalue采用变量名(而不是字符串)。

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

我认为您的input语句中有一个拼写错误。。。

假设它应该是

输入索引Var12 Var24 Var36;

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

数据匮乏;set have;数组vars{*}var:;var_index=;do i=1至dim(vars);/*获取vars{i}的变量名,只保留数字,与var_index进行比较*//*如果匹配,则存储vars{i}中的值*/如果input(compress(vname(vars{i}),,'kd'),8.)=索引,则var_index=vars{i};终止滴i;跑

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

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

代码声明:

num_val = dim(vars);

最新更新