在SAS的数据步骤中,如何获取列为';以字符串表示的名称?
在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将返回变量的格式化值
name = col1;
name = get_value_of_column(cats("col", i))
但出于某种原因,我想得到一个列的值,其中列由字符串表示。比如说像这样,
name = col1;
name = get_value_of_column(cats("col", i))
这可能吗?如果是这样,如何执行?数据步函数
VVALUE
和VVALUEX
将返回变量的格式化值
static,一个步骤编译时交互VVALUE()
dynamic,解析为变量名的运行时表达式VVALUEX()
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
将返回变量的格式化的值
static,一个步骤编译时交互VVALUE()
dynamic,解析为变量名的运行时表达式VVALUEX()
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总是返回一个字符。