Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SAS的数据步骤中,如何获取列为';以字符串表示的名称?_Sas - Fatal编程技术网

在SAS的数据步骤中,如何获取列为';以字符串表示的名称?

在SAS的数据步骤中,如何获取列为';以字符串表示的名称?,sas,Sas,在SAS的数据步骤中,您可以直接使用列的名称来获取列的值,例如 name = col1; name = get_value_of_column(cats("col", i)) 但出于某种原因,我想得到一个列的值,其中列由字符串表示。比如说像这样, name = col1; name = get_value_of_column(cats("col", i)) 这可能吗?如果是这样,如何执行?数据步函数VVALUE和VVALUEX将返回变量的格式化值

在SAS的数据步骤中,您可以直接使用列的名称来获取列的值,例如

name = col1;
name = get_value_of_column(cats("col", i))
但出于某种原因,我想得到一个列的值,其中列由字符串表示。比如说像这样,

name = col1;
name = get_value_of_column(cats("col", i))

这可能吗?如果是这样,如何执行?

数据步函数
VVALUE
VVALUEX
将返回变量的格式化值

  • VVALUE()
    static,一个步骤编译时交互
  • VVALUEX()
    dynamic,解析为变量名的运行时表达式
变量的实际值可以通过_type_uu数组扫描动态获得

阵列扫描

data have;
input name $ x y z (s t u) ($) date: yymmdd10.;
format s t u $upcase. date yymmdd10.;
datalines;
x 1 2 3 a b c          2020-10-01
y 2 3 4 b c d          2020-10-02
z 3 4 5 c d e          2020-10-03
s 4 5 6 hi ho silver   2020-10-04
t 5 6 7 aa bb cc       2020-10-05
u 6 7 8 -- ** !!       2020-10-06
date 7 8 9 ppp qqq rrr 2020-10-07
;

data want;
  set have;

  length u_vvalue name_vvaluex $20.;

  u_vvalue = vvalue(u);
  name_vvaluex = vvaluex(name);

  array nums _numeric_;
  array chars _character_;

  /* NOTE:
   * variable based arrays cause automatic variable _i_ to be in the PDV
   * and _i_ will be automatically dropped from output data sets
   */
  do _i_ = 1 to dim(nums);
    if upcase(name) = upcase(vname(nums(_i_))) then do;
      name_numeric_raw = nums(_i_);
      leave;
    end;
  end;
  do _i_ = 1 to dim(chars);
    if upcase(name) = upcase(vname(chars(_i_))) then do;
      name_character_raw = chars(_i_);
      leave;
    end;
  end;
run;

如果在数据步骤中执行“过多”的动态值查找,则换位可能会导致更简单的处理。

数据步骤函数
VVALUE
VVALUEX
将返回变量的格式化的

  • VVALUE()
    static,一个步骤编译时交互
  • VVALUEX()
    dynamic,解析为变量名的运行时表达式
变量的实际值可以通过_type_uu数组扫描动态获得

阵列扫描

data have;
input name $ x y z (s t u) ($) date: yymmdd10.;
format s t u $upcase. date yymmdd10.;
datalines;
x 1 2 3 a b c          2020-10-01
y 2 3 4 b c d          2020-10-02
z 3 4 5 c d e          2020-10-03
s 4 5 6 hi ho silver   2020-10-04
t 5 6 7 aa bb cc       2020-10-05
u 6 7 8 -- ** !!       2020-10-06
date 7 8 9 ppp qqq rrr 2020-10-07
;

data want;
  set have;

  length u_vvalue name_vvaluex $20.;

  u_vvalue = vvalue(u);
  name_vvaluex = vvaluex(name);

  array nums _numeric_;
  array chars _character_;

  /* NOTE:
   * variable based arrays cause automatic variable _i_ to be in the PDV
   * and _i_ will be automatically dropped from output data sets
   */
  do _i_ = 1 to dim(nums);
    if upcase(name) = upcase(vname(nums(_i_))) then do;
      name_numeric_raw = nums(_i_);
      leave;
    end;
  end;
  do _i_ = 1 to dim(chars);
    if upcase(name) = upcase(vname(chars(_i_))) then do;
      name_character_raw = chars(_i_);
      leave;
    end;
  end;
run;

如果在数据步骤中执行“过多”的动态值查找,则换位可能会导致更简单的处理。

作业问题?哈哈,不,这是因为我有一些列的名称像Col1,Col2,并希望通过索引获取它们的值。数组或使用VVALUEX可以让你达到目的。是的,VVALUEX成功了。数组不适用,因为这些列已经存在,并且是由进程自动生成的。数组可以正常工作-变量是否存在并不重要。另外一个好处是数组将返回相同的变量类型,VVALUEX总是返回一个字符。家庭作业问题?哈哈,不,这是因为我有一些列的名称像Col1,Col2,并希望通过索引获取它们的值。数组或使用VVALUEX可以让你达到目的。是的,VVALUEX成功了。数组不适用,因为这些列已经存在,并且是由进程自动生成的。数组可以正常工作-变量是否存在并不重要。另外一个好处是数组将返回相同的变量类型,VVALUEX总是返回一个字符。