Re: [問題] SAS設置dummy variable

看板Statistics作者 (銀色的靈魂)時間14年前 (2010/12/09 23:32), 編輯推噓4(407)
留言11則, 3人參與, 最新討論串2/3 (看更多)
※ 引述《ivan1215 (米糕)》之銘言: : 各位前輩好 : 我現在遇到設置dummy variable 的問題 : 因為我的data 內總共有一百多萬筆資料 實際天數約2000天 公司有八百多家 : 我現在要依照日期來設至dummy variable : if date=20010102 then d1=1 ;else d1=0; : if date=20010103 then d2=1 ;else d2=0; : ...... : ...... : ...... : if date=20091231 then d1989=1 ;else d1989=0; : 不知道有沒有辦法將這將近兩千條式子縮短 : 希望各位前輩可以幫幫忙 感謝<(_ _)> 比較大的問題在於日期非連續的數字 /*先做另一個表,把日期改成1234....排序*/ data a1; set yourdata; by date; if _n_=1 then temp=0; retain temp; if first.date then temp=temp+1; run; /* 接下來就可以用迴圈處理 */ %macro aa; data a2; set a1; %do i=1 %to 1989 ; if temp=&i then d&i=1 ; else d&i=0; %end; drop temp; run; %mend; %aa; 當然這樣寫還不夠完美,畢竟 d1989 這部份要自己看總共幾天手動給定 不過至少應該可以省掉很多時間了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.172.224.179

12/09 23:44, , 1F
太感謝你的回答了 我試試看^^
12/09 23:44, 1F

12/10 00:09, , 2F
順便請問一下, 程式第一段我如果使用這樣的指令可以嗎?
12/10 00:09, 2F

12/10 00:11, , 3F
data a1; set yourdata; run; 接著對date sort.
12/10 00:11, 3F

12/10 00:12, , 4F
之後就直接寫 data a1;set a1;temp=_n_;run;
12/10 00:12, 4F

12/10 00:12, , 5F
因為我之前都用這種方式寫,不知道這樣對不對
12/10 00:12, 5F

12/10 00:21, , 6F
_n_是第幾筆資料,如果temp=_n_; temp會變成直的1234
12/10 00:21, 6F

12/10 00:22, , 7F
看你的敘述,我猜測同一個日期有好幾筆資料,要用虛擬變
12/10 00:22, 7F

12/10 00:23, , 8F
數區隔日期,所以相同的date對應到同一個temp
12/10 00:23, 8F

12/10 00:25, , 9F
轉換後temp像是111 222 333 ..... 這樣
12/10 00:25, 9F

12/10 00:42, , 10F
我有試成功了 不過要先對 date 做prco sort的動作
12/10 00:42, 10F

12/10 00:44, , 11F
再次謝謝M大 這問題苦惱了我好久
12/10 00:44, 11F
文章代碼(AID): #1D0FQGi6 (Statistics)
文章代碼(AID): #1D0FQGi6 (Statistics)