*SQL,获取 ID 的历史状态
sas系统的表tb存储病人的医疗历史记录,当Visit_code=Surgery时表示手术,Visit_code=Office表示咨询,每个病人有多条Visit_code,有时只有Surgery或只有Office:
Id |
Visit_Date |
Visit_code |
A30 |
5/15/2004 |
Surgery |
A30 |
2/5/2005 |
Office |
B01 |
12/7/2002 |
Office |
B01 |
11/21/2002 |
Surgery |
C01 |
12/1/2001 |
Office |
C01 |
11/1/2001 |
Office |
C01 |
5/15/2001 |
Surgery |
C01 |
4/15/2001 |
Surgery |
C02 |
12/1/2001 |
Surgery |
C03 |
12/1/2001 |
Office |
要求计算出每个病人的历史状态,如果有过咨询,则 Office_Visit=1,否则为 0;如果手术后 6 个月内进行过咨询,则 SX_past_6mo=1,否则为 0:
Id |
Office_Visit |
SX_past_6mo |
A30 |
1 |
0 |
B01 |
1 |
1 |
C01 |
1 |
1 |
C02 |
0 |
0 |
C03 |
1 |
0 |
编写SPL代码:
A |
|
1 |
=sas1.query("select * from tb order by Id,Visit_Date") |
2 |
=A1.group(Id) |
A1:通过JDBC从 sas 表取数,按Visit_code,Visit_Date 的顺序排序。
A2:按 Id 分组,根据分组新建二维表。~ 表示当前组,Visit_code[-1] 表示上一条记录的 Visit_code 字段,interval@m 用于求月份的间隔。
英文版 https://c.scudata.com/article/1723426024506