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. 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 ;
于 2009-06-04T15:39:33.253 に答える