繁体   English   中英

SAS宏代码变量创建

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM