楼主: 3fatty
3996 3

[求助]关于lag的问题 [推广有奖]

  • 0关注
  • 3粉丝

已卖:2091份资源

硕士生

17%

还不是VIP/贵宾

-

威望
0
论坛币
15135 个
通用积分
27.3124
学术水平
25 点
热心指数
28 点
信用等级
15 点
经验
1631 点
帖子
64
精华
1
在线时间
64 小时
注册时间
2006-4-12
最后登录
2024-9-18

楼主
3fatty 发表于 2007-5-16 10:55:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

程序

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

二维码

扫码加我 拉你入群

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

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

关键词:lag Input cards Data 输出结果 lag

回帖推荐

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

"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; ...

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

这是条件执行lag的原因 我们假设此时b=lag(a)的. 那么可以理解为数据集形式为 Obs a b 1 1 . 2 1 1 3 1 1 4 2 1 ...

本帖被以下文库推荐

沙发
windwater 发表于 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编辑过]

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

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

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

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

板凳
bobguy 发表于 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
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 10 精彩帖子

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

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

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