Ziehung aus einer Grundgesamtheit (PROC SURVEYSELECT)

Hallo,

ich habe mich vor 2 Wochen in SAS eingearbeitet, um damit eine geschichtete Stichprobenziehung zu machen.
Die Datei "Grundgesamtheit" enthält die Grundgesamtheit aller Beobachtungen ;-) Die Länge der Datei "Stichprobengrößen" entspricht der Anzahl an Schichten: Sie sagt mir also wieviele Werte in den einzelnen Schichten gezogen werden. Die Stichproben sollen zufällig ohne Zurücklegen erfolgen. Dazu habe ich den folgenden Code eingegeben:

proc surveyselect
    
data=Grundgesamtheit
    out=Stichprobe
        method=srs
        sampsize=Stichprobengrößen;
    
strata Land Bundesland Landkreis;
    
ID _ALL_;
 
run;

Soweit funktioniert alles. Nun aber möchte ich nicht ZUFÄLLIG in den einzelnen Schichten ziehen, sondern immer der Reihe nach. Sagen wir, eine Schicht hat in der Grundgesamtheit 100 Beobachtungen und die Datei "Stichprobengrößen" enthält an der entsprechenden Stelle die Zahl 10. Obiger Code zieht mir zufällig 10 aus den 100. Nun aber sollen mir die ersten 10 Beobachtungen der 100 gezogen werden.

Ich finde in den Anleitungen nicht den entsprechenden Befehl. Kann mir jemand helfen?

Danke
Tobias

DATA step

Hallo Tobias,
mir scheint das Ihr Problem besser in einem Data-Step gelöst werden kann. etwa so:
PROC SORT DAtA=... out =_SORT;
by SCHICHTID;
run;
data sort1;
set _sort ;
by schichtid;
if first.schichtid then anz=0;
anz+1;
/*hier kommt es dann noch darauf an ob sich die fixen Zaheln pro schicht unterscheiden also evtl. ein wenig mehr Aufwand.
if schichtid=1 and anz

Danke erst mal für die

Danke erst mal für die schnelle Antwort.

Ich habe mir schon fast gedacht, dass dies mit SURVEYSELECT nicht gehen wird. Aber den Vorschlag verstehe ich mehr oder weniger (die Angabe "first." sorgt für eine Nummerierung innerhalb der Schichten). Jedoch habe ich keine Schichtid, sondern lediglich Schichtvariablen mit den Ausprägungen 0 und 1. Das ist ja der Vorteil bei SURVEYSELECT, dass ich lediglich die drei Schichtungsmerkmale angeben muss (STRATA Bunesland Region Landkreis). Der Aufwand für eine Vergabe von einer Schichtid wäre groß. Es handelt sich um 15 Datensätze mit jeweils ca. 90 Schichten. Allerdings ändert sich die Schichtzahl auch. Und vor allem sind die Ziehungen aus den Schichten nicht immer gleich.

Aber nochmals zu deinem Vorschlag: Angenommen ich hätte eine Schichtid, wie würde das bei folgendem Datensatz funktionieren?

/* Beispieldatensatz */
data basis;
   
input sid eink;
   
label
      
sid = "Schicht-ID"
      
eink = "Einkommen"
   
;
datalines;
1 1000
1 2000
1 3000
2 500
3 1000
3 1500
3 1750
3 2250
4 800
4 1000
4 1100
;

Ich habe hier 4 Schichten: 1, 2, 3 und 4. Aus der ersten möcht ich 2 Ziehungen, aus der zweiten Schicht 1 Ziehung, aus der dritten Schicht 3 Ziehungen und aus der vierten Schicht 2 Ziehungen. Und das immer der Reihe nach, also nicht zufällig.

Müsste das ganze so aussehen?:

PROC SORT DAtA=basis out =_SORT;
by sid;
run;

data sort1;
set _sort ;
by sid;
if first.sid then anz=0;
anz+
1;
run;

data sort2;
set sort1 ;
if (sid=1 and anz<=2)
or (sid=
2 and anz<=1)
or (sid=
3 and anz<=3)
or (sid=
4 and anz<=2);
run;

Da wäre der Aufwand halt enorm groß, so groß, dass ich lieber in Excel hergehen könnte, und die Ziehungen manuell vornehme. Das liegt dann halt an den unterschiedlichen Stichprobengrößen.

War dein Vorschlag so zu verstehen?
Danke.

Hallo, ich kenne die PROC

Hallo,

ich kenne die PROC SURVEY... nicht, vielleicht kann ihr Problem also damit gelöst werden.
Sie haben meinen Lösungsvorschlag richtig verstanden, die if Abfrage könnte bei häufigem Gebrauch des Programmes über ein Makro parametrisiert und über die andere Tabelle gesteuert werden.

*

*