看板 Statistics 關於我們 聯絡資訊
※ 引述《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
xdreamer:謝謝 socery 的幫忙 10/13 08:47