1

我正在寻找一种在 SAS 中创建汇总变量的方法,该变量将自动添加每一行观察,直到满足条件。如有必要,我需要能够启动和停止并重置此变量。

非常感谢。

4

2 回答 2

3

使用保留!

data test;
set test;
retain VarSummary;
VarSummary+YourVar;
if condition then VarSummary=SummatElse;
run;

希望这是有道理的!

于 2009-06-02T20:51:49.840 回答
0

如果您要使用类似的语句

VarSummary + 1  ; 

或者

VarSummary + <expression> ;

那么您实际上不需要 RETAIN 语句。

此外,如果您在 DATA STEP 中使用 BY 语句,您可以访问变量 FIRST 和 LAST(数据必须按 BY 变量排序)。FIRST 和 LAST 的值为 1 或 0。当 BY 变量位于第一个值 FIRST 时。= 1 并且当它位于最后一个值 LAST 时。= 1。当只有1个byVariable记录时它们都可以等于1,当有2个以上的byVariable记录时它们都可以等于0(当在中间记录时)。

FIRST 和 LAST 可以帮助确定何时重置 RETAINed 变量。(FIRST 和 LAST 将在 PDV 中,但不会写入输出数据集,因此无需 DROP 删除它们)。

例子

(这个例子的结果可能会用一个 PROC 来完成,但我希望这能说明如何使用 FIRST 和 LAST)

proc sort data=sasuser.laguardia out=work.dest;
 by dest ;
run ;

data work.destination_summary (keep=dest dest_count total_count) ;
 set work.dest ;
 by dest ;

 total_count + 1 ;

 if first.dest then dest_count = 1 ;
 if not first.dest and not last.dest then dest_count + 1 ;
 if last.dest then do ;
  dest_count + 1 ;
  output ;
 end ;
run ;

proc print data=work.destination_summary label noobs ;
 var dest dest_count total_count;
 label Dest="Destination"
   dest_count="Count" 
   total_count= "Total Count";
run ;
于 2009-06-04T15:39:33.253 回答