2009-06-02 5 views

Antwort

3

Verwendung Behalten!

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

Hoffe das macht Sinn!

0

Wenn Sie eine Anweisung wie

VarSummary + 1 ; 

ODER

VarSummary + <expression> ; 

dann brauchen Sie verwenden werden nicht wirklich eine Erklärung erhalten.

Wenn Sie die Anweisung BY in Ihrem DATA STEP verwenden, haben Sie außerdem Zugriff auf die Variablen FIRST und LAST (Die Daten müssen nach der BY-Variablen sortiert sein). FIRST und LAST haben entweder den Wert 1 oder 0. Wenn die Variable BY auf dem ersten Wert FIRST steht. = 1 und wenn es auf dem letzten Wert LETZT ist. = 1. Sie können beide gleich 1 sein, wenn es nur einen byVariable Datensatz gibt, und sie können beide gleich 0 sein, wenn es mehr als 2 byVariable Datensätze gibt (wenn auf den mittleren Datensätzen).

Mit FIRST und LAST können Sie feststellen, wann Sie Ihre RETAINed-Variablen zurücksetzen müssen. (FIRST und LAST befinden sich im PDV, werden aber nicht in den Ausgabedatensatz geschrieben, so dass sie nicht ABGEFALLEN werden müssen).

Beispiel

(Das Ergebnis dieses Beispiels würde wahrscheinlich mit einem PROC getan werden, aber ich hoffe, dass dies zeigt, wie erste und letzte benutzt werden können)

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 ; 
Verwandte Themen