请选择 进入手机版 | 继续访问电脑版
楼主: houcanni
951 2

[问答] 一个类似迭代的模拟求助 [推广有奖]

  • 0关注
  • 0粉丝

高中生

47%

还不是VIP/贵宾

-

威望
0
论坛币
1 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
275 点
帖子
10
精华
0
在线时间
39 小时
注册时间
2017-11-25
最后登录
2020-8-5

houcanni 发表于 2018-3-7 18:28:26 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
目前在做一个模拟,利用rangam函数产生一个随机变量t,同时用uniform函数产生一个5-20的随机变量tcheck。计算了t的累加值,就是ttotal。对于1到3号观测,定义twait为0,tleave为ttotal+tcheck+twait。从第4个观测开始的观测n,twait的值为前三个观测(_n-1_,_n-2_,_n-3_)中tleave的最小值减去ttotal,但如果结果小于0则设为0,同时tleave也是ttotal+tcheck+twait。
以此类推。我使用了lag,lag2和lag3函数来返回前三个tleave的值,以此来计算第四个观测开始的twait值,但问题是lag函数返回的不是前三个观测,好像变成了_n-2_,_n-3_,_n-4_的tleave的值

代码如下,求大神帮忙看看


data a;
do i=1 to 1000 while (ttotal<420);
t=10*RANGAM(10, 1);
ttotal+t;
tcheck=15*UNIFORM(i)+5;
if i<=3 then do;
twait=0;
tleave=ttotal+tcheck;
end;
else do;
twait=min(lag(tleave),lag2(tleave),lag3(tleave))-ttotal;
if twait<0 then twait=0;
tleave=ttotal+tcheck+twait;
end;
output;
end;
run;

二维码

扫码加我 拉你入群

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

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

关键词:Uniform Leave Total check while

houcanni 发表于 2018-3-7 20:36:12 来自手机 |显示全部楼层 |坛友微信交流群
求大神帮忙,搞不定了

使用道具

houcanni 发表于 2018-3-9 11:06:54 来自手机 |显示全部楼层 |坛友微信交流群
用一个比较笨的办法搞定了
data a (drop=t1-t1000);
array a(1000) t1-t1000;
do i=1 to 1000 while (ttotal<420);
t=10*RANGAM(10, 1);
ttotal+t;
tcheck=15*UNIFORM(i)+5;
if i<=3 then do;
twait=0;
tleave=ttotal+tcheck;
a(i)=tleave;
end;
else do;
twait=min(a(i-1),a(i-2),a(i-3))-ttotal;
if twait<0 then twait=0;
tleave=ttotal+tcheck+twait;
a(i)=tleave;
end;
output;
end;
run;

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-29 00:57