楼主: h52101019
2517 7

dummy variable问题 [推广有奖]

  • 0关注
  • 0粉丝

大专生

5%

还不是VIP/贵宾

-

威望
0
论坛币
2 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
166 点
帖子
27
精华
0
在线时间
46 小时
注册时间
2009-9-30
最后登录
2019-2-1

楼主
h52101019 发表于 2014-10-28 15:29:11 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
数据:
obs no.idtypevar

1

1

1

0

2

1

1

0

3

1

1

1

4

1

2

1

5

1

2

1

6

1

1

1

7

1

1

1

8

1

1

1

9

2

1

0

         10

2

1

1

         11

2

2

1

         12

2

2

1

         13

2

2

1


以'id'为一个群组,要建一个dummy variable 'var' 。每个id的第一个var的值永远是0。而当type的数值一改变,var会从0变成1,直到这个group结束。而且,type数值改变的前一个obs的var也得变成1。比如说,obs 3和obs 10的var是1。求大神们写下SAS code!急用!非常感谢!


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Variable Dummy ABLE ABL VaR 而且

回帖推荐

jingju11 发表于7楼  查看完整内容

is it working? JingJu

sniperhgy 发表于3楼  查看完整内容

楼主你好,看楼主的数据,貌似id是排过序的? 请试试如下代码:

wwang111 发表于2楼  查看完整内容

data var; set test; retain var; type1=lag(type); if id ne lag(id) then var=0; else if type ne type1 then var=1; drop type1; run; proc sql noprint; select min(obs)-1 into: obs separated by ',' from var where var=1 group by id; quit; data wanted; set var; if obs in (&obs) then var=1; run;

本帖被以下文库推荐

沙发
wwang111 发表于 2014-10-28 16:34:40
data var;
  set test;
  retain var;
  type1=lag(type);
  if id ne lag(id) then var=0;
  else if type ne type1 then var=1;
  drop type1;
run;

proc sql noprint;
select min(obs)-1 into: obs separated by ','
from var
where var=1
group by id;
quit;

data wanted;
set var;
if obs in (&obs) then var=1;
run;

藤椅
sniperhgy 发表于 2014-10-28 17:28:14
楼主你好,看楼主的数据,貌似id是排过序的? 请试试如下代码:
  1. data test;
  2.   input id type;
  3.   cards;
  4. 1 1
  5. 1 1
  6. 1 1
  7. 1 2
  8. 1 2
  9. 1 1
  10. 1 1
  11. 1 1
  12. 2 1
  13. 2 1
  14. 2 2
  15. 2 2
  16. 2 2
  17. ;
  18. run;

  19. data tmp;
  20.   format prior_id $200.;
  21.   set test end = eof;
  22.   by id;
  23.   retain var prior_id "0";
  24.   prior_type = lag(type);
  25.   
  26.   if first.id then do;
  27.     var = 0;
  28.   end;
  29.   else if (type ne prior_type) then do;
  30.     var = 1;
  31.         put prior_id;
  32.     prior_id = strip(prior_id) || strip(",") || strip(_N_ - 1);
  33.   end;

  34.   if eof then
  35.     call symput("prior_id", prior_id);
  36.   drop prior_id prior_type;
  37. run;

  38. data wanted;
  39.   set tmp;
  40.   if _N_ in (&prior_id.) then
  41.     var = 1;
  42. run;
复制代码

板凳
h52101019 发表于 2014-10-28 23:08:16
wwang111 发表于 2014-10-28 16:34
data var;
  set test;
  retain var;
感谢!感谢!感谢!

报纸
h52101019 发表于 2014-10-28 23:12:20
sniperhgy 发表于 2014-10-28 17:28
楼主你好,看楼主的数据,貌似id是排过序的? 请试试如下代码:
感谢大神回复!太感谢了!

地板
sniperhgy 发表于 2014-10-29 10:01:50
h52101019 发表于 2014-10-28 23:12
感谢大神回复!太感谢了!
楼主不用客气,欢迎一起讨论问题。o(∩_∩)o

7
jingju11 发表于 2014-10-29 11:31:41
is it working? JingJu
  1. data; drop n;
  2.         set test;
  3.         by id type notsorted;
  4.         retain var;  
  5.         if first.id     then n =0;
  6.         if first.type then n ++1;  
  7.         if first.type then if n =1 then var =0;
  8.         if  last.type then if n =1 then if not last.id then var =1;
  9. run;
复制代码
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
Eternal0601 + 3 + 3 + 3 精彩帖子
Tigflanker + 5 + 3 + 3 + 3 观点有启发

总评分: 论坛币 + 5  学术水平 + 6  热心指数 + 6  信用等级 + 6   查看全部评分

8
jingju11 发表于 2014-11-5 06:43:44
sniperhgy 发表于 2014-10-28 17:28
楼主你好,看楼主的数据,貌似id是排过序的? 请试试如下代码:
红变量是有长度限制的。 京剧

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-25 03:33