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;