SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1327|回复: 7
打印 上一主题 下一主题

请教一个随机取数的问题,谢谢!

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-4-15 10:34:05 | 只看该作者

请教一个随机取数的问题,谢谢!

想请问一下:如何从一列数据(31980条)中随机提取13560条数据呢,谢谢!
我以前随机提取都是按百分比来取,这次是直接取出多少条,请问这个程序怎么写呢,谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2009-4-15 16:54:09 | 只看该作者

Re: 请教一个随机取数的问题,谢谢!

生成随机数,排序,取前或者后N条就行了。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2009-4-15 17:26:47 | 只看该作者

Re: 请教一个随机取数的问题,谢谢!

[code:1aar2rts]
data x;
        retain seed 481984;
                do i=1 to 31980;
                        call ranuni(seed,x);
                        output;
                end;
run;

data random;
        merge dt(keep=var) x(keep=x);
run;
proc sort; by x;run;

[/code:1aar2rts]

上面是生成随机数程序.481984是随便写的.你任意修改也可以.dt是数据集.var是主key.

然后随便写个_n_.取_n_ 到 _n_+13560 既可
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2009-4-16 14:10:19 | 只看该作者

Re: 请教一个随机取数的问题,谢谢!

<!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2009-4-30 17:20:38 | 只看该作者

Re: 请教一个随机取数的问题,谢谢!

to Sylvaner
我想请问为什么要先生成随机数,然后和以前的数据集合并呢,我直接向下面这样写有问题吗:谢谢了
data x;
set mm;
retain seed 0;
call ranuni(seed,x);
output;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2009-5-1 02:28:37 | 只看该作者

Re: 请教一个随机取数的问题,谢谢!

根据放回抽取和不放回抽取而写的code是不一样的。。
至于算法方面,与某著名公司N多年前的C面试题相似~~
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2009-5-1 03:27:29 | 只看该作者

Re: 请教一个随机取数的问题,谢谢!

*Choosing a random sample with replacement;

data SubData;
nSample=13560;
do i=1 to nSample;
    nRan=ceil(ranuni(1)*nTotal);*if seed ^=0 then repeated sample is identical,if seed =0 then repeated sample is random;
        set oldData point=nRan nobs=nTotal;
        output;
end;
stop;
run;

*i find that if the old data having many columns, the code is so inefficient;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2009-5-1 11:32:42 | 只看该作者

Re: 请教一个随机取数的问题,谢谢!

deshenshu做的也是放回抽样。
因为频繁IO, 所以可以使用sasfile open, array, hash等方法将数据保存在内存当中,若不是硬盘中~~
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-5 16:10 , Processed in 0.083507 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表