【问题标题】:dynamic variable name in sassas中的动态变量名
【发布时间】:2015-02-11 23:28:43
【问题描述】:

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;

【问题讨论】:

    标签: arrays sas


    【解决方案1】:

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

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

    【讨论】:

    • 这对我来说似乎最简单。我添加了一些解释,所以答案更完整。
    【解决方案2】:

    我认为您的 input 声明中有错字...

    假设它应该是

    输入索引 Var12 Var24 Var36 ;

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

    数据要; 设置有; 数组 vars{*} var: ; var_index = . ; do i = 1 to dim(vars) ; /* 获取 vars{i} 的变量名,只保留数字,与 var_index 比较 */ /* 如果它们匹配,则存储来自 vars{i} 的值 */ if input(compress(vname(vars{i}),,'kd'),8.) = index then var_index = vars{i} ; 结尾 ; 放下我; 跑 ;

    【讨论】:

      【解决方案3】:

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

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

      代码语句:

      num_val = dim(vars);
      

      【讨论】:

      • 这将是一个很好的评论,因为它指出了代码中的错误,但它实际上并没有回答问题 - 问题是如何创建var_index,这不是做。
      猜你喜欢
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多