julius725 发表于 2010-4-11 01:16 
请教如何如何用SAS生成二维随机数?假设生成两个变量,每个变量的边缘分布为标准正态分布,且两个变量之间不独立,现在知道它们的联合分布.怎样产生这样的一组二维随机数?
For 2-dimesional matrix, it can be done in a data step with rotations. For 3-dimesional matrix, you can use call vnormal in SAS/IML package. Here is an example.
%let rho=0.8;
%let size=1000;
data binormal;
rho=ρ
a1=sqrt((1+rho)/2);
a2=sqrt((1-rho)/2);
do i=1 to &size;
rd1=rannor(12390);
rd2=rannor(12390);
e1=a1*rd1+a2*rd2;
e2=a1*rd1-a2*rd2;
output;
end;
keep e1 e2;
run;
proc corr data=binormal;
var e1 e2;
run;
proc iml;
n=1000;
et=repeat(0,n,3);
mu = { 0, 0,0 };
sigma= { 1 0.9 0.5,
0.9 1 0.09,
0.5 0.09 1};
call vnormal(et, mu, sigma, n, -10000999);
create a from et ;
append from et;
quit;
proc corr data=a;
var col1 col2 col3;
run;
********************************************
The SAS System 13:26 Saturday, April 10, 2010 4
The CORR Procedure
2 Variables: e1 e2
Simple Statistics
Variable N Mean Std Dev Sum Minimum Maximum
e1 1000 0.00313 0.98948 3.13394 -3.27817 3.08376
e2 1000 -0.01186 0.98782 -11.85985 -3.16120 3.04577
Pearson Correlation Coefficients, N = 1000
Prob > |r| under H0: Rho=0
e1 e2
e1 1.00000 0.79983
<.0001
e2 0.79983 1.00000
<.0001
The SAS System 13:26 Saturday, April 10, 2010 5
The CORR Procedure
3 Variables: COL1 COL2 COL3
Simple Statistics
Variable N Mean Std Dev Sum Minimum Maximum
COL1 1000 0.02277 1.02535 22.77183 -3.27829 3.01796
COL2 1000 0.01116 1.03329 11.16397 -3.70324 3.42491
COL3 1000 0.02746 1.02100 27.46006 -3.76657 3.39092
Pearson Correlation Coefficients, N = 1000
Prob > |r| under H0: Rho=0
COL1 COL2 COL3
COL1 1.00000 0.90128 0.48264
<.0001 <.0001
COL2 0.90128 1.00000 0.07220
<.0001 0.0224
COL3 0.48264 0.07220 1.00000
<.0001 0.0224