Sas如何处理名称由两部分组成的列,第一个是相同的,但第二个不同

时间:2018-06-13 12:33:43

标签: sas

我在SAS中有一些名称以100_Section_xxx开头的列。因此,名称的第一部分是相同的,而第二部分(xxx)是不同的。 我想为每个列编写条件,例如If 100_Section_xxx >1 then do error_100_Section_xxx ="yes"我如何编写它,以便Sas采用名称100_Section_xxx的第二部分并将xxx添加到第二部分列error_100_Section_xxx的名称。

1 个答案:

答案 0 :(得分:1)

您可以使用带有数组的简单宏和数据步骤来执行此操作:

此宏循环遍历名称列表(XXX值)并列出以其结尾的变量。

%macro var_names(names, prefix=);
%local i n var;
%let n=%sysfunc(countw(&names));
%do i=1 to &n;
   %let var=%scan(&names,&i);
   &prefix.&var
%end;
%mend;

现在使用它,数据步骤和2个数组。

data have;
_100_Section_a = 1;
_100_Section_b = 0;
_100_Section_c = 10;
run;

data want;
set have;
array vars[*] %var_names(a b c, prefix=_100_Section_);

format %var_names(a b c, prefix=error_100_Section_) $8.;
array errors[*] %var_names(a b c, prefix=error_100_Section_);

do i=1 to dim(vars);
   if vars[i] > 1 then
      errors[i] = "yes";
end;

drop i;
run;

注意,我在变量名称中添加了_。 SAS变量通常不能以数字开头。