作者ya1357977889 (HSciverce)
看板Statistics
标题[程式] SAS 用merge 做 match
时间Tue Jun 2 21:30:07 2015
[软体程式类别]:
SAS (9.3)
[程式问题]:
用merge 做配对(年龄)
[软体熟悉度]:
低(1~3个月)
[问题叙述]
恩~~基本上就是做match 知道可以用macro 或sql来做,
但是强者老师觉得我们程度还不高,要求我们用merge来做
且SQL MACRO目前真的还有点摸不懂
例子像这样
在1999/1/1 有A病的人有5笔
start_date age477
1991/1/1 43
1991/1/1 32
1991/1/1 44
1991/1/1 27
1991/1/1 50
在1991/1/1 没A病的人有10笔
start_date agen477
1991/1/1 42
1991/1/1 45
1991/1/1 39
1991/1/1 49
1991/1/1 40
1991/1/1 34
1991/1/1 46
1991/1/1 27
1991/1/1 54
1991/1/1 33
要做出有A病的人 对到一个没病的人 且年龄差最小
像这样
start_date age477 agen477
1991/1/1 43 42
1991/1/1 32 33
1991/1/1 44 45
1991/1/1 27 27
1991/1/1 50 49
[程式范例]:
libname c "G:\sas\icd";
libname a "G:\sas\icd";
proc sort data=c.all477; by start_date;
proc sort data=c.no477; by start_date;
run;
data a.ok477;
merge c.all477 c.no477;
by start_date;
run;
这个跑出来长这样
start_date age477 agen477
1991/1/1 43 42
1991/1/1 32 45
1991/1/1 44 39
1991/1/1 27 49
1991/1/1 50 40
1991/1/1 50 34
1991/1/1 50 46
1991/1/1 50 27
1991/1/1 50 54
1991/1/1 50 33
有版友可以指导一下 怎麽产生理想的资料呢O__Oa
-----------------------------------------------------------------------------
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.135.246.73
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Statistics/M.1433251812.A.465.html
2F:→ imaltar: 其实用GOOGLE 应该可以找到一些可用的语法 06/02 22:04
3F:推 Jarlan: 先排序两笔资料,给个ID再串? 06/02 22:05
4F:→ MOONY135: 同年龄要怎样处理 老师有说吗 06/03 00:42
5F:→ MOONY135: if else可以用? 06/03 00:47
6F:→ ya1357977889: if eles 可以 因为年龄取到小数点後 真的一样取其 06/03 11:31
7F:→ ya1357977889: 中一笔 现在在看一楼大给的里面有没有可以用的语法 06/03 11:31
8F:→ MOONY135: 可以看一下我的语法 06/03 16:18
9F:→ MOONY135: merge多对多不好用 我也想知道多对多怎样写 06/03 16:19