全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2159 5
2015-11-25
/*Creating a Random Sample without Replacement*/
%macro randomsample(sizeno=,newdataset=,olddataset=);
data &newdataset(drop=obsleft sampsize);
sampsize=&sizeno;
obsleft=totobs;
do while(sampsize>0);
  pickit+1;
  if ranuni(0)<sampsize/obsleft then do;
   set &olddataset point=pickit nobs=totobs;
   output;
   sampsize=sampsize-1;
  end;
  obsleft=obsleft-1;
end;
stop;
run;
%mend randomsample;
%randomsample(sizeno=200,newdataset=temp,olddataset=maps.africa) ;

是一个创建随机样本的代码,书上的,有个obsleft的变量,插在这里是干嘛用的哇。。看了许久,没看明白。。。
谢谢大虾们指教了
二维码

扫码加我 拉你入群

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

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

全部回复
2015-11-25 22:40:00
感觉是使sampsize/obsleft的值越来约大而ranuni(0)<sampsize/obsleft的条件越来越容易达成。这样的话感觉越是靠后的观测越容易被取中啊
二维码

扫码加我 拉你入群

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

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

2015-11-26 09:46:01
banishurface 发表于 2015-11-25 22:40
感觉是使sampsize/obsleft的值越来约大而ranuni(0)
那"obsleft=obsleft-1; "呢?
之前主要是这句话想不通,感觉去掉也没事,但是去掉之后虽然效果一样,但是有错,这是为什么呢?
二维码

扫码加我 拉你入群

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

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

2015-11-26 20:54:07
尐猪o0 发表于 2015-11-26 09:46
那"obsleft=obsleft-1; "呢?
之前主要是这句话想不通,感觉去掉也没事,但是去掉之后虽然效果一样,但是 ...
那会导致一个问题就是成功取到一个样本的概率越来越小。那个数据集有大概52824个样本,你这段代码取样本的公式是
ranuni(0)<sampsize/obsleft,试想一下如果不每轮obsleft-1当你在取最后一个样本的时候成功的概率有多小(=1/52824),这样会导致pickit的值大于52824也就是母集过了一遍也取不足200个样本。 而obsleft-1可以保证你能取够200个,因为当obsleft<samplesize的时候下一个取样成功率是100%
二维码

扫码加我 拉你入群

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

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

2015-11-27 16:21:59
banishurface 发表于 2015-11-26 20:54
那会导致一个问题就是成功取到一个样本的概率越来越小。那个数据集有大概52824个样本,你这段代码取样本的 ...
嗯。谢谢哈。懂了。
二维码

扫码加我 拉你入群

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

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

2018-9-18 14:25:20
banishurface 发表于 2015-11-25 22:40
感觉是使sampsize/obsleft的值越来约大而ranuni(0)
ranuni(0)这个函数在每一轮比较都重新计算(得出值不一样)?还是只是在开头计算一次一直沿用(值一样)?
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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