sas中的动态变量名
dynamic variable name in sas
与this类似的问题,我的情况有点不同,变量名称是 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;
由于您有 3 个名称以 var 开头的变量,因此将创建 3 个数值变量的数组,因此索引值应介于 1 到 3 之间。
任何大于 3 的值都会给出超出范围的错误。您可以使用 dim 函数找出声明的数组中的元素数。
代码语句:
num_val = dim(vars);
我认为您的 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 ;
改为查看 vvaluex
函数。它允许您指定一个定义变量的字符串,而 vvalue
需要一个变量名(不是字符串)。
Var_index=vvaluex('var'||put(index, 2. -l));
与this类似的问题,我的情况有点不同,变量名称是 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;
由于您有 3 个名称以 var 开头的变量,因此将创建 3 个数值变量的数组,因此索引值应介于 1 到 3 之间。
任何大于 3 的值都会给出超出范围的错误。您可以使用 dim 函数找出声明的数组中的元素数。
代码语句:
num_val = dim(vars);
我认为您的 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 ;
改为查看 vvaluex
函数。它允许您指定一个定义变量的字符串,而 vvalue
需要一个变量名(不是字符串)。
Var_index=vvaluex('var'||put(index, 2. -l));