Jacek Gawrylczyk

Jacek Gawrylczyk Ekspert ds nadużyć
telekomunikacyjnych

Temat: 100 losowych obserwacji z każdej z grup

z np 2 tys obserwacji chciałbym wylosować po 100 obserwacji z każdej z grup. Grup jest 20 a w każdej z nich różna wartość obserwacji tzn:
grupa A - 1200 obserwacji
grupa B - 56 obserwacji
grupa C - 33
grupa D -245
itd w sumie 2 tyś..
Da się to zrobić jednym kodem?
Bez powtórzeń jeśli obserwacji w danej grupie jest mniej niż 100

pozdrawiam

konto usunięte

Temat: 100 losowych obserwacji z każdej z grup

1) Nie do końca rozumiem, z każdej po 100 obserwacji a w grupie B i C masz mniej.
2) A dlaczego jednym a nie dwoma? Z czego wynika to założenie?
3) To musi być kod w 4gl czy może być proc surveyselect?
Jacek Gawrylczyk

Jacek Gawrylczyk Ekspert ds nadużyć
telekomunikacyjnych

Temat: 100 losowych obserwacji z każdej z grup

ad1. dla grupy A - 100 obs, dla B - 56, C- 33, D - 100 itd
ad2. mogą być dwa:)
ad3. nie musi być w 4gl, najważniejsze aby zadziałało

konto usunięte

Temat: 100 losowych obserwacji z każdej z grup

1) Generuję sobie przykładowe dane.
data DANE(DROP=I);
do i=1 to 250;
grupa='D';
wynik=ranuni(0); output;
end;
do i=1 to 150;
grupa='B';
wynik=ranuni(0); output;
end;
do i=1 to 46;
grupa='C';
wynik=ranuni(0); output;
end;
do i=1 to 446;
grupa='A';
wynik=ranuni(0); output;
end;
RUN;

2) Dodaję losową wartość.
DATA DANE;
SET DANE;
ID=ranuni(0);
RUN;

3) Sortuję po niej w grupach.
PROC SORT DATA=DANE;
BY GRUPA ID;
RUN;

4) Wybieram po 100 obserwacji.
DATA WYNIK;
SET DANE;
BY GRUPA;
RETAIN MIEJSCE;
IF FIRST.GRUPA THEN MIEJSCE=1;
ELSE MIEJSCE=SUM(MIEJSCE,1);
IF MIEJSCE<=100 THEN OUTPUT;
KEEP GRUPA WYNIK;;
RUN;

Czyli 3 kroki.
Jacek Gawrylczyk

Jacek Gawrylczyk Ekspert ds nadużyć
telekomunikacyjnych

Temat: 100 losowych obserwacji z każdej z grup

myślałem że jest jakaś funkcja, której nie znam a tu trzeba było wykazać się sprytem :) najważniejsze że działa!
dzięki piękne!

konto usunięte

Temat: 100 losowych obserwacji z każdej z grup

Jest prostsza, proc surveyselect :)
Tylko widzę że jeśli jest mniej niż 100 to sypie błędami (w procedurze: n=tyle ile chcesz obserwacji w danej grupie).
Ale wtedy podziel może zbiór na te które mają ponad 100, a te mniej liczne po prostu miej w drugim zbiorze i zastosuj do łączenia wyników proc append.

proc surveyselect data=DANE
method=srs n=46 out=DANE2;
STRATA grupa;
run;



Wyślij zaproszenie do