SAS中文论坛

标题: 搜索最后一次“行为转折”时间点 [打印本页]

作者: hwb    时间: 2014-5-24 22:30
标题: 搜索最后一次“行为转折”时间点
本帖最后由 hwb 于 2014-5-24 22:38 编辑
  1. DATA A;
  2. INPUT id time1        b1 $ time2 b2 $        time3 b3 $ time4 b4 $ time5        b5 $ @@;
  3. CARDS;
  4. 101.00        1.00        A        2.00        A        3.00        A        4.00        B        5.00        B
  5. 102.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        B
  6. 103.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
  7. 104.00        1.00        A        2.00        B        3.00        B        4.00        B        5.00        B
  8. 105.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
  9. 106.00        1.00        B        2.00        B        3.00        B        4.00        B        5.00        B
  10. 107.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
  11. 108.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
  12. 109.00        1.00        A        2.00        B        3.00        B        4.00        B        5.00        B
  13. 110.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
  14. 111.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        B
  15. 112.00        1.00        B        2.00        B        3.00        B        4.00        B        5.00        B
  16. 113.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
  17. 114.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
  18. 115.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
  19. 116.00        1.00        B        2.00        B        3.00        B        4.00        B        5.00        B
  20. 117.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
  21. 118.00        1.00        A        2.00        A        3.00        A        4.00        B        5.00        B
  22. ;
  23. RUN;
  24. PROC PRINT DATA=A;
  25. RUN;
  26. QUIT;
复制代码

数据结构如代码所示,目的是求得不同时期(time1- time5), 变量b最后一次出现A的时间点(新变量),
如能有效回复,不胜感激


作者: hwb    时间: 2014-5-25 22:42
期待回复@@
作者: yugao    时间: 2014-5-26 16:52
  1. DATA A;
  2. INPUT id time1        b1 $ time2 b2 $        time3 b3 $ time4 b4 $ time5        b5 $ @@;
  3. CARDS;
  4. 101.00        1.00        A        2.00        A        3.00        A        4.00        B        5.00        B
  5. 102.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        B
  6. 103.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
  7. 104.00        1.00        A        2.00        B        3.00        B        4.00        B        5.00        B
  8. 105.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
  9. 106.00        1.00        B        2.00        B        3.00        B        4.00        B        5.00        B
  10. 107.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
  11. 108.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
  12. 109.00        1.00        A        2.00        B        3.00        B        4.00        B        5.00        B
  13. 110.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
  14. 111.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        B
  15. 112.00        1.00        B        2.00        B        3.00        B        4.00        B        5.00        B
  16. 113.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
  17. 114.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
  18. 115.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
  19. 116.00        1.00        B        2.00        B        3.00        B        4.00        B        5.00        B
  20. 117.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
  21. 118.00        1.00        A        2.00        A        3.00        A        4.00        B        5.00        B
  22. ;
  23. RUN;
  24. PROC PRINT DATA=A;
  25. RUN;
  26. QUIT;


  27. *目的,找到b1-b5中最后一次出现"A"的时刻;
  28. *思路是利用transpsoe对数据进行转置,然后排序,通过last.id函数找到最后的‘A’,根据命名规则,bi对应timei;
  29. proc transpose data=a out=test(rename=(COL1=value _NAME_=label));
  30.    var b: ;
  31.    by id;
  32. run;
  33. proc sort data=test ;
  34.    by id value;
  35. run;
  36. data test_1;
  37.    set test;
  38.    by id value;
  39.    if last.value & value="A" then output;
  40. run;
  41.    
复制代码

作者: hwb    时间: 2014-5-27 08:40
yugao 发表于 2014-5-26 16:52

thks for yugao
作者: gogotiger    时间: 2014-5-30 00:36
DATA A;
INPUT id time1        b1 $ time2 b2 $        time3 b3 $ time4 b4 $ time5        b5 $ @@;
mm=ifn(findc(cats(b5,b4,b3,b2,b1),'A')>0,6-findc(cats(b5,b4,b3,b2,b1),'A'),0);
CARDS;
101.00        1.00        A        2.00        A        3.00        A        4.00        B        5.00        B
102.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        B
103.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
104.00        1.00        A        2.00        B        3.00        B        4.00        B        5.00        B
105.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
106.00        1.00        B        2.00        B        3.00        B        4.00        B        5.00        B
107.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
108.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
109.00        1.00        A        2.00        B        3.00        B        4.00        B        5.00        B
110.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
111.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        B
112.00        1.00        B        2.00        B        3.00        B        4.00        B        5.00        B
113.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
114.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
115.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
116.00        1.00        B        2.00        B        3.00        B        4.00        B        5.00        B
117.00        1.00        A        2.00        A        3.00        A        4.00        A        5.00        A
118.00        1.00        A        2.00        A        3.00        A        4.00        B        5.00        B
;
RUN;
作者: hwb    时间: 2014-5-30 07:58
gogotiger 发表于 2014-5-30 00:36
DATA A;
INPUT id time1        b1 $ time2 b2 $        time3 b3 $ time4 b4 $ time5        b5 $ @@;
mm ...

京剧,,谢谢gogotiger




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2