楼主: librarynow
4904 6

求助:如何添加有约束条件的新变量 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

37%

还不是VIP/贵宾

-

威望
0
论坛币
945 个
通用积分
0
学术水平
1 点
热心指数
1 点
信用等级
0 点
经验
1963 点
帖子
120
精华
0
在线时间
170 小时
注册时间
2010-4-9
最后登录
2016-1-9

楼主
librarynow 发表于 2010-10-30 10:17:50 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
已有一个真实的数据集,现在需要生成一个模拟的数据集。具体要求是:按照某变量在真实数据集里的分布情况,在这个模拟数据集里也一样地体现出来。例如,变量x在真实的数据集里的值有0,1,2,3,4;它们的分布分别是87%,5%,4%, 3%和1%。我的问题是:不知道该怎样在新的数据集里添加这个新变量x,以保持原来的分布状况。谢谢大家!
二维码

扫码加我 拉你入群

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

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

关键词:约束条件 新变量 具体要求 模拟数据 我的问题 求助 变量 约束条件

回帖推荐

sopching 发表于2楼  查看完整内容

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

bobguy 发表于5楼  查看完整内容

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); ...

本帖被以下文库推荐

沙发
sopching 发表于 2010-10-30 10:52:39
  1. data test;
  2.     do i=1 to 1000 by 1;
  3.          x=ranuni(0);
  4.             select ;
  5.                 when (0<x<0.87) test=0;
  6.                 when  (0.87<=x<0.92) test=1;
  7.                 when (0.92<=x<0.96) test=2;
  8.                 when (0.96<=x<0.99) test=3;
  9.                 otherwise test=4;
  10.            end;
  11.       drop x i;
  12.       output;
  13.        end;
  14. run;
复制代码

暂时只想到这个笨方法,抛个砖吧
已有 1 人评分热心指数 收起 理由
crackman + 2 热心回答

总评分: 热心指数 + 2   查看全部评分

藤椅
Jack315 发表于 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要求的随机数。
已有 1 人评分热心指数 收起 理由
crackman + 2 热心回答

总评分: 热心指数 + 2   查看全部评分

板凳
tiantianfrm 发表于 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;
已有 1 人评分热心指数 收起 理由
crackman + 2 热心回答

总评分: 热心指数 + 2   查看全部评分

报纸
bobguy 发表于 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;
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
librarynow + 1 + 1 + 1 精彩帖子, 非常好!
sopching + 1 + 1 + 1 nice

总评分: 学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

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

7
librarynow 发表于 2010-10-31 02:05:21
All the great replies are really wonderful!
Thank you all very much!
I learned a lot!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-25 19:10