变量有3个,code age cancer,其中cancer=1是病例,有300个,cancer=0则是正常人,都各有自己的age。
据说用到随机数函数,折腾了半天,没搞明白。望高手指教!作者: shiyiming 时间: 2009-2-19 00:36 标题: Re: 如何在队列内 为病例随机选对照??? [code:349h2k4g]data ahuige;/*pseudo dataset*/
cancer=0;
do code=1 to 70000;
if code<=300 then cancer=1;
else cancer=0;
age=ceil(uniform(34938493)*100);
output;
end;
run;
data ahuigeAddId;
set ahuige;
randomid=normal(43578437); /*change to 0 to get unrepeatable random id*/
lowage=age-2;
upage=age+2;
run;
proc sort data=ahuigeAddId;
by randomid;
run;
data cancer noncancer;
set ahuigeADDid;
if cancer=1 then output cancer;
else output noncancer;
;
run;
%macro getPeers(code,low,up);
data candidate(keep=patientId code age ) noncancer(drop=patientid n);
set noncancer;
patientId=&code;
if &low<=age<=&up then
do;
n+1;
if n<=4 then output candidate;
else output noncancer;
end;
else output noncancer;
run;
Log of version 8.2:
NOTE: Appending WORK.CANDIDATE to WORK.FINAL.
NOTE: There were 4 observations read from the data set WORK.CANDIDATE.
NOTE: 4 observations added.
NOTE: The data set WORK.FINAL has 1888 observations and 3 variables.作者: shiyiming 时间: 2009-2-20 09:23 标题: Re: 如何在队列内 为病例随机选对照??? 不知道你们的版本怎么这么有意思,我的SAS8 SAS9结果都一样。
..............................
徐福贵说得对,这个问题难点不在于出来一组结果。难点在于结果的随机性。作者: shiyiming 时间: 2009-2-20 11:25 标题: Re: 如何在队列内 为病例随机选对照??? [quote="ahuige":nxbq5pmz]可能是男生寝室人气太旺。所以人数比女生寝室多。。。。。。。。。。。 <!-- s:( --><img src="{SMILIES_PATH}/icon_sad.gif" alt=":(" title="Sad" /><!-- s:( -->[/quote:nxbq5pmz]
sas6.12 的log:
NOTE: Appending WORK.CANDI to WORK.FINAL.
NOTE: 4 observations added.
NOTE: The data set WORK.FINAL has 1200 observations and 3 variables.
SAS9.2的log:
NOTE: Appending WORK.CANDIDATE to WORK.FINAL.
NOTE: There were 4 observations read from the data set WORK.CANDIDATE.
NOTE: 4 observations added.
NOTE: The data set WORK.FINAL has 1200 observations and 3 variables.