条件が満たされるまで各行の観測値を自動的に追加するサマリー変数を 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. byVariable レコードが 1 つしかない場合は両方とも 1 になり、byVariable レコードが 2 つを超える場合 (中央のレコードの場合) は両方とも 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 ;