作者imaltar (..)
看板Statistics
标题Re: [程式] SAS 时间区间分组问题
时间Fri Oct 21 20:16:17 2016
※ 引述《elvics ()》之铭言:
: [程式] SAS
: [软体程式类别]: SAS
:
: [程式问题]:
: 资料处理
: [软体熟悉度]:
: 新手逐渐熟悉中
: [问题叙述]:
: 想要将同一ID的人,将其开药时间区间,进行编组。
: 两次开药时间,则是将此次开始起使日,减上次开药结束日;
: 如<=120天,视为同一组;>120天者,则是给予新的编号。
: 希望能够呈现如Group此变项分组。
: 资料如下:
: ID 开药起始日 开药结束日 该次开药天数 两次开药时间差距) Group
: (Drug_start) (Drug_end) (Drug_day) (Dif_Days)
: AAA 20080605 20080618 14 1 1
: AAA 20100311 20100317 7 631 2
: AAA 20100318 20100331 14 1 2
: AAA 20110616 20110713 28 442 3
: AAA 20111124 20111221 28 134 4
: AAA 20121115 20121212 28 330 5
: AAA 20121207 20130103 28 -5 5
: AAA 20130110 20130206 28 7 5
: AAA 20130418 20130515 28 71 5
: AAA 20130530 20130626 28 15 5
: AAA 20130706 20130802 28 10 5
: AAA 20130727 20130823 28 -6 5
: [程式范例]:
:
: DATA Final;
: SET data;
: by ID Drug_start
: if first.ID then group=1;
: if Dif_Days<=120 then group=1;
: else group+1;
: run;
:
: 这个程式,一直无法顺利分组如grpup所示,请各位提供指点。
data a;
input ID $ Dif_Days;
cards;
AAA 1
AAA 631
AAA 1
AAA 442
AAA 134
AAA 330
AAA -5
AAA 7
AAA 71
AAA 15
AAA 10
AAA -6
BBB 130
BBB 2
BBB 1
BBB 150
BBB 160
BBB 7
BBB 5
BBB -3
BBB 169
BBB 200
BBB 3
;
run;
data b;set a;by id;
retain Group;
if first.id then do;
if Dif_Days>120 then do;
Group=0;
end;
else do;
Group=1;
end;
end;
if Dif_Days>120 then do;Group=Group+1;end;
run;
参考看看~~~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.225.109.218
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Statistics/M.1477052180.A.D4B.html