sas中等效于+ = / * =运算符

时间:2017-04-09 17:56:42

标签: sas

SAS是否具有与C ++语言相同的+ =或* =表达式?

例如我有一个变量列表X1-X10,我想用以下形式定义一个变量Final:

%let name= X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
%Macro Total;
%Do i=1 %to %sysfunc(countw(&name., " "));
     %Let K= %sysfunc(scan(&name., %i., " "));
      Final *= K;
%End;
%Mend;

1 个答案:

答案 0 :(得分:0)

不确定为什么要尝试使用宏代码。如果要操纵数据,请使用数据步骤。

有一个总结声明。

var + (expression) ;

例如,如果我想计算变量的累积和,我可以这样做:

data want;
  set have ;
  cum_X + X;
run;

但是没有类似的声明来做聚合产品。如果你想使用乘法做类似的事情,则需要拼出RETAIN语句并使用正常的赋值语句。

data want;
  set have ;
  retain prod_x 1 ;
  prod_x = prod_x * x;
run;

如果你实际上只有一个带有变量名列表的宏变量,并且你只能在一次观察时严格操作,那么你可以使用文本操作将列表转换成你想要的计算。

%let namelist = vara varb vard varx vary varz ;
data want ;
   set have ;
   sum = %sysfunc(tranwrd(&namelist,%str( ),+)) ;
   product = %sysfunc(tranwrd(&namelist,%str( ),*)) ;
run;

如果你想要更多的控制,那么定义一个数组并循环它。以下是使用DO OVER语法的示例。 (SAS正试图摆脱DO OVER,所以你也可以使用索引变量并在数组引用中输入更多字符来做同样的事情。)

 data want;
   set have ;
   array x &namelist ;
   sum=0;
   product=1;
   do over x ;
     if not missing(x) then do ;
       sum= sum+x ;
       product = product*x ;
     end;
   end;
 run;