楼主: jsntxt
7334 7

[程序分享] 一个关于选取性别、年龄匹配的SAS程序问题 [推广有奖]

  • 0关注
  • 0粉丝

本科生

62%

还不是VIP/贵宾

-

威望
0
论坛币
255 个
通用积分
0.0600
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
194 点
帖子
42
精华
0
在线时间
109 小时
注册时间
2008-5-29
最后登录
2015-10-21

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我想从数据库中选择性别相同,年龄相差不超过2岁的病例与对照,我参考了论坛帖子https://bbs.pinggu.org/thread-2845169-1-1.html,自己的程序如下,但总是失败,却不知道问题出在哪里,恳请各位大侠指点迷津,不胜感激!
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 &num
%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 ,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 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;
二维码

扫码加我 拉你入群

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

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

关键词:sas程序 proc sql separate datasets control 程序

沙发
intheangel 学生认证  发表于 2014-3-12 20:46:31 |只看作者 |坛友微信交流群
少了个分号吧

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 &num
%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 ,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 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;
我是一只瘦瘦的小猪~~~
╭︿︿︿╮
{/-◎◎-/}
( (oo) )
  ︶︶︶

使用道具

藤椅
jsntxt 发表于 2014-3-13 21:34:03 |只看作者 |坛友微信交流群
谢谢您的解答,可是我加了分号后,程序虽然可以运行,但生成的总库hb并没有达到匹配的效果,里面还是5条记录,这是怎么回事啊,是不是程序有错啊,恳请大侠帮着改一改啊,从而能够达到匹配的效果,不胜感激!

使用道具

板凳
zhusd 发表于 2014-4-29 13:42:52 |只看作者 |坛友微信交流群
我也参考了这个帖子的程序,结果匹配出来的总库也不对,不知道楼主有没有解决这个问题?请教

使用道具

报纸
泡泡~·馍 发表于 2014-6-20 10:14:12 |只看作者 |坛友微信交流群
病例对照的sas貌似很棘手耶

使用道具

地板
yongyitian 发表于 2014-6-21 11:09:23 |只看作者 |坛友微信交流群
  1. /* try this */

  2. data a;
  3. input id sex age case;
  4. cards;
  5. 1 1 34 1
  6. 2 1 35 0
  7. 3 2 65 1
  8. 4 2 66 0
  9. 5 1 11 1
  10. ;
  11. run;

  12. proc sort data= a; by sex; run;

  13. data matched;
  14.     merge a(where = (case=1))  
  15.           a(rename = (id=id1 age=age1  case=case1) where=(case1=0));
  16.         by sex;
  17.         if abs(age-age1) < 3;
  18. run;
复制代码

使用道具

7
泡泡~·馍 发表于 2014-6-23 15:34:34 |只看作者 |坛友微信交流群
请问这个问题有没有得到解决呢?
请指教

使用道具

8
pingguzh 发表于 2016-5-9 15:47:10 |只看作者 |坛友微信交流群
这个问题似乎没有最终最标准的抽样方法

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-20 01:28