我正在写一份SAS工作。对于这个SAS工作,我需要执行以下操作 -
基本上,我正在尝试编写一个版本,我不会预先写出每个列名的一半 -
Select(ActiveColumn);
when ('CITY') ActiveValue = City;
when ('STATE') ActiveValue = State;
when ('ZIP') ActiveValue = Zip;
otherwise;
最简单的方法是什么?
非常感谢!
答案 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_;
它将使用所有字符变量(因此意味着您不必明确指定它们)。