楼主: hi11
1937 4

[有偿编程] sas如何进行分层抽样 [推广有奖]

  • 0关注
  • 2粉丝

本科生

18%

还不是VIP/贵宾

-

威望
0
论坛币
278 个
通用积分
11.3817
学术水平
0 点
热心指数
0 点
信用等级
1 点
经验
1451 点
帖子
32
精华
0
在线时间
119 小时
注册时间
2011-5-13
最后登录
2023-10-17

150论坛币
已有一个总体数据集rawdata,现想从该总体里分层抽取一个样本。按地区年龄段性别分层抽取,每层抽取的数量为指定数字,如下图所示。用sas如何实现? 抽样表.png

抽样表.xlsx

9.56 KB

关键词:分层抽样 如何实现 Data 一个样 数据集 SAS 分层抽样
沙发
孤单的我们 发表于 2020-10-10 09:08:10 |只看作者 |坛友微信交流群
是有点复杂,没想到什么具体的过程步可以直接实现。理论上可以通过数据步给每个记录随机数,然后根据年龄、性别、分组按需要的数量取随机数最大/小的相应个记录。

使用道具

藤椅
hi11 发表于 2020-10-12 22:48:09 |只看作者 |坛友微信交流群
孤单的我们 发表于 2020-10-10 09:08
是有点复杂,没想到什么具体的过程步可以直接实现。理论上可以通过数据步给每个记录随机数,然后根据年龄、 ...
最先想到的也是这杨操作,但是这个分组表只展示了一部分用作举例,完整的分组有七百多个,一个个设置基本上没有操作性。

使用道具

板凳
孤单的我们 发表于 2020-10-13 13:53:56 |只看作者 |坛友微信交流群
hi11 发表于 2020-10-12 22:48
最先想到的也是这杨操作,但是这个分组表只展示了一部分用作举例,完整的分组有七百多个,一个个设置基本 ...
不论多少个,只要有完整的列表,数据集读取后,代码自动就做完了。700个和7个代码都一样

使用道具

报纸
孤单的我们 发表于 2020-10-13 14:11:06 |只看作者 |坛友微信交流群
  1. /*generate the test dataset*/
  2. data raw;
  3.         do age=1 to 5;
  4.                 do sex=1 to 2;
  5.                         do grp=1 to 9;
  6.                                 do i=1 to 100;
  7.                                         x=rannor(201013);
  8.                                         output;
  9.                                 end;
  10.                         end;
  11.                 end;
  12.         end;
  13. run;

  14. /*generate the sample rule set*/
  15. data rule;
  16.         do age=1 to 5;
  17.                 do sex=1 to 2;
  18.                         do grp=1 to 9;
  19. /*                                n is the sample size for each strata*/
  20.                                         n=ceil(uniform(201013)*10);
  21.                                         output;
  22.                         end;
  23.                 end;
  24.         end;
  25. run;

  26. /*add the random sequence for the raw data*/
  27. data raw1;
  28.         set raw;
  29.         randseq=rannor(201013);
  30. /*        add the record ID*/
  31.         id=_n_;
  32. run;

  33. proc sql noprint;
  34.         create table raw2 as
  35.         select a.*,b.n from raw1 as a
  36.         left join rule as b
  37.         on a.age eq b.age and a.sex eq b.sex and a.grp eq b.grp
  38.         order by age,sex,grp,randseq;
  39. quit;

  40. data wanted;
  41.         set raw2;
  42.         by age sex grp;
  43.         retain k 0;
  44.         if first.grp then k=0;
  45.         k+1;
  46.         if k<=n ;
  47. run;
  48.        
复制代码

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-25 11:30