由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Statistics版 - 问个sas问题(包子)
相关主题
一个很疑惑的SAS日期问题Stupid SAS programming style is driving me crazy....
sas help!!刚才的sas programmer面试问题
问SAS code怎么写SAS Help
急问SAS code 求助
[合集] 有人有USC生统/统计遗传学的申请消息吗?不知道我这个是sas question ( you bao zi )
SAS里关于recode一问问个问题sas proc sort
请帮忙看3道SAS题。How to Macro it in SAS?
问个比较具体的算法问题请教一个SAS问题
相关话题的讨论汇总
话题: date话题: 1977话题: 001话题: event话题: admission
进入Statistics版参与讨论
1 (共1页)
h******s
发帖数: 3420
1
有两个文件
file1 按 id 和 date 列出病人的event
Id. Event_date
001. 02/11/1977
001. 03/08/1977
001. 07/11/1978
001. 02/05/1979
002. 04/06/1977
002. 03/09/1978
002. 04/11/1978
..........
File2 按id和date 列出病人的admission date
Id. Admission_date
001. 02/11/1977
001. 07/11/1978
002. 04/06/1977
......
请问怎样从file2 中找到file1 event 对应的admission date?
希望输出为:
Id. Event_date. Admission_date
001. 02/11/1977. 02/11/1977
001. 03/08/1977. 02/11/1977
001. 07/11/1978. 07/11/1978
001. 02/05/1979. 07/11/1978
002. 04/06/1977. 04/06/1977
002. 03/09/1978. 04/06/1977
002. 04/11/1978. 04/06/1977
万分感谢!
h********o
发帖数: 103
2
Try this:
====================================
PROC SQL;
CREATE TABLE FINAL AS
SELECT A.ID,
A.EVENT_DATE,
B.ADMISSION_DATE
FROM FILE1 AS A LEFT JOIN FILE2 AS B
ON A.ID = B.ID AND A.EVENT_DATE >= B.ADMISSION_DATE
ORDER BY ID, EVENT_DATE, ADMISSION_DATE DESC;
QUIT;
PROC SORT DATA = FINAL NODUPKEY;
BY ID EVENT_DATE;
RUN;
h******s
发帖数: 3420
3
谢谢
我后来想出来也是这个思路,不过你的code 好多了
两包子

【在 h********o 的大作中提到】
: Try this:
: ====================================
: PROC SQL;
: CREATE TABLE FINAL AS
: SELECT A.ID,
: A.EVENT_DATE,
: B.ADMISSION_DATE
: FROM FILE1 AS A LEFT JOIN FILE2 AS B
: ON A.ID = B.ID AND A.EVENT_DATE >= B.ADMISSION_DATE
: ORDER BY ID, EVENT_DATE, ADMISSION_DATE DESC;

s******r
发帖数: 1524
4
You can do with sql in one step, why use sort.
PROC SQL;
CREATE TABLE FINAL AS
SELECT A.ID,
A.EVENT_DATE format=mmddyy8.,
max(B.ADMISSION_DATE) format=mmddyy8. as max_admiss
FROM FILE1 AS A LEFT JOIN FILE2 AS B
ON A.ID = B.ID AND A.EVENT_DATE >= B.ADMISSION_DATE
group by a.id,a.event_date
ORDER BY ID, EVENT_DATE;
QUIT;

【在 h********o 的大作中提到】
: Try this:
: ====================================
: PROC SQL;
: CREATE TABLE FINAL AS
: SELECT A.ID,
: A.EVENT_DATE,
: B.ADMISSION_DATE
: FROM FILE1 AS A LEFT JOIN FILE2 AS B
: ON A.ID = B.ID AND A.EVENT_DATE >= B.ADMISSION_DATE
: ORDER BY ID, EVENT_DATE, ADMISSION_DATE DESC;

h********o
发帖数: 103
5
Run your code to see if you can get what he want.
Also you need to change the name of "max_admiss " back to "admission_date"
finally.
h********o
发帖数: 103
6
PROC SQL;
CREATE TABLE FINAL AS
SELECT A.ID,
A.EVENT_DATE FORMAT = MMDDYY10.,
CASE
WHEN MAX(B.ADMISSION_DATE) THEN MAX(B.ADMISSION_DATE)
END AS ADMISSION_DATE FORMAT = MMDDYY10.
FROM FILE1 AS A LEFT JOIN FILE2 AS B
ON A.ID = B.ID AND A.EVENT_DATE >= B.ADMISSION_DATE
GROUP BY A.ID, A.EVENT_DATE
ORDER BY ID, EVENT_DATE;
QUIT;
s******r
发帖数: 1524
7
it works. variable name is just a name

【在 h********o 的大作中提到】
: Run your code to see if you can get what he want.
: Also you need to change the name of "max_admiss " back to "admission_date"
: finally.

z******1
发帖数: 9
8
是不是用merge就行了?
data d3;
merge d1 d2;
by id;
run;
p********r
发帖数: 1465
9
觉得left join可以做
n**m
发帖数: 156
10
这一段我知道做了啥,不过不太明白这些code,能不能解释一下。谢谢
CASE
WHEN MAX(B.ADMISSION_DATE) THEN MAX(B.ADMISSION_DATE)
END AS ADMISSION_DATE FORMAT = MMDDYY10.

【在 h********o 的大作中提到】
: PROC SQL;
: CREATE TABLE FINAL AS
: SELECT A.ID,
: A.EVENT_DATE FORMAT = MMDDYY10.,
: CASE
: WHEN MAX(B.ADMISSION_DATE) THEN MAX(B.ADMISSION_DATE)
: END AS ADMISSION_DATE FORMAT = MMDDYY10.
: FROM FILE1 AS A LEFT JOIN FILE2 AS B
: ON A.ID = B.ID AND A.EVENT_DATE >= B.ADMISSION_DATE
: GROUP BY A.ID, A.EVENT_DATE

f*****k
发帖数: 110
11
I guess the effect of the CASE statement is equivalent to huaifans' code --
max(B.ADMISSION_DATE) format=mmddyy8. as max_admiss. But I am not sure why
using CASE statement here. In addition, why use LEFT JOIN? I tried JOIN only
and it worked.

【在 n**m 的大作中提到】
: 这一段我知道做了啥,不过不太明白这些code,能不能解释一下。谢谢
: CASE
: WHEN MAX(B.ADMISSION_DATE) THEN MAX(B.ADMISSION_DATE)
: END AS ADMISSION_DATE FORMAT = MMDDYY10.

l******n
发帖数: 9344
12
有event才有ad date吧

【在 f*****k 的大作中提到】
: I guess the effect of the CASE statement is equivalent to huaifans' code --
: max(B.ADMISSION_DATE) format=mmddyy8. as max_admiss. But I am not sure why
: using CASE statement here. In addition, why use LEFT JOIN? I tried JOIN only
: and it worked.

1 (共1页)
进入Statistics版参与讨论
相关主题
请教一个SAS问题[合集] 有人有USC生统/统计遗传学的申请消息吗?不知道我这个是
求助~ 这个sas code该怎么写!SAS里关于recode一问
help:data manipulation请帮忙看3道SAS题。
SAS 编程问题 (有包子)问个比较具体的算法问题
一个很疑惑的SAS日期问题Stupid SAS programming style is driving me crazy....
sas help!!刚才的sas programmer面试问题
问SAS code怎么写SAS Help
急问SAS code 求助
相关话题的讨论汇总
话题: date话题: 1977话题: 001话题: event话题: admission