基于数据步变量检索列

时间:2014-02-18 18:49:11

标签: sas

我正在写一份SAS工作。对于这个SAS工作,我需要执行以下操作 -

  1. 检索字段“ActiveColumn”的值。该值将是表中另一列的名称。
  2. 将ActiveValue设置为等于ActiveColumn命名的字段的值。
  3. 基本上,我正在尝试编写一个版本,我不会预先写出每个列名的一半 -

    Select(ActiveColumn);
      when ('CITY') ActiveValue = City;
      when ('STATE') ActiveValue = State;
      when ('ZIP') ActiveValue = Zip;
    otherwise;
    

    最简单的方法是什么?

    非常感谢!

1 个答案:

答案 0 :(得分:3)

这听起来像是一个垂直移调。如果所有字段都是字符,那就可以这样做:

data want;
set have;
array fields city state zip;
do _t = 1 to dim(fields);
  if lowcase(activeColumn)=vname(fields[_t]) then activeValue=fields[_t];
  *may want an OUTPUT here.;
end;
run;

如果它们是混合类型,则需要两个数组和循环。如果您打算只是遍历所有字段,则可能不需要ActiveColumn;你可以在循环中将ActiveColumn设置为vname(fields [_t])。

如果您打算让它更灵活,可以使用array fields _character_; 它将使用所有字符变量(因此意味着您不必明确指定它们)。