全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3235 1
2014-03-14

    我想从数据库中选择性别相同,年龄相差不超过2岁的病例与对照,我参考了论坛帖子https://bbs.pinggu.org/thread-2845169-1-1.html,自己的程序如下,虽然程序可以运行,但生成的总库hb并没有达到匹配的效果,里面还是5条记录,恳请大侠帮着改一改啊,从而能够达到匹配的效果,不胜感激!

data match;

input id sex age case;

cards;

1 1 34 1

2 1 35 0

3 2 65 1

4 2 66 0

5 1 11 1

run;

data a1;

set match;

pp=sex; *性别匹配变量pp;

run;

data a_case a_control;set a1;

if case=1 then output a_case; *病例数据集a_case;

if case=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 #

%let k=%eval(&i-1);

proc sql noprint;

select id into: idx separated by ' ' from a_case;  *病例ID 到宏idx;

%let xx=%scan(&idx,&i,' ') ;

data case&i;set a_case;

if id=&xx then call symput("pp_v",pp); *相同匹配条件pp;

if id=&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 ,11匹配;

data a_control;set a_control sample&i; run;

proc sql noprint;

create table a_control as  select * from a_control  group by id having n(id)=1; *剔除已选择control样本;

%end;

data sample;set sample:;run; *生成匹配样本库;

data hb;set a_case sample;run; *生成总库;

proc datasets lib=work;save a1 js a_case a_control sample hb; run; *清除过程文件;

%mend;

%ss;

二维码

扫码加我 拉你入群

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

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

全部回复
2014-6-23 15:17:50
已经解决了
附件列表
G}Y$EIZ@8~~ENL5])SGW9TJ.jpg

原图尺寸 42.74 KB

程序运行后出现了这个问题

程序运行后出现了这个问题

二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群