全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3947 3
2007-05-16

程序

data a;
input a;
cards;
1
1
1
2
2
2
2
4
4
4
;
run;

data a;
set a;
if a=lag(a) then p=a*lag(a);
run;

希望的输出结果应该为:即每个组(a)第一个观察没有对应的p
1 .
1 1
1 1
2 .
2 2
2 4
2 4
4 .
4 8
4 16

实际的结果为:第二行也没有对也的p,为什么?
1
1
1 1
2
2 2
2 4
2 4
4
4 8
4 16

二维码

扫码加我 拉你入群

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

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

全部回复
2007-5-16 15:50:00

这是条件执行lag的原因

我们假设此时b=lag(a)的.

那么可以理解为数据集形式为


Obs a b

1 1 .
2 1 1
3 1 1
4 2 1
5 2 2
6 2 2
7 2 2
8 4 2
9 4 4
10 4 4




当你执行a=lag(a)时,条件执行lag(a),此时lag函数在a=lag(a)序列中起作用.

此时对应的c=lag(a)数据集变换如下:

Obs a b c

1 1 . .
2 1 1 .
3 1 1 1
4 2 1 .
5 2 2 1
6 2 2 2
7 2 2 2
8 4 2 .
9 4 4 2
10 4 4 4


所以最后的结果为

Obs a b c p

1 1 . . .
2 1 1 . .
3 1 1 1 1
4 2 1 . .
5 2 2 1 2
6 2 2 2 4
7 2 2 2 4
8 4 2 . .
9 4 4 2 8
10 4 4 4 16





[此贴子已经被作者于2007-5-16 16:15:07编辑过]

二维码

扫码加我 拉你入群

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

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

2010-1-23 10:52:43
这个帖子太古老了,估计lz也不会看了,不过我还是要说一下。。

lag函数是不能在条件语句一同使用的,否则会出错。。。
二维码

扫码加我 拉你入群

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

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

2010-1-23 11:23:34
苗条肥仔 发表于 2010-1-23 10:52
这个帖子太古老了,估计lz也不会看了,不过我还是要说一下。。

lag函数是不能在条件语句一同使用的,否则会出错。。。
"lag函数是不能在条件语句一同使用的,否则会出错"

Put in this way, lag is executable statement and implemented in stack. When it gets executed, then pop-and-push. So the result may not be as one's expectation.

See example (no error)

data t1;
  do i=1,2,3,3 ;
     x=ranuni(10);
     output;
  end;
run;

data t2;
   set t1;
   y=lag(i);
   if i in (1,3) then z=lag(x);
   run;

   proc print; run;

************************
  Obs    i       x       y       z

   1     1    0.84963    .     .
   2     2    0.70089    1     .
   3     3    0.99824    2    0.84963
   4     3    0.59399    3    0.99824
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群