SAS生成正规Y~N(…)

SAS生成正规Y~N(…),sas,Sas,对于我的SAS项目,我必须生成分布为Y~N(3+X+.5X^2,sd=2)的(X,Y)对。我已经看过了normal()。我尝试过许多不同的方法,但我非常沮丧。您使用SAS生成随机数。它有各种各样的发行版;阅读文档以完全理解 我不确定你是否可以直接使用你的PDF,但是如果你能用正态分布,你可以这样做。最重要的是,大多数单变量DFs SAS支持从均匀分布开始,然后将其公式(离散或连续)应用于此,因此这可能是正确的方法。这就是我不想去的地方。然而,据我所知,没有一种直接的方法可以简单地为X传递函数 要

对于我的SAS项目,我必须生成分布为Y~N(3+X+.5X^2,sd=2)的(X,Y)对。我已经看过了
normal()。我尝试过许多不同的方法,但我非常沮丧。

您使用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,SD为1.96(大致符合您的要求)。Y的平均值为5,SD为3.5。如果你要求Y的SD为2,我不知道该怎么做。

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

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]分布,但您可以使用任何您喜欢的分布。

我很确定这是一个重复的,但我找不到重复的;如果有人记得/能找到它,我就去职业训练局。@Joe我也找不到类似的东西。你有解决方案吗,还是你只是想发布?解决方案需要时间来写,耐心点。:)您需要指定有关
X
的分布的内容。或者它已经在数据集中了?我想我得到了一些东西-你认为呢?这将生成Y=3+X+0.5*X^2,其中X~N(0,2),我认为这不是OP要求的。然而,最初的问题不清楚X变量,你的答案很好。同意,我不知道足够的统计数据来回答另一个版本,甚至不知道这是否可能(我想是的,但根据我的经验,R在这方面比SAS有优势。)啊,这是有道理的。