作者MmmRrrrX (銀色的靈魂)
站內Statistics
標題Re: [問題] SAS設置dummy variable
時間Thu Dec 9 23:32:28 2010
※ 引述《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
推 ivan1215:太感謝你的回答了 我試試看^^ 12/09 23:44
推 lsshno1:順便請問一下, 程式第一段我如果使用這樣的指令可以嗎? 12/10 00:09
推 lsshno1:data a1; set yourdata; run; 接著對date sort. 12/10 00:11
→ lsshno1:之後就直接寫 data a1;set a1;temp=_n_;run; 12/10 00:12
→ lsshno1:因為我之前都用這種方式寫,不知道這樣對不對 12/10 00:12
→ MmmRrrrX:_n_是第幾筆資料,如果temp=_n_; temp會變成直的1234 12/10 00:21
→ MmmRrrrX:看你的敘述,我猜測同一個日期有好幾筆資料,要用虛擬變 12/10 00:22
→ MmmRrrrX:數區隔日期,所以相同的date對應到同一個temp 12/10 00:23
→ MmmRrrrX:轉換後temp像是111 222 333 ..... 這樣 12/10 00:25
推 ivan1215:我有試成功了 不過要先對 date 做prco sort的動作 12/10 00:42
→ ivan1215:再次謝謝M大 這問題苦惱了我好久 12/10 00:44