楼主: kutuomonk
9667 9

如何在sas中进行病例对照研究中对照的抽样? [推广有奖]

  • 1关注
  • 3粉丝

已卖:1份资源

副教授

47%

还不是VIP/贵宾

-

威望
0
论坛币
9968 个
通用积分
12.9149
学术水平
2 点
热心指数
2 点
信用等级
2 点
经验
13758 点
帖子
312
精华
0
在线时间
1285 小时
注册时间
2008-11-15
最后登录
2025-12-19

楼主
kutuomonk 发表于 2010-5-30 17:56:29 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
各位牛人,大家好!我在做病例对照的配对抽样,现有2个库,一个是病例库200个,一个是对照库3000个,我想进行1:1匹配。在对照库中给每个病人找与病例性别相同,年龄2岁内的一个对照。病例库k变量有age1, sex1, id1,对照库l变量有age2, sex2, id2。用proc sql把符合条件的都找出来了,可是会存在:几个病人有可能有同一个对照,这个怎么解决,各位有其他好的抽样方法吗?在google上找到一篇《利用SAS 進行個案對照研究配對抽樣》,可是现在不能下载。谢了!
二维码

扫码加我 拉你入群

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

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

关键词:病例对照 proc sql Google 抽样方法 SEX 研究 SAS 病例

回帖推荐

crackman 发表于2楼  查看完整内容

%macro result(m); data a; set case; where didian=&m.; call symput("min"||left(_n_),min); call symput("max"||left(_n_),max); run; data b; set control; where didian=&m.; run; %mend result; %macro crackman(min,max,out); data woody; set b; where age>&min. and age

本帖被以下文库推荐

沙发
crackman 发表于 2010-5-30 18:09:23
%macro result(m);
data a;
set case;
where didian=&m.;
call symput("min"||left(_n_),min);
call symput("max"||left(_n_),max);
run;
data b;
set control;
where didian=&m.;
run;
%mend result;
%macro crackman(min,max,out);
data woody;
set b;
where age>&min. and age<&max.;
run;
proc surveyselect data=woody method=srs rep=1 sampsize=1 seed=5488 out=&out. noprint;
id _all_;
run;
data _null_;
set &out.;
call symput("id",id);
run;
data b;
set b;
where id^=&id.;
run;
%mend crackman;
%macro crackman1(n);
%do i=1 %to &n.;
  %result(&i.);
%do j=1 %to &n.;
%crackman(&&min&j.,&&max&j.,a&j.);
proc append base=c  data=a&j.;
run;
%end;
%end;
proc datasets library=work nolist;
delete a1-a10;
run;
quit;
%mend crackman1;
%crackman1(10);

藤椅
crackman 发表于 2010-5-30 18:12:58
之前问过我
我就发上来了
你仔细看看

板凳
bobguy 发表于 2010-5-30 23:02:16
kutuomonk 发表于 2010-5-30 17:56
各位牛人,大家好!我在做病例对照的配对抽样,现有2个库,一个是病例库200个,一个是对照库3000个,我想进行1:1匹配。在对照库中给每个病人找与病例性别相同,年龄2岁内的一个对照。病例库k变量有age1, sex1, id1,对照库l变量有age2, sex2, id2。用proc sql把符合条件的都找出来了,可是会存在:几个病人有可能有同一个对照,这个怎么解决,各位有其他好的抽样方法吗?在google上找到一篇《利用SAS 進行個案對照研究配對抽樣》,可是现在不能下载。谢了!
If a matched character is defined by a number of catagorical variables including binned variables, then SAS proc surveyselect with stratified sampling may help in your case.

报纸
wwy2010 发表于 2010-5-31 08:37:58
还是人大经济效率高!!!啊
古人说的好,活到老学到老,何况有这么好的学习平台呢。

地板
baojiwolong 发表于 2011-5-5 09:07:50
看这里,很好的解决方法!
https://bbs.pinggu.org/thread-1091720-1-1.html

7
浮生绘梦 发表于 2012-12-26 14:32:15
baojiwolong 发表于 2011-5-5 09:07
看这里,很好的解决方法!
https://bbs.pinggu.org/thread-1091720-1-1.html
这个真的值得收藏

8
pingguzh 发表于 2012-12-27 09:15:10
人大经济论坛的确很好的
统计爱好

9
yojoy123 发表于 2013-5-19 07:35:08
多谢2楼分享经验!!

10
liche4005 发表于 2014-12-28 16:26:32
楼主按照你的程序,我运行了一下,生成了4个文件a1  control  case and hb,是吧case和control纵向合并吗,按照case的数目,把control中多余的删除是不是就是1:1匹配了,因为case和control加起来就是a1的数据,
我是用年龄和性别匹配,改了一下参数,不过老是出现一下错误:

ERROR: 宏函数 %SCAN 的参数过多,系统将忽略多余的参数。
ERROR: 在需要数值操作数的 %EVAL 函数或 %IF 条件中发现字符操作数。条件是: 206 766
ERROR: 宏函数 %SCAN 的参数 2 不是数字。
ERROR: 宏 SS 将终止执行。



proc sort data=data out=a1;
by sex age malb_yn;
data a1;set a1;
pp=sex; *班级匹配变量pp;
run;
data a_case a_control;set a1;
if malb_yn =1 then output a_case; *病例数据集a_case;
if malb_yn=0 then output a_control; *对照数据集a_control;
run;

%macro ss;
proc datasets lib=work;delete sample;run;*清除前次抽选样本,方便重复运行宏抽样程序;
proc sql noprint;
select count(*) into: num from a_case; *统计病例个数;
%do i=1 %to &num;
%let k=%eval(&i-1);
proc sql noprint;
select caseid into: idx separated by ' ' from a_case;  *病例ID号 到宏idx;
%let xx=%scan(&idx,&i,' ') ;
data case&i; set a_case;
if caseid=&xx then call symput("pp_v",pp); *相同匹配条件pp;
if caseid=&xx then call symput("age_v",age); run; *范围匹配条件age;
data control&i; set a_control;
if pp="&pp_v" and abs(age-&age_v)<3; run; *生成符合匹配条件control样本;
proc surveyselect noprint data=control&i method=srs n=1 out=sample&i seed=1000;        *n=1 ,1:1匹配;
data a_control; set a_control sample&i; run;
proc sql noprint;
create table a_control as  select * from a_control  group by caseid having n(id)=1;        *剔除已选择control样本;
%end;
data sample;set sample:;run; *生成匹配样本库;
data hb;set a_case sample;run; *生成总库;
proc datasets lib=work;save a1 data a_case a_control sample hb; run; *清除过程文件;
%mend;
%ss;

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-25 14:20