全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1985 3
2017-09-09

在SAS advance certificate 上一段程序,page 458 望指点。谢谢!!

data work. rsubset(drop =obsleft sampsize);
sampsize =10;
obsleft=totobs;
do while(sampsize>0);
      pickit +1 ;                                                /* 这样下去pickit 不就是只能取 1,2, 3, ..10 吗? pickit 不是随机的了?*/
      if ranuni(0) < samplsize / obsleft then do;   /** 看不懂这句?**/
                set sasuser.revenue  point=pickit nobs=totobs;  
                sampsize=sampsize -1;
   end;
   obsleft = obsleft-1;
   end;
   stop;
run;




二维码

扫码加我 拉你入群

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

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

全部回复
2017-9-30 17:39:25
gnim 发表于 2017-9-9 23:13
在SAS advance certificate 上一段程序,page 458 望指点。谢谢!!

data work. rsubset(drop =obslef ...
决定随机的不是pickit
注意set语句里面 point=pickit ,指定临时变量pickit里面包含的数值决定了哪一行观测被读取,然后pickit+1这句再在每次执行改变指定的行。
注意sampsize=10和do while (sampsize>0)和里面sampsize=sampsize-1就决定了一共只读十条观测。
然后if语句那里,ranuni()函数才是决定随机的,ranuni(0)每次随机生成0-1之间的值,当ranuni(0)<sampsize/obsleft时,(这里obsleft通过nobs=totobs指定等于观测总数,且obsleft-1这句使得obsleft的值也每次变),由此执行set语句,故达到随机抽取其中十条观测的目的。。。。。
逻辑很绕,我也看了好久才看明白,比较少用得到,会考的点好像是ranuni(seed),就是里面的是seed不同值返回什么结果
seed是同一个正数时返回结果不变,是0时每次随机生成值,可以敲代码看看不同值的结果。
ranuni()在sas官方的定义是从均匀分布返回一个随机变量
二维码

扫码加我 拉你入群

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

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

2017-9-30 17:41:35
chen2min 发表于 2017-9-30 17:39
决定随机的不是pickit
注意set语句里面 point=pickit ,指定临时变量pickit里面包含的数值决定了哪一行观 ...
啊 被吃掉了一段话 if语句那里 能理解就行
二维码

扫码加我 拉你入群

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

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

2017-11-2 17:06:07
决定随机的不是pickit,而是 ranuni(0) < samplsize / obsleft,也就是某一行是否被选中,由这三个数值决定。

不过总体来说,由于samplesize不是单调的,二obsleft是单调减小的,所以越是后面的obs被选中的概率大一点。
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群