[英]SAS Macro Code Variable Creation
我想在数据集中创建多个标志(以及许多派生的数字特征),但是我正努力使代码正常工作。
我正在使用带条件的迭代循环。 对决议的任何帮助或建议,将不胜感激。
这是我尝试的代码,它创建一个标志,但这不是我的新数据集中的变量。
%macro gb1(howmany);
%do i=1 %to &howmany;
%if status&i = 1 %then %let &gb1_&i = 1;
%else %if status&i = 2 %then %let &gb1_&i = 1;
%else %if dpd&i >= 2 %then %let &gb1_&i = 1;
%else %if ((dpd&i < 2) and (dpd&i >= 1)) %then %let &gb1_&i = 2;
%else %let &gb1_&i = 1;
%end;
%mend gb1;
data test;
set y2014.perf_data_derive (where=((dpd15 <= 2) and (prod = 1)));;
%gb1(36);
run;
感谢您能提供的任何帮助。
%if
, %then
和%else
等是宏语句,用于评估带有宏变量的表达式,以便有条件地提交SAS代码。 似乎您没有尝试执行任何操作; 您只想重复涉及数据集中变量(而不是宏变量)的数据步骤语句。 为此,请像在数据步骤中一样使用语句:
%macro gb1(howmany);
%do i=1 %to &howmany;
if status&i = 1 then gb1_&i = 1;
else if status&i = 2 then gb1_&i = 1;
else if dpd&i >= 2 then gb1_&i = 1;
else if ((dpd&i < 2) and (dpd&i >= 1)) then gb1_&i = 2;
else let gb1_&i = 1;
%end;
%mend gb1;
我认为您对宏语言感到困惑。 它(通常)用于生成SAS代码。 基本上,它使您无需输入。 它对DATA步骤变量不做任何事情。 DATA步骤代码可让您操作数据步骤变量,宏语言处理宏变量。
您的输入数据集perf_data_derive是否具有status1 status2 ... status36和dpd1 dpd2 ... dpd36之类的变量? 您正在尝试创建新的变量gb1_1 gb1_2 ... gb1_36吗? 如果是这样,您应该研究如何使用数组。 ARRAY语句是DATA步骤语句,可用于引用数据步骤变量。 您可以将其编码为(未试用):
data test;
set y2014.perf_data_derive (where=((dpd15 <= 2) and (prod = 1)));
array status{36} ; *array elements status1-status36;
array dpd{36} ;
array gb1_{36} ; *array statement can create new variables! ;
do i=1 to 36;
if status{i}=1 then gb1_{i} = 1;
else if status{i}=2 then gb1_{i} = 1;
else if dpd{i} >=2 then gb1_{i} = 1;
*etc;
end;
drop i;
run;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.