马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
- 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)
.new(Id,(S=0,~.max( if( Visit_code=="Office", if( S==0 && Visit_code[-1]=="Surgery" && interval@m(Visit_Date[-1],Visit_Date)<=6,S=1,1),0))):Office_Visit, S: SX_past_6mo) | A1:通过JDBC从 sas 表取数,按Visit_code,Visit_Date 的次序排序。
A2:按 Id 分组,根据分组新建二维表。~ 表现当前组,Visit_code[-1] 表现上一条记载的 Visit_code 字段,interval@m 用于求月份的隔断。
SPL开源所在
|