我在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
的名称。
答案 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变量通常不能以数字开头。