我正在寻找一种在 SAS 中创建汇总变量的方法,该变量将自动添加每一行观察,直到满足条件。如有必要,我需要能够启动和停止并重置此变量。
非常感谢。
使用保留!
data test;
set test;
retain VarSummary;
VarSummary+YourVar;
if condition then VarSummary=SummatElse;
run;
希望这是有道理的!
如果您要使用类似的语句
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 ;