由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Statistics版 - 跪问一个data management的问题
相关主题
sas lag1() 古怪现象请教(小包子)How to use Proc format
弱问一个SAS 里data managerment的问题Master paper 建议
sas help!!问个PROC MIXED问题
How to calculate a weight for each observation in a sas datas et?求助:有用过sas proc mixed里面repeated statement的吗?
急 SAS问题请教:SAS处理Longitudinal data 的问题
发包子求助SAS codeSAS问题求助
一个sas问题请教sas code : how to calculate average follow-up time
longitudinal的data,一般都用什么方法分析?functional data/fMRI 这个方向如何?
相关话题的讨论汇总
话题: date话题: data话题: 21话题: 2002话题: 2000
进入Statistics版参与讨论
1 (共1页)
m***a
发帖数: 1175
1
我有一堆longitudinal的数据,每个id 出现不止一次, 这些id有个指标数据A, 和指
标数据B, 指标数据A每几个月,或一年或者两年采到 , 指标数据B每3 4年采到一次
,我现在要取和采指标数据B最近的一次的指标数据A,请问怎么取? 这俩数据采集时
的date可以相减得到time interval,但是id是longitudinal的,所以需要取每个id每
一次采样B时的最小的time interval的数据,跪求指点,给个方向。
没学过正真的data management,搞不定,不知道从那个方向查起。介绍本书也行啊 谢
谢啦。。。。
m***a
发帖数: 1175
2
我只会SAS,不过你要跟我说需要别的语言解决,我就学习别的。哭。。。。。。。。
g******2
发帖数: 234
3
Not familiar with SAS, but hope this helps:
1. organize your data to the following format:
ID, Date_B, B, A, time_difference
where time_difference is the absolute value of the Date_A - Date_B
2. obtain a min_difference table
ID, Date_B, min_time_difference
3. Join the two tables and only select the rows with time_difference == min_
time_difference.
m***a
发帖数: 1175
4
谢谢你的思路,很不错,我第二步上有点搞不定,正在尝试。我的难处就是id 是有
repeat B,我转换成横向数据,倒是可以弄 然后再merge以下就行,感觉应该有好办法
解决这问题。不过我笨到忘记absolute value。。。。

min_

【在 g******2 的大作中提到】
: Not familiar with SAS, but hope this helps:
: 1. organize your data to the following format:
: ID, Date_B, B, A, time_difference
: where time_difference is the absolute value of the Date_A - Date_B
: 2. obtain a min_difference table
: ID, Date_B, min_time_difference
: 3. Join the two tables and only select the rows with time_difference == min_
: time_difference.

k*******a
发帖数: 772
5
用sql应该比较容易
你给个sample data
C******t
发帖数: 72
6
大概可以这样:
data Test;
input id ATime BTime;
dataline;
.....;
proc sql;
create table Intermediate as
select a.id, a.Btime, b.Atime, a.Btime-b.Atime as TimeDiff
from Test a
left outer join Test b
on a.id=b.id and a.Btime>=b.Atime
order by a.id, a.Btime, calculated TimeDiff;
quit;
data Final;
set Intermediate;
by id Btime TimeDiff;
if first.Btime then output;
run;
m***a
发帖数: 1175
7
大师 我来了,刚才上课去了。
两个data set
data A
id A_date A_value
1 9/20/2000 35
1 8/21/2001 34
1 7/22/2002 38
1 2/13/2003 34
1 12/23/2003 35
1 5/25/2005 37
2 3/31/2000 35
2 4/25/2001 38
2 5/23/2002 40
2 12/21/2002 44
2 8/28/2003 50
2 9/21/2004 56
data B
id B_date B_value
1 8/21/2000 100
1 12/21/2002 120
1 6/19/2005 125
2 2/21/2000 120
2 5/26/2002 130
2 12/25/2005 115
merge A B 后得到C
Data C 应该是这样的
id B_date B_value A_date(离B_date最近的时间) A_value(离B_date最近
的时间的值)
1 8/21/2000 100 9/20/2000 35
1 12/21/2002 120 2/13/2003 34
1 6/19/2005 125 5/25/2005 37
2 2/21/2000 120 3/31/2000 35
2 5/26/2002 130 5/23/2002 40
2 12/25/2005 115 9/21/2004 56

【在 k*******a 的大作中提到】
: 用sql应该比较容易
: 你给个sample data

m***a
发帖数: 1175
8
大师 给个sample,能否调节下你的code,我觉得该是proc sql 只是不太用,不熟悉。
两个data set
data A
id A_date A_value
1 9/20/2000 35
1 8/21/2001 34
1 7/22/2002 38
1 2/13/2003 34
1 12/23/2003 35
1 5/25/2005 37
2 3/31/2000 35
2 4/25/2001 38
2 5/23/2002 40
2 12/21/2002 44
2 8/28/2003 50
2 9/21/2004 56
data B
id B_date B_value
1 8/21/2000 100
1 12/21/2002 120
1 6/19/2005 125
2 2/21/2000 120
2 5/26/2002 130
2 12/25/2005 115
merge A B 后得到C
Data C 应该是这样的
id B_date B_value A_date(离B_date最近的时间) A_value(离B_date最近
的时间的值)
1 8/21/2000 100 9/20/2000 35
1 12/21/2002 120 2/13/2003 34
1 6/19/2005 125 5/25/2005 37
2 2/21/2000 120 3/31/2000 35
2 5/26/2002 130 5/23/2002 40
2 12/25/2005 115 9/21/2004 56

【在 C******t 的大作中提到】
: 大概可以这样:
: data Test;
: input id ATime BTime;
: dataline;
: .....;
: proc sql;
: create table Intermediate as
: select a.id, a.Btime, b.Atime, a.Btime-b.Atime as TimeDiff
: from Test a
: left outer join Test b

k*******a
发帖数: 772
9
proc sql;
select B.*, A.A_Date, A.A_value, abs(B_Date-A_Date) as dif,
min(calculated dif) as mindif
from A, B
where A.id = B.id
group by B.id, B_Date
having calculated dif = calculated mindif
;
quit;

【在 m***a 的大作中提到】
: 大师 给个sample,能否调节下你的code,我觉得该是proc sql 只是不太用,不熟悉。
: 两个data set
: data A
: id A_date A_value
: 1 9/20/2000 35
: 1 8/21/2001 34
: 1 7/22/2002 38
: 1 2/13/2003 34
: 1 12/23/2003 35
: 1 5/25/2005 37

m***a
发帖数: 1175
10
啊 可以这样,我就知道有功能的,谢谢 Kirklanda 大师, 回头拿本proc sql好好练
练,谢谢啦,稍后收包子。

【在 k*******a 的大作中提到】
: proc sql;
: select B.*, A.A_Date, A.A_value, abs(B_Date-A_Date) as dif,
: min(calculated dif) as mindif
: from A, B
: where A.id = B.id
: group by B.id, B_Date
: having calculated dif = calculated mindif
: ;
: quit;

w*******n
发帖数: 469
11
Good coding!

【在 k*******a 的大作中提到】
: proc sql;
: select B.*, A.A_Date, A.A_value, abs(B_Date-A_Date) as dif,
: min(calculated dif) as mindif
: from A, B
: where A.id = B.id
: group by B.id, B_Date
: having calculated dif = calculated mindif
: ;
: quit;

m***a
发帖数: 1175
12
谢了 吃包子

【在 C******t 的大作中提到】
: 大概可以这样:
: data Test;
: input id ATime BTime;
: dataline;
: .....;
: proc sql;
: create table Intermediate as
: select a.id, a.Btime, b.Atime, a.Btime-b.Atime as TimeDiff
: from Test a
: left outer join Test b

1 (共1页)
进入Statistics版参与讨论
相关主题
functional data/fMRI 这个方向如何?急 SAS问题
当今统计界研究longitudinal data analysis的大牛有哪些?发包子求助SAS code
How to find the data一个sas问题
请教 Longitudinal Datalongitudinal的data,一般都用什么方法分析?
sas lag1() 古怪现象请教(小包子)How to use Proc format
弱问一个SAS 里data managerment的问题Master paper 建议
sas help!!问个PROC MIXED问题
How to calculate a weight for each observation in a sas datas et?求助:有用过sas proc mixed里面repeated statement的吗?
相关话题的讨论汇总
话题: date话题: data话题: 21话题: 2002话题: 2000