SAS生成正常Y~N(...)

时间:2014-09-12 17:29:40

标签: sas

对于我的SAS项目,我必须生成(X,Y)对,其分布为Y~N(3 + X + .5X ^ 2,sd = 2)。我查看了normal()的所有SAS文档,我认为绝对没办法做到这一点。我尝试了很多不同的方法,非常沮丧。

2 个答案:

答案 0 :(得分:1)

您可以使用rand function在SAS中生成随机数。它有各种各样的发行版;阅读文档以完全理解。

我不确定您是否可以直接使用PDF,但如果您能够以常规正态分发方式使用它,则可以这样做。最重要的是,大多数单变量DFs SAS支持从均匀分布开始,然后应用它们的公式(离散或连续),这可能是正确的方法。那是进入统计之地的地方,这是我不愿意去的地方。然而,据我所知,没有直接的方法来简单地传递X的函数。

使用平均值M和标准差SD生成[numsamp]法线:

%let m=0;
%let sd=2;
%let numsamp=100;

data want;
  call streaminit(7);
  do id = 1 to &numsamp;
    y = rand('Normal',&m.,&sd.);
    output;
  end;
run;

因此,如果我理解你想要什么,这可能有用:

%let m=0;
%let sd=2;
%let numsamp=1000;
data want;
  call streaminit(7);
  do id = 1 to &numsamp;
    x = rand('Normal',&m.,&sd.);
    y = 0.5*x**2 + x + 3;
    output;
  end;
run;

proc means data=want;
var x y;
run;

X的平均值为0.5,标准差为1.96(大致是你要求的)。 Y的平均值为5,SD为3.5。如果您要求Y的SD为2,我不知道该怎么做。

答案 1 :(得分:1)

我相信这是提问者想要做的一个例子:

data sample;
    do i = 1 to 1000;
        x = ranuni(1);
        y = rand('normal', 3 + x + 0.5*x**2, 2);
        output;
    end;
run;

proc summary data = sample;
    var x y;
    output out = xy_summary;
run;

Joe已经或多或少地存在 - 我认为需要解决的唯一关键点是使每个y的均值取决于相应的x,而不是对所有对使用单个固定均值。因此,不是来自相同正态分布的1000个样本,上面从1000个不同的正态分布中的每一个生成1个样本。

我为x使用了统一的[0,1]分布,但你可以使用你喜欢的任何发行版。