楼主: funwin
2224 7

[原创博文] 请教高手,如何增加识别变量? [推广有奖]

  • 0关注
  • 2粉丝

硕士生

85%

还不是VIP/贵宾

-

威望
0
论坛币
177 个
通用积分
0
学术水平
0 点
热心指数
4 点
信用等级
0 点
经验
2256 点
帖子
192
精华
0
在线时间
131 小时
注册时间
2007-11-7
最后登录
2016-1-22

楼主
funwin 发表于 2010-3-25 10:42:17 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请教高手,如何增加识别变量?
想新增一个变量id:认别某公司是否在前一期存在,如果前一个月存在就设为1,不存在就设为0
如下表:

date
company

200601
1001

200601
1009

200602
1001

200602
1009

200602
1010

200602
1080

200603
1002

200603
1008

200603
1009

200603
1010

200603
1020

200603
1040

200604
1001

200604
1008

200604
1020





想增加id来识别:
date
company
id
200601
1001
0
200601
1009
0
200602
1001
1
200602
1009
1
200602
1010
0
200602
1080
0
200603
1002
0
200603
1009
1
200603
1010
1
200603
1020
0
200604
1001
0
200604
1008
0
200604
1020
1
….
….
….

望高手指点一下!
二维码

扫码加我 拉你入群

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

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

关键词:请教高手 company compan date comp 如何

回帖推荐

frackdeng 发表于6楼  查看完整内容

看看这个怎么样

本帖被以下文库推荐

沙发
jingju11 发表于 2010-3-25 11:09:54
我的错了,没有看到是前一个月的重复值。

藤椅
frackdeng 发表于 2010-3-25 11:43:38
  1. data yourdset;
  2.     input date $ company $;
  3.         datalines;
  4.         200601 1001
  5.         200601 1009
  6.         200602 1001
  7.         200602 1009
  8.         200602 1010
  9.         200603 1080
  10.         200603 1002
  11.         200603 1009
  12.         200603 1010
  13.         200603 1020
  14.         200603 1040
  15.         200604 1001
  16.         200604 1008
  17.         200604 1020
  18.         ;
  19. run;

  20. proc sort data=yourdset;
  21.     by company date;
  22. run;

  23. data a;
  24.     set yourdset;
  25.         by company;
  26.         date_=lag(date);
  27.         if first.company=0 and input(date,8.)-input(date_,8.)=1 then id=1;
  28.         else id=0;
  29. run;
复制代码
已有 1 人评分经验 论坛币 学术水平 热心指数 收起 理由
crackman + 20 + 100 + 1 + 1 精彩帖子

总评分: 经验 + 20  论坛币 + 100  学术水平 + 1  热心指数 + 1   查看全部评分

板凳
funwin 发表于 2010-3-25 11:45:15
非常感谢楼上的code ,但是 好像不对,没能识别出来。
原数据可以用这个
data aa;
  input date company;
  datalines;
200601 1001
200601 1009
200602 1001
200602 1009
200602 1010
200602 1080
200603 1002
200603 1009
200603 1010
200603 1020
200604 1001
200604 1008
200604 1020
;
run;
因为数据很大,只是摘了部分。楼上的code是否考虑了跨年的问题,比如次年1月的公司,要看它是否在前一年的12月就存在。还有,识别的id,只是看某公司是否在上一个月存在,而不是看它是否在以前存在。
希望 再指教!

报纸
horace_chen 发表于 2010-3-25 12:52:44
  1. data a;
  2. input date  company ;
  3. datalines;
  4. 200601 1001
  5. 200601 1009
  6. 200602 1001
  7. 200602 1009
  8. 200602 1010
  9. 200602 1080
  10. 200603 1002
  11. 200603 1008
  12. 200603 1009
  13. 200603 1010
  14. 200603 1020
  15. 200603 1040
  16. 200604 1001
  17. 200604 1008
  18. 200604 1020
  19. ;
  20. run;
  21. proc sort data=a;
  22. by company;
  23. run;
  24. data b;
  25. set a;
  26. by company;
  27. month=put(substr(left(date),5,2),8.);
  28. if first.company = 0 and month-lag(month)=1 then id =1;
  29. else id = 0;
  30. drop month;
  31. run;
复制代码

地板
frackdeng 发表于 2010-3-25 13:33:09
  1. data yourdset;
  2.   input date company;
  3.   _date=input(catt(put(date,8.),'01'),yymmdd10.);
  4.   format _date yymmdd10.;
  5.   datalines;
  6. 200601 1001
  7. 200601 1009
  8. 200602 1001
  9. 200602 1009
  10. 200602 1010
  11. 200602 1080
  12. 200603 1002
  13. 200603 1009
  14. 200603 1010
  15. 200603 1020
  16. 200604 1001
  17. 200604 1008
  18. 200604 1020
  19. ;
  20. run;

  21. proc sort data=yourdset;
  22.     by company _date;
  23. run;

  24. data a;
  25.     set yourdset;
  26.     by company;
  27.     if first.company=0 and intck('month',lag(_date),_date)=1 then id=1;
  28.     else id=0;
  29. run;
复制代码
看看这个怎么样
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

7
jingju11 发表于 2010-3-25 21:15:16
1# funwin


  1. DATA AA1;
  2. SET AA;
  3. N+1;
  4. Fmon = INT(date/100)*12+(date-INT(date/100)*100);
  5. RUN;
  6. proc sort; by company Fmon N; run;
  7. data final;
  8. set AA1; by company;
  9. D = DIF(Fmon);
  10. ID = 0;
  11. IF (NOT FIRST.company AND D = 1) THEN ID = 1;
  12. DROP Fmon D;
  13. run;
  14. proc sort OUT = Final(DROP = N); by N; RUN;
复制代码

8
funwin 发表于 2010-3-26 01:30:56
谢谢 各位的帮助 非常受益!
最后我还是选用了frackdeng 的code,确实用intck功能 方便许多 非常感谢!

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

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