【原创】在SAS和R中实现区组随机

时间:2014-01-24 19:40:31   收藏:0   阅读:538

本文的主要目的是介绍如何在R与SAS中编程实现区组随机。

 

R

bubuko.com,布布扣
seed=20140124
blocksize = 20
N = 200
set.seed(seed)
block = rep(1:ceiling(N/blocksize), each = blocksize)
a1 = data.frame(block, rand=runif(length(block)), envelope= 1: length(block))
a2 = a1[order(a1$block,a1$rand),]
a2$group = rep(c("Group A", "Group B"),times = length(block)/2)
assign = a2[order(a2$envelope),]
head(assign,40)
bubuko.com,布布扣

输出结果:

bubuko.com,布布扣将该过程编译成函数,方便调用。

bubuko.com,布布扣
blockrand = function(seed,blocksize,N){  
    set.seed(seed) 
    block = rep(1:ceiling(N/blocksize), each = blocksize)
    a1 = data.frame(block, rand=runif(length(block)), envelope= 1: length(block)) 
    a2 = a1[order(a1$block,a1$rand),]
    a2$group = rep(c("Group A", "Group B"),times = length(block)/2)  
    assign = a2[order(a2$envelope),]  
    return(assign)
}
bubuko.com,布布扣

 

SAS

bubuko.com,布布扣
%let N = 200;
%let blocksize = 20;
%let seed = 20140124;
data blocks;
    call streaminit(&seed);
    do block = 1 to ceil(&N/&blocksize); 
        do item = 1 to &blocksize;
            if item le &blocksize/2 then group="Group A";
            else group="Group B";
            rand = rand(UNIFORM);
            output;
        end;
    end;
run;
proc sort data = blocks; by block rand;run;
proc print data = blocks (obs = 40) obs="Envelope";run;
bubuko.com,布布扣

输出结果:

bubuko.com,布布扣

bubuko.com,布布扣

将该过程封装成宏,方便调用。

bubuko.com,布布扣
%macro blockrand(N,blocksize,seed);
data blocks;
    call streaminit(&seed);
    do block = 1 to ceil(&N/&blocksize); 
        do item = 1 to &blocksize;
            if item le &blocksize/2 then group="Group A";
            else group="Group B";
            rand = rand(UNIFORM);
            output;
        end;
    end;
run;
proc sort data = blocks; by block rand;run;
%mend blockrand;
bubuko.com,布布扣

原文:http://www.cnblogs.com/liyongzhao/p/3532032.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!