楼主: liuliuqiu
1599 9

[问答] sas编程 [推广有奖]

  • 6关注
  • 2粉丝

副教授

62%

还不是VIP/贵宾

-

威望
0
论坛币
2340 个
通用积分
8.9561
学术水平
3 点
热心指数
5 点
信用等级
5 点
经验
14393 点
帖子
429
精华
0
在线时间
1113 小时
注册时间
2009-3-24
最后登录
2024-2-29

10论坛币
求教:
id         year       export
1          2001        0
1          2002        1
1          2003        1
1          2004        0
1          2005        0
1          2006        1
1          2007        1
1          2008        1
1          2009        0
1          2010        1
1          2011        1
以上数据,id为企业个体,export为是否出口(1为出口,0为不出口),想统计企业每次出口的年限。如企业1,2002年开始出口,并连续出口两年,所以第一次出口的年限为2;第二次出口从2006年开始,持续三年,所以第二次出口的年限为3,;第三次出口从2010年开始,但由于样本时间到2011年,所以不知道以后的情况,也无法得出第三次出口的年限(换言之,每次出现0,就开始统计后面连续出口1的个数,并以下次再次碰到0结束统计)。基于此,想得到的数据为:
id      suv   startyear
1        2         2002
1        3         2006


关键词:SAS编程 export starty xport Start export 2011 统计 样本
沙发
孤单的我们 发表于 2016-4-27 15:12:10 |只看作者 |坛友微信交流群
liuliuqiu 发表于 2016-4-27 16:23
老师,您好!刚才您给我的程序,如果换了一个数据,结果好像有点问题
1 2001 0
1 2002 1
  1. data b;
  2.         set a;
  3.         by id export notsorted;
  4.         if first.id then sort=0;
  5.         if first.export & export=1 then sort+1;
  6. run;

  7. data c;
  8.         set b;
  9.         by id sort;
  10.         if (first.sort & export=0) | (last.sort & export=1) then delete;
  11. run;

  12. proc sql noprint;
  13.         create table want as
  14.         select distinct id,sum(export) as suv,min(year) as startyear from c
  15.         group by id,sort having count(*)>1 & min(export)=0 order by id,startyear;
  16. quit;
复制代码

使用道具

藤椅
孤单的我们 发表于 2016-4-27 15:28:25 |只看作者 |坛友微信交流群
  1. data a;
  2. input id  year export;
  3. cards;
  4. 1 2001 0
  5. 1 2002 1
  6. 1 2003 1
  7. 1 2004 0
  8. 1 2005 0
  9. 1 2006 1
  10. 1 2007 1
  11. 1 2008 1
  12. 1 2009 0
  13. 1 2010 1
  14. 1 2011 1
  15. ;
  16. run;

  17. data b;
  18.         set a;
  19.         by id export notsorted;
  20.         if first.export & export=1 then sort+1;
  21. run;

  22. data c;
  23.         set b;
  24.         by id sort;
  25.         if (first.sort & export=0) | (last.sort & export=1) then delete;
  26. run;

  27. proc sql noprint;
  28.         create table want as
  29.         select distinct id,sum(export) as suv,min(year) as startyear from c group by sort having count(*)>1 order by startyear;
  30. quit;
复制代码

使用道具

板凳
liuliuqiu 发表于 2016-4-27 16:17:59 |只看作者 |坛友微信交流群
孤单的我们 发表于 2016-4-27 15:28
老师,您好,刚才您给我的程序,如果换了一个数据,结果好像有点问题
1 2001 0
1 2002 1
1 2003 1
1 2004 0
1 2005 0
1 2006 1
1 2007 1
1 2008 1
1 2009 0
1 2010 1
1 2011 1
2 2001 0
2 2002 0
2 2003 1
2 2004 1
2 2005 0
2 2006 0
2 2007 1
2 2008 1
2 2009 0
2 2010 1
2 2011 1
如果数据是这样的,我想得到的数据是:
1  2  2002
1  3  2006
2  2  2003
2  2  2007
我忘了说样本里有不同给的个体,每个个体都按照上述办法依次进行处理

使用道具

报纸
liuliuqiu 发表于 2016-4-27 16:23:38 |只看作者 |坛友微信交流群
孤单的我们 发表于 2016-4-27 15:28
老师,您好!刚才您给我的程序,如果换了一个数据,结果好像有点问题
1 2001 0
1 2002 1
1 2003 1
1 2004 0
1 2005 0
1 2006 1
1 2007 1
1 2008 1
1 2009 0
1 2010 1
1 2011 1
2 2001 0
2 2002 0
2 2003 1
2 2004 1
2 2005 0
2 2006 0
2 2007 1
2 2008 1
2 2009 0
2 2010 1
2 2011 1
如果数据是这样的,想得到的结果是:
id      suv   startyear
1        2         2002
1        3         2006
2        2         2003
2        2         2007
但与程序做出的结果不同 。我忘了说样本里有不同的个体,每个个体都按照上述办法依次进行处理。还得麻烦您,不好意思。

使用道具

地板
孤单的我们 发表于 2016-4-28 13:00:32 |只看作者 |坛友微信交流群
liuliuqiu 发表于 2016-4-27 16:23
老师,您好!刚才您给我的程序,如果换了一个数据,结果好像有点问题
1 2001 0
1 2002 1
  1. data a;
  2. input id  year export;
  3. cards;
  4. 1 2001 0
  5. 1 2002 1
  6. 1 2003 1
  7. 1 2004 0
  8. 1 2005 0
  9. 1 2006 1
  10. 1 2007 1
  11. 1 2008 1
  12. 1 2009 0
  13. 1 2010 1
  14. 1 2011 1
  15. 2 2001 0
  16. 2 2002 0
  17. 2 2003 1
  18. 2 2004 1
  19. 2 2005 0
  20. 2 2006 0
  21. 2 2007 1
  22. 2 2008 1
  23. 2 2009 0
  24. 2 2010 1
  25. 2 2011 1
  26. ;
  27. run;

  28. data b;
  29.         set a;
  30.         by id export notsorted;
  31.         if first.export & export=1 then sort+1;
  32. run;

  33. data c;
  34.         set b;
  35.         by id sort;
  36.         if (first.sort & export=0) | (last.sort & export=1) then delete;
  37. run;

  38. proc sql noprint;
  39.         create table want as
  40.         select distinct id,sum(export) as suv,min(year) as startyear from c
  41.                         group by id,sort having count(*)>1 & min(export)=0 order by startyear;
  42. quit;
复制代码

使用道具

7
liuliuqiu 发表于 2016-7-13 21:22:43 |只看作者 |坛友微信交流群
孤单的我们 发表于 2016-4-27 15:12
老师,您好!
不好意思,还想请教您一个问题。
在原问题中,我设定最后年份的export如果为1,则由于不知道后来的情况而舍去。
现在将这个设定去掉,如何修改编程呢?例如:
id         year       export
1          2001        0
1          2002        1
1          2003        1
1          2004        0
1          2005        0
1          2006        1
1          2007        1
1          2008        1
1          2009        0
1          2010        1
1          2011        1
想得到的数据为:
id      suv   startyear
1        2         2002
1        3         2006
1        2         2010
非常感谢您!

使用道具

8
孤单的我们 发表于 2016-7-14 09:07:34 |只看作者 |坛友微信交流群
liuliuqiu 发表于 2016-7-13 21:22
老师,您好!
不好意思,还想请教您一个问题。
在原问题中,我设定最后年份的export如果为1,则由于不知 ...
  1. data a;
  2. input id  year export;
  3. cards;
  4. 1 2001 0
  5. 1 2002 1
  6. 1 2003 1
  7. 1 2004 0
  8. 1 2005 0
  9. 1 2006 1
  10. 1 2007 1
  11. 1 2008 1
  12. 1 2009 0
  13. 1 2010 1
  14. 1 2011 1

  15. ;
  16. run;

  17. data b;
  18.         set a;
  19.         by id export notsorted;
  20.         if first.export & export=1 then sort+1;
  21. run;

  22. data c;
  23.         set b;
  24.         by id sort;
  25.         if (first.sort & export=0) then delete;
  26. run;

  27. proc sql noprint;
  28.         create table want as
  29.         select distinct id,sum(export) as suv,min(year) as startyear from c
  30.                         group by id,sort having count(*)>1  order by startyear;
  31. quit;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
liuliuqiu + 5 + 5 + 5 热心帮助其他会员

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

使用道具

9
liuliuqiu 发表于 2016-7-14 12:19:34 |只看作者 |坛友微信交流群
孤单的我们 发表于 2016-7-14 09:07
谢谢您,已经做出结果了

使用道具

10
gwrsm 发表于 2016-8-13 18:07:29 |只看作者 |坛友微信交流群
学习  stata没法做吗?????????

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-25 13:33