全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4846 6
2010-10-30
已有一个真实的数据集,现在需要生成一个模拟的数据集。具体要求是:按照某变量在真实数据集里的分布情况,在这个模拟数据集里也一样地体现出来。例如,变量x在真实的数据集里的值有0,1,2,3,4;它们的分布分别是87%,5%,4%, 3%和1%。我的问题是:不知道该怎样在新的数据集里添加这个新变量x,以保持原来的分布状况。谢谢大家!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2010-10-30 10:52:39
复制代码

暂时只想到这个笨方法,抛个砖吧
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-10-30 11:03:47
以Excel为例说明如下:
1)要生成特定分布(如标准正态分布)的随机数,可用Excel工作薄函数NORSINV(RAND())。考察这个方法,其基本原理是先生成一个均匀分布作为其概率值,再由相应的函数转换成特定分布的随机数。
2)对于LZ的情况,可以使用相同的原理来生成新的变量。即先用RAND()函数生成一个服从均匀分布的随机数,比如0.9214。原数据0的概率为87%,小于92.14%;原数据0、1合起来的概率为87%+5%=92%,还小于92.14%;原数据0、1、2合起来的概率为87%+5%+4%=96%,大于92.14%。因此对应转换后的随机数为2。使用这个方法就可以生成满足LZ要求的随机数。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-10-30 14:00:26
这是一个随机等比抽样,如果你想模拟数据集的大小事原来的一半,proc sort data=a; by x;
run;
proc surveyselect data=a out=b method =srs rate=0.5 ;strata=x;run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-10-30 21:56:10
librarynow 发表于 2010-10-30 10:17
已有一个真实的数据集,现在需要生成一个模拟的数据集。具体要求是:按照某变量在真实数据集里的分布情况,在这个模拟数据集里也一样地体现出来。例如,变量x在真实的数据集里的值有0,1,2,3,4;它们的分布分别是87%,5%,4%, 3%和1%。我的问题是:不知道该怎样在新的数据集里添加这个新变量x,以保持原来的分布状况。谢谢大家!
Here is the one to create a variable with a given distribution.

data tmp;
  seed=90987;
  p1=0.87;    p2=0.05; p3=0.04; p4=0.03; p5=1-sum(p1,p2,p3,p4);
  array m{5} m1-m5 (0 1 2 3 4);
  do i = 1 to 2000;
     x=m{rantbl(seed,of p1-p5)};
     output;
  end;
  keep  x;
run;

data tmp2;
   set     tmp;
   seed=901;
   p1=0.87;    p2=0.05; p3=0.04; p4=0.03; p5=1-sum(p1,p2,p3,p4);
   array m{5} m1-m5 (0 1 2 3 4);
    x2=m{rantbl(seed,of p1-p5)};

    keep x x2;
run;

proc freq data=tmp2;
table x x2;
run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-10-31 00:35:25
5# bobguy
看了你的函数 一查才发现 这简直就是量身定做的。。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群