Statistics 板


LINE

data survial;input date date10. response; format date date10. ; cards; 09AUG07 1 23AUG07 1 06SEP07 2 20SEP07 2 05OCT07 1 16OCT07 1 30OCT07 2 29NOV07 1 01JAN08 2 10JAN08 2 19JAN08 2 30JAN08 2 10JUN08 1 ; run; 在巨集中,indate是放原始資料,本例就是survial time就是日期變數,本例是date var就是判斷的變數,本例是response value2是欲觀察練續情形的值,本例是2 value1就是另外的值,本例是1 out就是最終的資料,本例是survial5 我除了試你的例子,還有再多加一些變化 目前是都可以正確跑出結果,你可以試試看你的data執行有沒有錯 應該還有更有效率的作法,只是目前還沒想到~~~ %macro search(indata=,time=,var=,value1=,value2=,out=); proc sort data=&indata. out=survial1;by descending &time.;run; data survial1;set survial1;r_right=lag(&var.); proc sort data=survial1;by &time.;run; data survial2;set &indata.;r_left=lag(&var.); data survial2;merge survial1 survial2;run; data survial3;set survial2(where=(&var.=&value2.)); data survial4;set survial3(where=( r_right ne r_left)); if r_right=. then r_right=&value1.;if r_left=. then r_left=&value2.;n+1; run; proc sql noprint;select max(n) into:m_n from survial4; data _null_;set survial4(where=(n=1)); if r_right=&value1. then call symput('start',2); if r_right=&value2. then call symput('start',1);run; data s;set _null_; %do i=&start. %to &m_n. %by 2; data s1_&i.;set survial4;if n=&i.; data s2_&i.;set survial4;if n=%eval(&i.+1); data s&i.;set s1_&i. s2_&i.; data _null_;set s&i.(where=(r_left=&value1.));call symput('date_start',&time.); data _null_;set s&i.(where=(r_left=&value2.));call symput('date_end',&time.); data s&i.;set s&i.;days=intck('day',&date_start.,&date_end.)+1;call symput('days',days); data s&i.;merge survial3 s&i.;by &time.;if r_left=&value1. & r_right=&value1. then delete; if &date_start. <= &time.<= &date_end.;if days=. then days=&days.; run; data s;set s s&i.;run; %end; proc sort data=s;by &time.; data &out.;merge &indata.(in=a) s(keep=&time. days);by &time.;if a;run; %mend; %search(indata=survial,time=date,var=response,value1=1,value2=2,out=survial5); --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.193.72.239 ※ 編輯: imaltar 來自: 123.193.72.239 (06/25 21:48) ※ 編輯: imaltar 來自: 123.193.72.239 (06/25 22:07) ※ 編輯: imaltar 來自: 123.193.72.239 (06/25 22:17)
1F:→ imaltar:不過日期有重複的話 就可能會有錯 如果有重複日期 06/25 22:18
2F:→ imaltar:那就要再想一下 06/25 22:19
※ 編輯: imaltar 來自: 123.193.72.239 (06/25 22:44) ※ 編輯: imaltar 來自: 123.193.72.239 (06/25 23:11)
3F:→ imaltar:真糟 一直改 不知道原PO有沒有看到>< 06/25 23:11
4F:推 tew:不要用巨集,這個可以簡單處理 06/26 02:43
5F:→ imaltar:更簡單的方式可能是不要用迴圈 我用具集的用意是像 06/26 09:01
6F:→ imaltar:indata我的例子是survival 原po的data名稱也許不一樣 06/26 09:02
7F:→ imaltar:我的time(日期名稱)是令為date 但原po的資料變數名會不同 06/26 09:03
8F:→ imaltar:所以巨集的用意是讓使用者可以根據他原始資料 資料名稱 06/26 09:03
9F:→ imaltar:變數名稱 去彈性輸入 而不用當資料不同時 還要一個個去改 06/26 09:04
10F:→ imaltar:當然能迴圈處理會比較省時 所以我說寫的不夠精簡就是在此 06/26 09:06
11F:→ imaltar:說錯 是迴圈比較費時 06/26 09:07
12F:→ ASD332:巨集跟迴圈... 應該是不一樣的東西吧 @@ 06/26 17:20
13F:→ imaltar:我沒說一樣阿.... 06/26 21:12
14F:→ ASD332:抱歉 眼殘漏看了 06/26 22:05







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP