首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >填充矩阵proc iml SAS

填充矩阵proc iml SAS
EN

Stack Overflow用户
提问于 2014-09-24 13:03:03
回答 1查看 413关注 0票数 1

我有一个x矩阵,它有两个列(c1,c2)。我想修复第一列(c1),添加10列,每个列都有值C2+m,C2+m...C2+m到X矩阵,m是一个随机整数。最后,矩阵将是:

C1,C2+m,C2+m,C2+m...C2+m;

代码:

代码语言:javascript
复制
proc iml;

use nonpar;

read all var{treat response} into x;

do i=1 to 10;

call randseed(123);

call randgen(u, "Uniform");

Max = 300; Min = 68;

m = min + floor( (1+Max-Min)*u );

x = x[,1]||x[,2]+m;

end;

quit;

谁能帮我修一下..。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-24 16:30:55

有几件事应该会让你走向正确的方向。

首先,预先创建完整的目标矩阵,不要经常连接.因此,一旦您将数据集读取到x中,就可以创建另一个x_new,其行数与x相同,但有11列。j会为你这么做的。

其次,您可以一次生成所有随机数,但是您必须首先定义要填充的矩阵的大小,同样使用j。这是假设您希望为10列和每一行中的每一列都设置一个新的随机整数;如果您只想要每一行或只有一个m,则需要进行不同的操作,但您需要澄清这一点。如果您只想要10米的一行,那么您可以先这样做(生成一个包含10列1行的u ),然后使用矩阵乘法将其扩展到x的全部行数。

下面是一个使用SASHELP.CLASS演示这两个概念的简化示例。

代码语言:javascript
复制
proc iml;
  use sashelp.class;
  read all var {age weight} into x;
  x_new = j(nrow(x),11);  *making the new matrix with lots of columns;
  x_new[,1] = x[,1];      *copy in column 1;
  call randseed(123); 
  u = j(nrow(x),10);      *make the to be filled random matrix;
  call randgen(u,'Uniform',68,300); *the min/max parameters can go here;
  u = floor(u+0.5);  *as Rick noted in comments, needed to get the max value properly;
  x_new[,2:11] = u[,1:10] + x[,2]; *populate x_new here;
  print x_new;
quit;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26017671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档