楼主: tianlai888
2169 3

求助高人:样本间隔的统计 [推广有奖]

  • 0关注
  • 0粉丝

本科生

19%

还不是VIP/贵宾

-

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

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
求助高人:样本间隔的统计
下列程序是想统计1出现时,距上次出现间隔了多少次,怎么不对,请高手帮助?
data aa;
input x @@;
cards;
1 2 1 1 2 2 1 1 1 1 2 2 2 2 1 2 2 1 2 2 2 1
;
run;
data aa1;
set aa;
if x=1 then x_1+1; else x_1=.;
if x^=1 then x_2+1; else x_2=.;
if x=1 and x^=lag(x) then x_1jg=lag(x_2);
if x=1 and x =lag(x) then x_1jg=0;
if x=2 and x^=lag(x) then x_2jg=lag(x_1);
if x=2 and x =lag(x) then x_2jg=0;
run;

我想得到下列形式:
x  x_1jg   x_2jg
1 0 .
2 . 1
1 1 .
1 0 .
2 . 2
2 . 0
1 2 .
1 0 .
1 0 .
1 0 .
2 . 4
2 . 0
2 . 0
2 . 0
1 4 .
2 . 1
2 . 0
1 2 .
2 . 1
2 . 0
2 . 0
1 3 .

谢谢!! <script type="text/javascript"></script><script src="https://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script><script></script>
二维码

扫码加我 拉你入群

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

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

关键词:Input cards Then Data else 统计 样本 高人 间隔

回帖推荐

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

问题解决一半。下一半应该可以同样解决。看看是不是这样。data aa;input x @@;cards;1 2 1 1 2 2 1 1 1 1 2 2 2 2 1 2 2 1 2 2 2 1;run;data aa1;    set aa; x_lag = lag(x); if x=1 then        do;     if x_lag = 2 then count_2 = 1;          else if x_lag = 1 then count_2 = 0;   & ...

linhaoran1234 发表于4楼  查看完整内容

给个稍微简单点的:data aa;input x @@;cards;1 2 1 1 2 2 1 1 1 1 2 2 2 2 1 2 2 1 2 2 2 1;run;data aa2;retain t 0;set aa;if x=1 then do; m=t; t=0;end;else do; t+1;end;drop t;run;

本帖被以下文库推荐

沙发
yongyitian 发表于 2009-3-23 22:33:00 |只看作者 |坛友微信交流群

问题解决一半。下一半应该可以同样解决。看看是不是这样。
data aa;
input x @@;
cards;
1 2 1 1 2 2 1 1 1 1 2 2 2 2 1 2 2 1 2 2 2 1
;
run;

data aa1;
    set aa;
 x_lag = lag(x);
 if x=1 then
       do;     if x_lag = 2 then count_2 = 1;
          else if x_lag = 1 then count_2 = 0; 
       end;
  else if x = 2 then
    do;       if x_lag = 1 then  count_2 = 1;
      else if x_lag = 2 then  count_2 + 1;
    end;
run;

data aa2 (keep= x x_1jg);
    if _N_ = 1 then x_1jg=0;
    set aa1;
 count_2lag = lag(count_2);
 if x=1 and x_lag=2 then x_1jg = count_2lag;
 if x=1 and x_lag=1 then x_1jg = 0;
run;
proc print data=aa2;
   var x x_1jg;
run;

output
Obs  x    x_1jg
 1    1      0
 2    2      .
 3    1      1
 4    1      0
 5    2      .
 6    2      .
 7    1      2
 8    1      0
 9    1      0
10    1      0
11    2      .
12    2      .
13    2      .
14    2      .
15    1      4
16    2      .
17    2      .
18    1      2
19    2      .
20    2      .
21    2      .
22    1      3

已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

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

使用道具

藤椅
tianlai888 发表于 2009-3-24 09:14:00 |只看作者 |坛友微信交流群

谢谢 yongyitian 您的指教!!

这就是需要的答案。

使用道具

板凳
linhaoran1234 发表于 2009-3-30 10:01:00 |只看作者 |坛友微信交流群

给个稍微简单点的:

data aa;
input x @@;
cards;
1 2 1 1 2 2 1 1 1 1 2 2 2 2 1 2 2 1 2 2 2 1
;
run;

data aa2;
retain t 0;
set aa;
if x=1 then do;
 m=t;
 t=0;
end;
else do;
 t+1;
end;
drop t;
run;

已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

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

使用道具

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

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

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

GMT+8, 2024-4-28 15:06