- 阅读权限
- 255
- 威望
- 0 级
- 论坛币
- 433 个
- 通用积分
- 0.1200
- 学术水平
- 0 点
- 热心指数
- 0 点
- 信用等级
- 0 点
- 经验
- 4060 点
- 帖子
- 59
- 精华
- 0
- 在线时间
- 42 小时
- 注册时间
- 2016-8-31
- 最后登录
- 2023-6-12
|
关于宏的课堂练习,第五个还没解决。
1、产生一个数据集,
包含变量X的100个随机数。
随机数服从均数为1,方差为2的正态分布。
- /*1*/
- data a ;
- do i = 1 to 100;
- x=rand('normal',1,sqrt(2));
- end;
- run;
复制代码
2、产生一个数据集
包含变量X1-X100,每个变量100个随机数。
随机数服从均数为1,方差为2的正态分布。
/*2*/
- data b;
-
- array x x1-x100;
- do i = 1 to 100;
- do over x;
- x=rand('normal',1,sqrt(2));
- end;
- output;
- end;
-
- run;
复制代码
3、请将程序改写成宏,要求如下
产生数据集,包含m个变量
每个变量有n个随机数
随机数都服从,均数为mean,方差为sigma的正态分布
并可以定义数据集的名称。
- /*3*/
- %macro normal(m,n ,mean,sigma,name) ;
- data &name.;
- array x x1-x&m.;
- %do i =1 %to &n.;
- do over x;
- x=Rand('NORMAL',&mean.,sqrt(&sigma.));
- end;
- output;
- %end;
- run;
- %mend;
- %normal(100,100,1,2,bbb);
复制代码
4、请将程序改写成宏,要求如下
产生数据集,包含m个变量
每个变量有n个随机数
所有变量都服从以下规律
第i个变量的第j个随机数服从均数为(i除以3的余数),方差为j/2的正态分布
并可以定义数据集的名称。
- /*4*/
- %macro normal2(m,n ,name) ;
- data &name.;
- array x{&m} x1-x&m.;
- %do i =1 %to &n.;
- do j=1 to &m. ;
- %let mean=mod(j,3);
- %let sigma_sd = sqrt(0.5*&i.);
- x{j}=Rand('NORMAL', &mean.,&sigma_sd.);
- end;
- output;
- %end;
- run;
- %mend;
- %normal2(11,11,ddd);
复制代码
5、在以上基础上,新增功能,指定不同的分布类型(非常感谢 ID:孤单的我们)
请参考:https://bbs.pinggu.org/forum.php?mod=viewthread&tid=4848792&page=1&extra=#pid39050866
- %macro F(m,n ,name,type) ;
- data &name.;
- array x{&m} x1-x&m.;
- %do i =1 %to &n.;
- do j=1 to &m. ;
- %let mean=mod(j,3);
- %let sigma_sd = sqrt(0.5*&i.);
- x{j}=Rand("&type", &mean.,&sigma_sd.);
- end;
- output;
- %end;
- run;
- %mend;
- %F(100,100,eee,NORMAL);
复制代码
|
|