作者socery (keep going!)
看板Statistics
标题Re: [程式] SAS 同栏位相减的问题
时间Tue Oct 12 04:11:30 2010
※ 引述《xdreamer (going on)》之铭言:
: [软体程式类别]:SAS
: [程式问题]: 同栏位相减
: [软体熟悉度]: 低
: 新手(不到1个月)
: 低(1~3个月)
: 中(3个月到1年)
: 高(1年以上)
: [问题叙述]:
: 各位好
: 目前遇到了一个SAS的问题
: 由於是初学SAS没有很久的学生
: 想请各位给予指导
: 例如有笔资料的型态如下:
: ID date bio
: 1 1995/ 5/3 43
: 1 1995/ 6/9 0
: 1 1996/ 3/7 50
: 1 1997/ 4/2 0
: 1 1997/ 4/7 49
: 2 1995/10/3 0
: 2 1995/10/9 20
: 2 1995/10/17 40
: 3 1997/ 4/2 10
: 3 1998/ 5/3 0
: 3 1999/ 6/9 70
: 3 1999/10/7 50
: 4 1994/11/13 60
: 4 1995/ 4/2 0
: 4 1996/ 8/7 49
: 4 1997/ 8/7 80
: 4 1999/ 8/9 42
: 资料已先依 ID 及 date 排序
: 现在想找出 bio=0 的最大日期为基准日
: 算出期後的日期差(天数)
: EX:
: ID date bio
: 1 1995/ 5/3 43
: 1 1995/ 6/9 0
: 1 1996/ 3/7 50
: 1 1997/ 4/2 0 <===以这天为基准,算出下一笔资料与这天的差(天数)
: 1 1997/ 4/7 49 差五天
: 2 1995/10/3 0 <===以这天为基准
: 2 1995/10/9 20 差六天
: 2 1995/10/17 40 差14天
: 所以希望的输出形式为
: ID d_1_day d_2_day (只求与基准日期两次的差而已)
: 1 5
: 2 6 14
: ...
: ...
: 以此类推
: 目前还没学到同一栏位上下两笔资料相减的指令(有这样的指令吗?)
: 还要以另一栏位的值,来判断另一栏位的最大值,这就让我想了五天之久,
: 一笔资料就在那边无法动弹,想请各位给予指导,以便後续的分析进行,
: 非常谢谢大家。
: ----------------------------------------------------------------------------
data a0;set a;start=input(date,yymmdd10.);proc sort;by id start;run;
data a1;set a0;if bio=0;tn=1;proc sort;by id descending start;
proc sort nodupkey;by id;run;
data a2;merge a0(in=a)a1(in=b);by id start;if a=1;proc sort;by id start;run;
data a3;set a2;by id start;
if tn=1 then do;qn=tn-1;retain qn;date1=date;retain date1;end;
if first.id and tn=. then qn=.;
if tn=. and qn=0 then do;
tn=qn;bet=input(date,yymmdd10.)-input(date1,yymmdd10.);output;end;
drop qn;run;
proc transpose data=a3 out=a4 prefix=v;
by id;
var bet;
run;
data a4;set a4;keep id v1 v2;rename v1=d_1_day;rename v2=d_2_day;run;
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.167.137.35
1F:→ xdreamer:谢谢 socery 的帮忙 10/13 08:47