我有 600,000 多个观察数据,我想按其邮政编码进行采样(数据中邮政编码的数量与其人口密度成正比)。数据中的关键变量是ZIP CODE、ID和GROUP。
我需要修复我现有的 SAS 代码,以便当 SAS 选择 ZIP CODE 时,它会选择其GROUP中的所有记录。例如,如果选择了ID=2,我也需要ID=1和ID=3。因此,我在GROUP=1中拥有所有邮政编码。
ID GROUP ZIP
1 1 46227
2 1 46227
3 1 46227
4 2 47620
5 3 47433
6 3 47433
7 3 47433
8 4 46135
9 4 46135
10 5 46202
11 5 46202
12 5 46202
13 5 46202
14 6 46793
15 6 46793
16 7 46202
17 7 46202
18 7 46202
19 8 46409
20 8 46409
21 9 46030
22 9 46030
23 9 46030
24 10 46383
25 10 46383
26 10 46383
我有以下 SAS 代码,它将从数据中采样 1000 个 obs,但是它只是随机选择邮政编码而不考虑GROUP变量。
proc freq data=sample;
tables zip / out=outfreq noprint;
run;
data newfreq error; set outfreq;
sampnum=(percent*1000)/100;
_NSIZE_=round(sampnum, 1);
sampnum=round(sampnum, .01);
if _NSIZE_=0 then output error;
if _NSIZE_=0 then delete;
output newfreq;
run;
data newfreq2; set newfreq error;
by zip;
keep zip _NSIZE_;
run;
proc sort data=newfreq2;
by zip;
run;
proc sort data=sample;
by zip;
run;
/* proportional stratified sampling */
proc surveyselect data=sample seed=2020 out=sampout sampsize=newfreq2;
strata zip;
id id zip;
run;
我希望我能清楚地解释我的问题。如果没有,我将尝试澄清和/或详细说明不清楚的事情。
提前致谢。