作者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
1F:推 ivan1215:太感谢你的回答了 我试试看^^ 12/09 23:44
2F:推 lsshno1:顺便请问一下, 程式第一段我如果使用这样的指令可以吗? 12/10 00:09
3F:推 lsshno1:data a1; set yourdata; run; 接着对date sort. 12/10 00:11
4F:→ lsshno1:之後就直接写 data a1;set a1;temp=_n_;run; 12/10 00:12
5F:→ lsshno1:因为我之前都用这种方式写,不知道这样对不对 12/10 00:12
6F:→ MmmRrrrX:_n_是第几笔资料,如果temp=_n_; temp会变成直的1234 12/10 00:21
7F:→ MmmRrrrX:看你的叙述,我猜测同一个日期有好几笔资料,要用虚拟变 12/10 00:22
8F:→ MmmRrrrX:数区隔日期,所以相同的date对应到同一个temp 12/10 00:23
9F:→ MmmRrrrX:转换後temp像是111 222 333 ..... 这样 12/10 00:25
10F:推 ivan1215:我有试成功了 不过要先对 date 做prco sort的动作 12/10 00:42
11F:→ ivan1215:再次谢谢M大 这问题苦恼了我好久 12/10 00:44