SAS中文论坛

标题: 请教一个随机取数的问题,谢谢! [打印本页]

作者: shiyiming    时间: 2009-4-15 10:34
标题: 请教一个随机取数的问题,谢谢!
想请问一下:如何从一列数据(31980条)中随机提取13560条数据呢,谢谢!
我以前随机提取都是按百分比来取,这次是直接取出多少条,请问这个程序怎么写呢,谢谢!
作者: shiyiming    时间: 2009-4-15 16:54
标题: Re: 请教一个随机取数的问题,谢谢!
生成随机数,排序,取前或者后N条就行了。
作者: shiyiming    时间: 2009-4-15 17:26
标题: 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 既可
作者: shiyiming    时间: 2009-4-16 14:10
标题: Re: 请教一个随机取数的问题,谢谢!
<!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
作者: shiyiming    时间: 2009-4-30 17:20
标题: Re: 请教一个随机取数的问题,谢谢!
to Sylvaner
我想请问为什么要先生成随机数,然后和以前的数据集合并呢,我直接向下面这样写有问题吗:谢谢了
data x;
set mm;
retain seed 0;
call ranuni(seed,x);
output;
run;
作者: shiyiming    时间: 2009-5-1 02:28
标题: Re: 请教一个随机取数的问题,谢谢!
根据放回抽取和不放回抽取而写的code是不一样的。。
至于算法方面,与某著名公司N多年前的C面试题相似~~
作者: shiyiming    时间: 2009-5-1 03:27
标题: 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;
作者: shiyiming    时间: 2009-5-1 11:32
标题: Re: 请教一个随机取数的问题,谢谢!
deshenshu做的也是放回抽样。
因为频繁IO, 所以可以使用sasfile open, array, hash等方法将数据保存在内存当中,若不是硬盘中~~




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2