Variable aus Proc means in if then Bedingung einbinden

Hallo Forum,
ich bin noch ein ziemlicher Neuling im Bereich SAS und nutze das Programm wegen meiner Diplomarbeit.
Zur Frage:
Ich möchte Zeilen aus einem Datensatz entfernen, die unter einem bestimmten Grenzwert liegen. Dieser Grenzwert soll der Median sein.
Die Berechnung des Median erfolgt über:

proc SORT
data= Modul30;
by vp_id time_duration;
run;
/*proc print
data = Modul30;
run;*/
/* Mitelwert und Median berechnen*/
proc means
data= Modul30 MEDIAN MEAN MIN MAX MAXDEC=0 ;
Label time_duration='Fixationslaenge';
VAR time_duration;
Class reg_art;
title'Alle Zusammen';
run;

In dieser Prozedur werden für die unterschiedlichen Regionsarte (reg_art) die Median berechnet.
Nun möchte ich eine if- then Anweisung schreiben, die folgermassen aussieht:

data GewichtungModul30;
set Modul_30b;
set Mark30;
if time_duration > 216 & reg_art=1 then do;
Regionsgruppe='Bild' ; end;
if time_duration >212 & reg_art=2 then do;
Regionsgruppe='Überschrift' ; end;
if time_duration >224 & reg_art=3 then do;
Regionsgruppe='Text' ; end;
if time_duration >216 & reg_art=4 then do;
Regionsgruppe='Navigationselement' ; end;
if time_duration >208 & reg_art=5 then do;
Regionsgruppe='Markierung' ; end;
if reg_art=6 then do;
Regionsgruppe='Ohne' ; end;
if url_code=1 | url_code=2 | url_code=3 | url_code=4 | url_code=5 then do;
Regionsgruppe='Kauf' ; end;
run;

Die manuelle Eingabe der Mediane als unterer Grenze funktioniert einwandfrei.Nun möchte ich aber, dass das Programm automatisch abläuft. Aus diesem Grund möchte ich die Ergebnisser der proc means (median) anstatt der 216, 212, ...,208 einsetzen.
Hat einer eine Idee wie das funktioniert?
Danke schonmal im vorraus.

So funktioniert es

Hallo,

du kannst dir die Mediane von PROC MEANS in ein Dataset schreiben lassen. Schau dir dazu das OUTPUT-Statement von PROC MEANS an. Anschließend kannst du diesen Dataset mit dem ursprünglichen so zusammenmischen, dass die Mediane klassenspezifisch als Konstanten den Beobachtungen zugeordnet werden.

Für das folgende Beispiel habe ich fiktive Daten verwendet und dein Programm vereinfacht.

data modul30;
input vp_id reg_art time_duration;
cards;
01 1 200
02 1 250
03 1 300
04 2 250
05 2 300
06 2 350
07 3 300
08 3 350
09 3 400
;

proc means
data = modul30 MEDIAN MEAN MIN MAX MAXDEC=0 ;
var time_duration;
class reg_art;
output out = modul30_mediane median = class_mediane;
run;

                                       The MEANS Procedure

                                Analysis Variable : time_duration

                         N
            reg_art    Obs          Median            Mean         Minimum         Maximum
       -----------------------------------------------------------------------------------
                  1      3             250             250             200             300

                  2      3             300             300             250             350

                  3      3             350             350             300             400
       -----------------------------------------------------------------------------------       
proc print data = modul30_mediane; run;
                                                                 class_
                          Obs    reg_art    _TYPE_    _FREQ_    mediane

                           1        .          0         9        300
                           2        1          1         3        250
                           3        2          1         3        300
                           4        3          1         3        350

data modul30;
merge modul30 modul30_mediane;
by reg_art;
if vp_id = . then delete; /* entsteht beim merge, weil proc means auch den Gesamtmedian für alle */
/* Beobachtungen ausgibt, der keiner einzelnen Beobachtung zugeordnet werden kann */
drop _TYPE_ _FREQ_; /* überflüssig (aus modul30_mediane) */
if time_duration > class_mediane & reg_art = 1 then Regionsgruppe = 'Bild' ;
else if time_duration > class_mediane & reg_art = 2 then Regionsgruppe = 'Überschrift' ;
else if time_duration > class_mediane & reg_art = 3 then Regionsgruppe = 'Text' ;
run;

proc print data = modul30 noobs; run;

                                           time_      class_
                     vp_id    reg_art    duration    mediane    Regionsgruppe

                       1         1          200        250
                       2         1          250        250
                       3         1          300        250          Bild
                       4         2          250        300
                       5         2          300        300
                       6         2          350        300          Über
                       7         3          300        350
                       8         3          350        350
                       9         3          400        350          Text

Statt der Wertezuweisung zu Regionsgruppe könnte natürlich ein delete stehen, um die Fälle über dem Median rauszuwerfen.