楼主: tjtxh
5585 6

请教SAS高手一个数据步的问题(宏程序中的Do循环 [推广有奖]

  • 0关注
  • 0粉丝

高中生

15%

还不是VIP/贵宾

-

威望
0
论坛币
85 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
195 点
帖子
16
精华
0
在线时间
23 小时
注册时间
2008-4-10
最后登录
2014-5-15

楼主
tjtxh 发表于 2011-12-2 11:48:14 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我想在SAS中产生一系列的随机数,具体来说:对应id为1 ,产生1个随机数,对应id为2,产生2随机数,以此类推,一直到id=99时,产生99个随机数。但是我目前写的程序,每个id均只能产生一个随机数(也就是数据库里只有99条记录,但是我想得到1+2+3+...+99共4950条记录),不知道怎么实现。我写的程序如下:%macro datas;data s;%do id= 1 %to 99;ran=(248-((&id-1)*2))+(24.8-((&id-1)*0.2))*rannor(&id);output;%end;run;%mend datas;%datas;
问题补充: 另外,为什么这段程序运行出来只有一个变量(即ran这个变量),没有id这个变量啊? 如果不是宏程序,为什么就会产生id和ran两个变量呢?先谢谢啦!

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:do循环 宏程序 output DataS outpu 记录 数据库 程序

沙发
bobguy 发表于 2011-12-2 12:21:51
You don't need any macro programming in this simple case. See example below.

data t1;
   do id=1 to 10;
      output;
   end;
run;

data t2;
  set t1;
  do i=1 to id;
     ran=ranuni(1);
         output;
  end;
run;

藤椅
tjtxh 发表于 2011-12-2 12:34:04
谢谢。关键是我这段程序里的随机数服从的分布的参数也会随着id变化,这种情况下是不是也不需要宏程序,也有更简单的写法么?(比如我上面的程序,每一个id对应的这些随机数,都服从正态分布,但是正态分布的参数随id变化)。
我是菜鸟,见笑了。

板凳
tj0412ymy 发表于 2011-12-2 15:23:10
宏程序里的id是用来做循环的宏变量,当然不会保存到数据集里了
对SAS和统计方面感兴趣的朋友,请加SAS学习和认证讨论群:169157207。欢迎在群上讨论!

报纸
tjtxh 发表于 2011-12-2 15:50:36
嗯嗯,明白了。问题已解决,谢谢二位。

地板
420948492 发表于 2012-1-5 12:41:06
二楼的程序简单改一下就可以了吧
%macro randge(obs);
data t1;
   do id=1 to &obs;
      output;
   end;
run;
data t2;
  set t1;
  do i=1 to id;
     ran=ranuni(1);
         output;
  end;
run;
%mend randge;
%randge(100);
有人的地方就有江湖

7
jingju11 发表于 2012-1-6 00:25:54
  1. proc iml;
  2.   submit;
  3.     data s0;
  4.       set s;
  5.       do _n_ =1 to id;
  6.         output;
  7.       end;
  8.     run;
  9.   endsubmit;
  10.   
  11.   use s0;
  12.   read all var {"id"};
  13.   close s0;
  14.   
  15.   call randseed(12345);
  16.   x =j(nrow(id), 1);
  17.   call randgen(x, "normal");
  18.   y =((248 -(id -1) *2) +(24.8 -(id -1) *0.2)) #x;
  19.   z =id ||y;
  20.   
  21.   create have from z[colname ={"id" "randnum"}];
  22.   append from z;
  23.   close have;
  24.   
  25. quit;
复制代码
jingju

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 05:42